o
    ۾i|                     @   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mZ ddlmZ ddlmZ ddlmZmZmZ dd	lmZ d
ZdZdZdddZejrYejZ nej!Z e 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* Z0d+d, Z1d-d* Z0e1e0eej2ej3 d.d/ Z4d0d1 Z5d2d3 Z6ee6d4d5d6d7 Z7e1e5d8e6ej8 d9d: Z9d;d< Z:d=d> Z;d?d@ Z<dAdB Z=dCdD Z>dEdF Z?dGdH Z@dIdJ ZAdKdL ZBdMdN ZCdOdP ZDdQdR ZEdSdT ZFdUdV ZGdWdX ZHdYdZ ZId[d\ ZJd]d^ ZKd_d` ZLdadb ZMdcdd ZNdedf ZOdgdh ZPdidj ZQdkdl ZRdmdn ZSdodp ZTdqdr ZUdsdt ZVdudv ZWdwdx ZXdydz ZYd{d| ZZd}d~ Z[dd 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 Zdd Zdd Zdd Zdd Zdd Zdd  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config)register_jitable)
npdatetime)	cmathimplmathimplnumbers)numpy_versiong+eG?g&{?g9B.?c                    s   t ||ksJ t | j|ksJ | jd  |du r }t fdd| jD r-| j|ksBddl}| jjj}d	|| }J |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   E/home/ubuntu/.local/lib/python3.10/site-packages/numba/np/npyfuncs.py	<genexpr>*   s    z/_check_arity_and_homogeneity.<locals>.<genexpr>z"{0} called with invalid types: {1})
lenargsallreturn_typeinspectcurrentframef_backf_codeco_nameformat)sigr   arityr   r   fnamemsgr   r   r   _check_arity_and_homogeneity   s   
"r(   c                    sx    j }}tj||gt|j }tj|||d}	 fddt	||jD }
 
|	|
} |tj|jS )Nnamec                    s    g | ]\}}  ||qS r   )cast)r   r   argtybuildercontextr   r   r   
<listcomp>>   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   modltyfntyfn	cast_argsresultr   r-   r   _call_func_by_name_with_cast5   s   

rA   c              
      s<  |j d }z|| }W n ty$ } zd|t|}	t|	d }~ww  j}
|tjv rt	 |} fdd|D }|
 g| }|gt|j  }fdd|D }tjtj |}t|
||} ||  |d }|S 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	   alloca_once_valuer   )r.   r   r   r0   ^   s    z/_dispatch_func_by_name_type.<locals>.<listcomp>c                    s   g | ]	}  | qS r   )get_value_type
as_pointer)r   r   r/   r   r   r0   f   s    c                    s   g | ]}  |qS r   )r2   )r   atyrE   r   r   r0   n       r)   )r   KeyErrorr#   strr   LoweringErrorr1   r   complex_domainmake_complex_getpointerlistr3   r4   r5   VoidTyper	   get_or_insert_functionr8   loadr2   r   r6   call_external_function)r/   r.   r$   r   table	user_namer   r:   er'   r;   outptrargs	call_argscall_argtyscall_argltysr=   r>   retvalargtypesrestyper   )r.   r/   r   _dispatch_func_by_name_typeE   s<   
	



r^   c              	   C   s  t ||d |\}}|jd }| |d}| |d}| |d|jjd > }	|d||}
|d||}|d|	|}|||}||
|}|j|ddn\}}| |j	}W d    n1 sbw   Y  |E |j	}|
||}|||}|d||}|d||}|||}|d	||}|||}||||}|||}W d    n1 sw   Y  W d    n1 sw   Y  ||j}||| ||| |S )
N   r      ==Flikely>!=)r(   r   get_constanttypewidthicmp_unsignedand_or_if_elsebasic_blocksdivsremicmp_signedxorselectaddphiadd_incoming)r/   r.   r$   r   numdenr   ZERO	MINUS_ONEMIN_INTden_is_zeroden_is_minus_onenum_is_min_intcould_cause_sigfpe
force_zerothen	otherwisebb_thenbb_otherwisedivr;   num_gt_zeroden_gt_zeronot_same_signmod_not_zeroneeds_fixing	fix_valueresult_otherwiser@   r   r   r   np_int_sdiv_impl   sB   
r   c                 C   s   t ||d |\}}|jd }| |d}|d||}|j}	t||? |j}
|||}|d||}|d||}|	||}|d||}|
||}||||}|||}W d    n1 sgw   Y  ||j}|||	 |||
 |S )Nr_   r   rf   re   )r(   r   rg   rj   rn   r	   if_unlikelyrp   rq   rr   rk   rs   rt   ru   rh   rv   )r/   r.   r$   r   rw   rx   r   ry   den_not_zerobb_no_ifbb_ifr;   r   r   r   r   r   r   	final_modr@   r   r   r   np_int_srem_impl   s*   
r   c                 C   H   t | ||jd |j |}t| ||jd |j |}| ||j||gS Nr   ra   )r   r   r   r   
make_tupler/   r.   r$   r   r   remr   r   r   np_int_sdivrem_impl      r   c              	   C   s   t ||d |\}}|jd }| |d}|d||}|j|dd:\}	}
|	 |j}W d    n1 s6w   Y  |
 |||}|j}W d    n1 sQw   Y  W d    n1 s`w   Y  ||j}|	|| |	|| |S )Nr_   r   rb   Frc   )
