U
    hâË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	 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„ ZVd€d�„ ZWd‚dƒ„ ZXd„d…„ ZYd†d‡„ ZZdˆd‰„ Z[dŠd‹„ Z\dŒd�„ Z]dŽd�„ Z^d�d‘„ Z_d’d“„ Z`d”d•„ Zad–d—„ Zbd˜d™„ Zcdšd›„ Zddœd�„ ZedždŸ„ Zfd d¡„ Zgd¢d£„ Zhd¤d¥„ Zid¦d§„ Zjd¨d©„ Zkdªd«„ Zld¬d­„ Zmd®d¯„ Znd°d±„ Zod²d³„ Zpd´dµ„ Zqd¶d·„ Zrd¸d¹„ Zsdºd»„ Ztd¼d½„ Zud¾d¿„ ZvdÀdÁ„ ZwdÂdÃ„ ZxdÄdÅ„ ZydÆdÇ„ ZzdÈ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Ú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ì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þdÿ„ Z–�d �d„ Z—�d�d„ Z˜�d�d„ Z™dS (  zŽCodegen 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å&{ËÛ?gï9úþB.æ?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sˆddl}| ¡ jjj	}d 
|| ¡}dsˆt|ƒ‚dS )zëchecks 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   úJ/home/sam/Atlas/atlas_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		 
*)				