r(   r   rg   rj   rm   rn   udivru   rh   rv   )r/   r.   r$   r   rw   rx   r   ry   div_by_zeror   r   r   r   r   r@   r   r   r   np_int_udiv_impl   s&   
	r   c                 C   s   t ||d |\}}|jd }| |d}|d||}|j}	t|| |j}
|||}W d    n1 s9w   Y  ||j	}|
||	 |
||
 |S )Nr_   r   rf   )r(   r   rg   rj   rn   r	   r   uremru   rh   rv   )r/   r.   r$   r   rw   rx   r   ry   r   r   r   r;   r@   r   r   r   np_int_urem_impl   s   
r   c                 C   r   r   )r   r   r   r   r   r   r   r   r   np_int_udivrem_impl   r   r   c                 C      t ||d |j| S Nr_   )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 )Nr_   r           rf   <)	r(   r   rg   fremfcmp_orderedrk   rr   rs   fadd)r/   r.   r$   r   in1in2r   ry   resres_ne_zeroden_lt_zerores_lt_zeror   r   r   r   r   np_real_mod_impl  s   

r   c                 C   r   r   )r(   r   r   r   r   r   np_real_fmod_impl  s   
r   c                 C   s8   t j|jd}|||}|d||}||||S )Nr   r   )r3   r4   Constantrh   fsubr   rs   )r/   r.   r   ry   arg_negatedarg_is_negativer   r   r   _fabs   s   r   c                    s    fdd|D \}}|j }|j}|j }|j}	|jtfdd||||	fD s/J d j}
tjd}tjd}t	 |}t	 |	} 
d||} |\}}|  
d||} 
d||} ||} |z\}}|  |||
_  |||
_W d    n1 sw   Y  |F  |	|} |	|} ||} ||} ||} ||} ||} ||} |||
_  |||
_W d    n1 sw   Y  W d    n1 sw   Y  W d    n	1 s	w   Y  |F  ||	} ||} |	|} ||} ||} ||} ||} ||} |||
_  |||
_W d    n1 sZw   Y  W d    |
 S W d    |
 S 1 sww   Y  |
 S )	Nc                    "   g | ]}j  jd  |dqS r   valuerL   r   r   r.   r/   r$   r   r   r0   /      z'np_complex_div_impl.<locals>.<listcomp>c                       g | ]}|j  kqS r   rh   r   iftyper   r   r0   7  rG   mismatched typesr         ?>=rb   )realimagrh   r   make_helperr   r3   r4   r   r   r   rm   rk   r   fmulr   r   	_getvalue)r/   r.   r$   r   r   r   in1rin1iin2rin2irV   ry   ONEin2r_absin2i_absin2r_abs_ge_in2i_absr   r   in2r_is_zeroin2i_is_zeroin2_is_zeroinn_theninn_otherwiserattmp1tmp2scltmp3tmp4tmp5tmp6r   r.   r/   r   r$   r   np_complex_div_impl'  sx   
& 
-
--r   c                 C      d S r   r   x1x2r   r   r   _npy_logaddexpt     r   c                    s    t | dd fdd}d S )Ngenerictargetc                    s(   | |krd S |   fdd}|S )Nc                    sX   | |}}||kr| S || }|dkr| |  S |dkr*| | S |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_logaddexp{  s
   z-_generate_logaddexp.<locals>.ol_npy_logaddexpr   )
fnoverloadr   r   r   r   r   r   r   _generate_logaddexpw  s   
r   c                 C   r   r   r   r   r   r   r   r     r   c                 C   F   t ||d | jt}|| jg |jR i }| ||}|||S r   )r(   typing_contextresolve_value_typer   get_call_typer   get_functionr/   r.   r$   r   r=   r   r   r   r   np_real_logaddexp_impl  
   
r   c                 C   r   r   r   r   r   r   r   _npy_logaddexp2  r   r  c                 C   r   r   r   r   r   r   r   npy_log2_1p  r   r  r   r   c                    s   | t   fdd}|S )Nc                    s    t |  S r   )nplog1pr  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   r   r   )r(   r   r   r  r   r   r   r   r   r   r   np_real_logaddexp2_impl  r   r
  c                    sf   |\}}|j  t fdd|D sJ d|j\}}| |||tj}| |||tj}|||S )Nc                 3   s    | ]}|j  kV  qd S r   r   r   lltyper   r   r     s    z&np_int_truediv_impl.<locals>.<genexpr>zmust have homogeneous types)rh   r   r   r+   r   r9   r   )r/   r.   r$   r   rw   rx   numty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   r   r   )r  r   r   r   r   r   r   r   r   np_real_divmod_impl  r   r  c              	      s
  j d j}t||} fdd|D \}}|j}|j}	|j}
|j}|jtfdd||	|
|fD s;J dtj	
d} j}||_t |
}t |} d||} |\}}|5  ||
} |	|} ||} ||} |
|} ||}t ||f|_W d    n1 sw   Y  |5  |
|} ||} |
|} |	|} ||} ||}t ||f|_W d    n1 sw   Y  W d    | S W d    | S 1 sw   Y  | S )Nr   c                    r   r   r   r   r   r   r   r0     r   z-np_complex_floor_div_impl.<locals>.<listcomp>c                    r   r   r   r   r   r   r   r0     rG   r   r   r   )r   underlying_floatr   r  r   r   rh   r   r3   r4   r   r   r   r   r   rm   r   r   r   r  r   )r/   r.   r$   r   
float_kind	floor_sigr   r   r   r   r   r   ry   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   np_complex_floor_div_impl  sV   
&	

r  c                 C      t ||d t| |||S r   r(   r   complex_power_implr   r   r   r   np_complex_power_impl     r  c                 C   r  r   )r(   r   real_power_implr   r   r   r   real_float_power_impl  r  r  c                 C   r  r   r  r   r   r   r   np_complex_float_power_impl$  r  r   c                 C   r  r   )r(   r   gcd_implr   r   r   r   np_gcd_impl-     r"  c           
      C   sX   |j \}}||  kr|jksJ  J |\}}dd }| ||||}	t| ||j|	S )Nc                 S   s$   | dkrdS t | |t||   S )z7
        Like gcd, heavily cribbed from Julia.
        r   )absr  gcd)abr   r   r   lcm;  s   $znp_lcm_impl.<locals>.lcm)r   r   compile_internalr   )
r/   r.   r$   r   xtyytyr   r   r(  r   r   r   r   np_lcm_impl5  s   
r,  c                 C   s$  t ||d tdkrdd }| ||||}t| ||j|S |d }|jd }| ||}|j}	| |	d}
| |	d}| |	d}| |	t	d	}|
|_
|
|_tjtjg|gd
 R  }|| g}t| |||}t| |||}t| |||}|||
|}||||}|||||_
| S )Nra   )r_   r   c                 S   s$   t | j| j}|dkrdS | | S )Nr   y                )mathhypotr   r   )zr$  r   r   r   complex_signO  s   z*np_complex_sign_impl.<locals>.complex_signr   r   r         nanr_   )r(   r   r)  r   r   r   rL   r  rg   floatr   r   r   r  r   booleanr   np_complex_ge_implnp_complex_eq_implnp_complex_lt_implrs   )r/   r.   r$   r   r0  r   opr   r@   float_tyry   r   rz   NANcmp_sigcmp_argsarg1_ge_arg2arg1_eq_arg2arg1_lt_arg2real_when_gereal_when_nger   r   r   np_complex_sign_implH  s0   
rB  c                 C      t ||d t|d|S )Nra   z	llvm.rintr(   r   call_fp_intrinsicr   r   r   r   np_real_rint_implu     rF  c           	      C   s|   t ||d |jd }|j}| j|||d d}| ||}tj|gd  }t| |||jg|_t| |||jg|_|	 S )Nra   r   r   r_   )
r(   r   r  rL   r   r  rF  r   r   r   )	r/   r.   r$   r   r   r9  r   rV   	inner_sigr   r   r   np_complex_rint_impl{  s   
rI  c                 C   r  Nra   )r(   r   exp_implr   r   r   r   np_real_exp_impl  r#  rL  c                 C   r  rJ  )r(   r   rK  r   r   r   r   np_complex_exp_impl  r#  rM  c                 C   J   t ||d |d j}tj||g}tj|j|dd}|||d gS )Nra   r   z	llvm.exp2r)   	r(   rh   r3   r4   r5   r	   r6   r1   r8   r/   r.   r$   r   ll_tyr=   r>   r   r   r   np_real_exp2_impl     

rR  c           	      C   s|   t ||d |jd }|j}| j|||d d}| ||}| |t}|||j|_|||j|_t	| |||
 gS Nra   r   r   )r(   r   r  rL   rg   
_NPY_LOGE2r   r   r   rM  r   )	r/   r.   r$   r   r   r9  r   r   loge2r   r   r   np_complex_exp2_impl  s   
rW  c                 C   r  rJ  )r(   r   log_implr   r   r   r   np_real_log_impl  r#  rY  c                 C   r  rJ  )r(   r   rX  r   r   r   r   np_complex_log_impl  r#  rZ  c                 C   rN  )Nra   r   z	llvm.log2r)   rO  rP  r   r   r   np_real_log2_impl  rS  r[  c                 C   n   t ||d |jd }|j}t| |||}| j|||d}| |t}|||j|_|||j	|_	|
 S rT  )r(   r   r  rZ  rL   rg   r  r   r   r   r   )r/   r.   r$   r   r   r9  r   log2er   r   r   np_complex_log2_impl     
r^  c                 C   r  rJ  )r(   r   
log10_implr   r   r   r   np_real_log10_impl  r#  ra  c                 C   r\  rT  )r(   r   r  rZ  rL   rg   _NPY_LOG10Er   r   r   r   )r/   r.   r$   r   r   r9  r   log10er   r   r   np_complex_log10_impl  r_  rd  c                 C   r  rJ  )r(   r   
expm1_implr   r   r   r   np_real_expm1_impl  r#  rf  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 )Nra   r   r_   r1  r   )r(   r   r  r   r  rg   rL   rL  r   np_real_cos_implr   np_real_sin_implr   r   r   )r/   r.   r$   r   r   r9  float_unary_sigrz   r   r&  rV   cos_imagsin_imagr   r   r   r   np_complex_expm1_impl  s   
rl  c                 C   r  rJ  )r(   r   
log1p_implr   r   r   r   np_real_log1p_impl	  r#  rn  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 )Nra   r   r_      r   r   )r(   r   r  r   r  rg   rL   r   r   np_real_hypot_implr   np_real_atan2_implrY  r   )r/   r.   r$   r   r   r9  ri  float_binary_sigr   r   rV   real_plus_onelr   r   r   np_complex_log1p_impl  s"   
ru  c                 C   r  rJ  )r(   r   	sqrt_implr   r   r   r   np_real_sqrt_impl&  r#  rw  c                 C   r  rJ  )r(   r   rv  r   r   r   r   np_complex_sqrt_impl+  r#  rx  c                 C       t ||d ||d |d S Nra   r   )r(   mulr   r   r   r   np_int_square_impl3     r|  c                 C   ry  rz  )r(   r   r   r   r   r   np_real_square_impl8  r}  r~  c                 C   s:   t ||d tj|jgd  }t| |||d |d gS Nra   ro  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 )Nra   T)fastmathc                 S   s$   | dk rt |  d S t | dS )Nr   gUUUUUU?)r  powerr  r   r   r   cbrtK  s   znp_real_cbrt_impl.<locals>.cbrtc                    s   t | rt jS  | S r   )r  isnanr2  r  r  r   r   _cbrtR  s   
z np_real_cbrt_impl.<locals>._cbrt)r(   r   r)  )r/   r.   r$   r   r  r   r  r   np_real_cbrt_implF  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   r9   rg   r   )	r/   r.   r$   r   r   r  in_as_floatr   result_as_floatr   r   r   np_int_reciprocal_impl]  s   r  c                 C   s*   t ||d | |jd}|||d S )Nra   r   r   )r(   rg   r   r   )r/   r.   r$   r   r   r   r   r   np_real_reciprocal_implk  s   r  c              	   C   s  t ||d |jd }|j}| |d}| |d}| j|||d d}| ||}	|j}
|j}t| ||
}t| ||}|d||}|	|\}}|0 |
||
}|||}||
|}|
||}|||}||	_||||	_W d    n1 sw   Y  |. |
|
|}||
|}|||}|
||}||||	_||||	_W d    n1 sw   Y  W d    |	 S W d    |	 S 1 sw   Y  |	 S )Nra   r   r   r   r   <=)r(   r   r  rg   rL   r   r   r   r   rm   r   r   r   r   r   )r/   r.   r$   r   r   r9  ry   r   r   rV   r   r   in1r_absin1i_absin1i_abs_le_in1r_absr   r   rtmp0dinv_dminus_rr   r   r   np_complex_reciprocal_implq  sJ   


r  c                 C   r  rJ  )r(   r   sin_implr   r   r   r   rh    r#  rh  c                 C   r  rJ  )r(   r   r  r   r   r   r   np_complex_sin_impl  r#  r  c                 C   r  rJ  )r(   r   cos_implr   r   r   r   rg    r#  rg  c                 C   r  rJ  )r(   r   r  r   r   r   r   np_complex_cos_impl  r#  r  c                 C   r  rJ  )r(   r   tan_implr   r   r   r   np_real_tan_impl  r#  r  c                 C   r  rJ  )r(   r   	asin_implr   r   r   r   np_real_asin_impl  r#  r  c                 C   r  rJ  )r(   r   	acos_implr   r   r   r   np_real_acos_impl  r#  r  c                 C   r  rJ  )r(   r   	atan_implr   r   r   r   np_real_atan_impl  r#  r  c                 C   r  r   )r(   r   atan2_float_implr   r   r   r   rq    r#  rq  c                 C   r  r   )r(   r   hypot_float_implr   r   r   r   rp    r#  rp  c                 C   r  rJ  )r(   r   	sinh_implr   r   r   r   np_real_sinh_impl  r#  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 Nra   r   r_   )r(   r   r  r   r  rL   r   r   rh  r  rg  np_real_cosh_implr   r   )r/   r.   r$   r   r   ftyfsig1r   rV   xrxisxishxrcxichxrr   r   r   np_complex_sinh_impl  s   
r  c                 C   r  rJ  )r(   r   	cosh_implr   r   r   r   r    r#  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  rL   r   r   rg  r  rh  r  r   r   )r/   r.   r$   r   r   r  r  r   rV   r  r  r  r  r  r  r   r   r   np_complex_cosh_impl  s   
r  c                 C   r  rJ  )r(   r   	tanh_implr   r   r   r   np_real_tanh_impl&  r#  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 )Nra   r   r_   r   )r(   r   r  r   r  rg   rL   r   r   rh  rg  r  r  r   r   r   r   r   )r/   r.   r$   r   r   r  r  r   r   rV   r  r  sicishrchr_rsis_rcicsqr_rcsqr_icr  r  rs_rcis_icis_rcrs_icnumrnumir   r   r   np_complex_tanh_impl+  s<   
r  c                 C   r  rJ  )r(   r   
asinh_implr   r   r   r   np_real_asinh_implT  r#  r  c                 C   r  rJ  )r(   r   
acosh_implr   r   r   r   np_real_acosh_impl\  r#  r  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 )Nra   r   ro  y      ?        )r(   r   r   r  get_constant_genericr   complex_add_implcomplex_sub_implrx  r  rZ  )r/   r.   r$   r   r   csig2r   r   
x_plus_onex_minus_onesqrt_x_plus_onesqrt_x_minus_one	prod_sqrtlog_argr   r   r   np_complex_acosh_impla  s,   

r  c                 C   r  rJ  )r(   r   
atanh_implr   r   r   r   np_real_atanh_impl  r#  r  c                 C   rC  )Nra   z
llvm.floorrD  r   r   r   r   r    rG  r  c                 C   rC  )Nra   z	llvm.ceilrD  r   r   r   r   np_real_ceil_impl  rG  r  c                 C   rC  )Nra   z
llvm.truncrD  r   r   r   r   np_real_trunc_impl  rG  r  c                 C   rC  )Nra   z	llvm.fabsrD  r   r   r   r   np_real_fabs_impl  rG  r  c                       t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d	||	} |
|} ||} ||S )
Nr_   r   r   c                       g | ]
}j  |d qS r   rL   r   r-   r   r   r0         z&np_complex_ge_impl.<locals>.<listcomp>re   ordrb   r   	r(   r   r4  r   r   r   r   rk   rl   )r/   r.   r$   r   r   r   r  r  yryixr_gt_yrno_nan_xi_yixr_eq_yrxi_ge_yi
first_termsecond_termr   r-   r   r5       
r5  c                    r  )
Nr_   r  r   c                    r  r  r  r   r-   r   r   r0     r  z&np_complex_le_impl.<locals>.<listcomp>r   r  rb   r  r  )r/   r.   r$   r   r   r   r  r  r  r  xr_lt_yrr  r  xi_le_yir  r  r   r-   r   np_complex_le_impl  r  r  c                       t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d||	} |
|} ||} ||S )	Nr_   r  r   c                    r  r  r  r   r-   r   r   r0     r  z&np_complex_gt_impl.<locals>.<listcomp>re   r  rb   r  )r/   r.   r$   r   r   r   r  r  r  r  r  r  r  xi_gt_yir  r  r   r-   r   np_complex_gt_impl  r  r  c                    r  )	Nr_   r  r   c                    r  r  r  r   r-   r   r   r0     r  z&np_complex_lt_impl.<locals>.<listcomp>r   r  rb   r  )r/   r.   r$   r   r   r   r  r  r  r  r  r  r  xi_lt_yir  r  r   r-   r   r7    r  r7  c                    v   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} |
|S )Nr_   r  r   c                    r  r  r  r   r-   r   r   r0     r  z&np_complex_eq_impl.<locals>.<listcomp>rb   )r(   r   r4  r   r   r   r   rk   )r/   r.   r$   r   r   r   r  r  r  r  r  xi_eq_yir   r-   r   r6       
r6  c                    r  )Nr_   r  r   c                    r  r  r  r   r-   r   r   r0     r  z&np_complex_ne_impl.<locals>.<listcomp>rf   )r(   r   r4  r   r   r   fcmp_unorderedrl   )r/   r.   r$   r   r   r   r  r  r  r  xr_ne_yrxi_ne_yir   r-   r   np_complex_ne_impl  r  r  c                 C   s8   | j |||d}t||j}t||j}|||S )Nr   )rL   r	   is_truer   r   rl   )r/   r.   r   valcomplex_valre_trueim_truer   r   r   _complex_is_true)  s   r   c                 C   >   t ||dtjd t||d }t||d }|||S Nr_   r  r   ra   )r(   r   r4  r	   r  rk   r/   r.   r$   r   r&  r'  r   r   r   np_logical_and_impl0     r  c                 C   N   t ||dtjd t| ||jd |d }t| ||jd |d }|||S r  )r(   r   r4  r   r   rk   r  r   r   r   np_complex_logical_and_impl7     r  c                 C   r  r  )r(   r   r4  r	   r  rl   r  r   r   r   np_logical_or_impl>  r  r	  c                 C   r  r  )r(   r   r4  r   r   rl   r  r   r   r   np_complex_logical_or_implE  r  r
  c                 C   r  r  )r(   r   r4  r	   r  rr   r  r   r   r   np_logical_xor_implL  r  r  c                 C   r  r  )r(   r   r4  r   r   rr   r  r   r   r   np_complex_logical_xor_implS  r  r  c                 C   "   t ||dtjd t||d S Nra   r  r   )r(   r   r4  r	   is_falser   r   r   r   np_logical_not_implZ     r  c                 C   s4   t ||dtjd t| ||jd |d }||S r  )r(   r   r4  r   r   not_)r/   r.   r$   r   r&  r   r   r   np_complex_logical_not_impl_  s   
r  c                 C   0   t ||d |\}}|d||}||||S Nr_   r   r(   rq   rs   )r/   r.   r$   r   arg1arg2arg1_sge_arg2r   r   r   np_int_smax_impln     r  c                 C   r  r  r(   rj   rs   )r/   r.   r$   r   r  r  arg1_uge_arg2r   r   r   np_int_umax_implu  r  r  c                 C   h   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S Nr_   unor   r(   r  rs   r   )r/   r.   r$   r   r  r  arg1_nanany_nan
nan_resultr=  non_nan_resultr   r   r   np_real_maximum_impl|     r'  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S r   r"  )r/   r.   r$   r   r  r  arg2_nanr$  r%  r=  r&  r   r   r   np_real_fmax_impl  r(  r*  c                 C      t ||d |jd }ttj|}tjtjg|gd R  }|\}}t| |||g}	t| |||g}
||	|
}||	||}t	| |||}||||}||||S Nr_   r   
r(   r   r   r  r   r4  np_complex_isnan_implrl   rs   r5  r/   r.   r$   r   r   bc_sigbcc_sigr  r  r#  r)  r$  r%  r=  r&  r   r   r   np_complex_maximum_impl     
r2  c                 C      t ||d |jd }ttj|}tjtjg|gd R  }|\}}t| |||g}	t| |||g}
||	|
}||
||}t	| |||}||||}||||S r,  r-  r/  r   r   r   np_complex_fmax_impl     
r5  c                 C   r  Nr_   r  r  )r/   r.   r$   r   r  r  arg1_sle_arg2r   r   r   np_int_smin_impl  r  r9  c                 C   r  r7  r  )r/   r.   r$   r   r  r  arg1_ule_arg2r   r   r   np_int_umin_impl  r  r;  c                 C   r  Nr_   r!  r  r"  r/   r.   r$   r   r  r  r#  r$  r%  arg1_le_arg2r&  r   r   r   np_real_minimum_impl  r(  r?  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S r<  r"  r=  r   r   r   np_real_fmin_impl  r(  r@  c                 C   r+  r,  
r(   r   r   r  r   r4  r.  rl   rs   r  r/   r.   r$   r   r   r0  r1  r  r  r#  r)  r$  r%  r>  r&  r   r   r   np_complex_minimum_impl  r3  rC  c                 C   r4  r,  rA  rB  r   r   r   np_complex_fmin_impl  r6  rD  c                 C      t ||dtjd tjS Nra   r  r(   r   r4  r	   	false_bitr   r   r   r   np_int_isnan_impl     rI  c                 C   r  r  )r(   r   r4  r   is_nanr   r   r   r   np_real_isnan_impl$  r  rL  c                 C   <   t ||dtjd |\}|j\}| j|||d}t||S Nra   r  r   )r(   r   r4  r   rL   r   rK  r/   r.   r$   r   r   r   r  r   r   r   r.  )  s
   r.  c                 C   rE  rF  )r(   r   r4  r	   true_bitr   r   r   r   np_int_isfinite_impl2  rJ  rQ  c                 C   &   t ||dtjd |d|d tjS )Nra   r  rf   r   )r(   r   r4  rj   r   NATr   r   r   r   np_datetime_isfinite_impl7     rT  c                 C   rR  )Nra   r  rb   r   )r(   r   r4  rq   r   rS  r   r   r   r   np_datetime_isnat_impl<  rU  rV  c                 C   r  r  )r(   r   r4  r   	is_finiter   r   r   r   np_real_isfinite_implA  r  rX  c                 C   rM  rN  )r(   r   r4  r   rL   r   rW  rO  r   r   r   np_complex_isfinite_implF  
   rY  c                 C   rE  rF  rG  r   r   r   r   np_int_isinf_implN  rJ  r[  c                 C   r  r  )r(   r   r4  r   is_infr   r   r   r   np_real_isinf_implS  r  r]  c                 C   rM  rN  )r(   r   r4  r   rL   r   r\  rO  r   r   r   np_complex_isinf_implX  rZ  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 )	Nra   r  i   l        l            r   uintrf   )r(   r   r4  float16rg   uint16float32uint32r9   uint64r   getattrbitwidthrC   rk   bitcastrj   rh   )
r/   r.   r$   r   masksarg_ty
arg_int_tyarg_ll_int_tyint_resbool_resr   r   r   np_real_signbit_impl`  s   

rn  c                 C   r  r   )r(   r   copysign_float_implr   r   r   r   np_real_copysign_implr  r  rp  c                 C   s.   t ||d tjdtjdi}t| ||||dS )Nr_   numba_nextafterfnumba_nextafter	nextafter)r(   r   rb  r9   r^   )r/   r.   r$   r   dispatch_tabler   r   r   np_real_nextafter_implw  s   
ru  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 )Nra   rq  rr  r   zllvm.copysignr)   rs  )r(   r   rb  r9   r   r   r  r   rh   r  infr3   r4   r5   r	   r6   r1   r8   r^   r   )r/   r.   r$   r   rt  r   rH  rQ  ll_infr=   r>   ll_sinf
inner_argsrs  r   r   r   np_real_spacing_impl  s&   



rz  c           	      C   sH   |\}}|j \}}| |||tj}t||tj}t| ||||fS r   )r   r+   r   intcr   r  r   
ldexp_impl)	r/   r.   r$   r   r   r   ty1ty2f_fi_sigr   r   r   np_real_ldexp_impl  s
   
r  r   )__doc__r-  llvmlite.irr3   numpyr  numba.core.extendingr   numba.core.imputilsr   
numba.corer   r   r   r   r	   r
   r   numba.npr   numba.np.mathr   r   r   numba.np.numpy_supportr   r  rb  rU  r(   USE_LEGACY_TYPE_SYSTEMr9   cast_arg_ty
np_float64rA   r^   r   r   r   r   r   r   np_int_fmod_implr   r   r   r   r   r   r   r  expr   r  r  r	  exp2r
  r  r  r  r  r  r  r   r"  r,  rB  rF  rI  rL  rM  rR  rW  rY  rZ  r[  r^  ra  rd  rf  rl  rn  ru  rw  rx  r|  r~  r  r  r  r  r  rh  r  rg  r  r  r  r  r  rq  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r5  r  r  r7  r6  r  r   r  r  r	  r
  r  r  r  r  r  r  r'  r*  r2  r5  r9  r;  r?  r@  rC  rD  rI  rL  r.  rQ  rT  rV  rX  rY  r[  r]  r^  rn  rp  ru  rz  r  r   r   r   r   <module>   s$    
>%M


6		-
	
*)				
