o
    Tæ«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^dd‘„ 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Õ„ ZdÖ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í„ Zdîdï„ ZŽdðdñ„ Zdòdó„ Zdô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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 )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   úd/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/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>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   ÚmodÚltyÚfntyÚfnÚ	cast_argsÚresultr   r+   r   Ú_call_func_by_name_with_cast0   s   

ÿr?   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   r.   Y   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   r.   a   s    ÿc                    s   g | ]}ˆ   |¡‘qS r   )r0   )r   ÚatyrC   r   r   r.   i   ó    r'   )r   ÚKeyErrorr!   Ústrr   ÚLoweringErrorr/   r   Úcomplex_domainÚmake_complexÚ_getpointerÚlistr1   r2   r3   ÚVoidTyper	   Úget_or_insert_functionr6   Úloadr0   r   r4   Úcall_external_function)r-   r,   r"   r   ÚtableÚ	user_namer   r8   Úer%   r9   ÚoutÚptrargsÚ	call_argsÚcall_argtysÚcall_argltysr;   r<   ÚretvalÚargtypesÚrestyper   )r,   r-   r   Ú_dispatch_func_by_name_type@   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 s±w   Y  W d   ƒ n1 sÀw   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Údivr9   Ú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   rd   rc   )r&   r   re   rh   rl   r	   Úif_unlikelyrn   ro   rp   ri   rq   rr   rs   rf   rt   )r-   r,   r"   r   ru   rv   r   rw   Úden_not_zeroÚbb_no_ifÚbb_ifr9   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   r_   )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   r`   Fra   )
r&   r   re   rh   rk   rl   Úudivrs   rf   rt   )r-   r,   r"   r   ru   rv   r   rw   Ú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   rd   )r&   r   re   rh   rl   r	   rŒ   Úuremrs   rf   rt   )r-   r,   r"   r   ru   rv   r   rw   r   rŽ   r   r9   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   ç        rd   ú<)	r&   r   re   ÚfremÚfcmp_orderedri   rp   rq   Úfadd)r-   r,   r"   r   Úin1Úin2r   rw   Ú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¥   )r1   r2   ÚConstantrf   Úfsubr§   rq   )r-   r,   r   rw   Ú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 sšw   Y  |F ˆ  |	|¡}ˆ  |	|¡}ˆ  ||¡}ˆ  ||¡}ˆ  ||¡}ˆ  ||¡}ˆ  ||¡}ˆ  ||¡}ˆ  ||¡|
_ ˆ  ||¡|
_W d   ƒ n1 sêw   Y  W d   ƒ n1 sùw   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©rJ   r   r   ©r,   r-   r"   r   r   r.   *  ó    ÿz'np_complex_div_impl.<locals>.<listcomp>c                    ó   g | ]}|j ˆ k‘qS r   ©rf   ©r   Úi©Úftyper   r   r.   2  rE   úmismatched typesr¤   ç      ð?ú>=r`   )ÚrealÚimagrf   r   Úmake_helperr   r1   r2   r±   rµ   r§   rk   ri   r¡   Úfmulr¨   r²   Ú	_getvalue)r-   r,   r"   r   r©   rª   Úin1rÚin1iÚin2rÚin2irT   rw   Ú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_logaddexpo  ó   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_logaddexpv  s
   z-_generate_logaddexp.<locals>.ol_npy_logaddexpr   )Ú
fnoverloadró   rï   rî   rô   r   rò   r   Ú_generate_logaddexpr  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)rf   r   r   r)   r   r7   r¡   )r-   r,   r"   r   ru   rv   Ú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 s¡w   Y  |5 ˆ  |
|¡}ˆ  ||¡}ˆ  |
|¡}ˆ  |	|¡}ˆ  ||¡}ˆ  ||¡}tˆˆ ||fƒ|_W d   ƒ n1 sàw   Y  W d   ƒ | ¡ S W d   ƒ | ¡ S 1 süw   Y  | ¡ S )Nr   c                    r¶   r·   rº   r   r»   r   r   r.   ä  r¼   z-np_complex_floor_div_impl.<locals>.<listcomp>c                    r½   r   r¾   r¿   rÁ   r   r   r.   ì  rE   rÃ   r¤   rÅ   )r   Úunderlying_floatr   r  rÆ   rÇ   rf   r   r1   r2   r±   rÈ   r   rµ   r§   rk   r¡   rÉ   r¨   r  rÊ   )r-   r,   r"   r   Ú
float_kindÚ	floor_sigr©   rª   rË   rÌ   rÍ   rÎ   rw   rT   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   Úlcm6  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_impl0  s   
r*  c                 C   sô   t ||dƒ |d }|jd }|j}|  |d¡}|  |d¡}|  |d¡}	|  |tdƒ¡}
|  ||¡}||_||_tj	t
jg|gd ¢R Ž }|| ¡ g}t| |||ƒ}t| |||ƒ}t| |||ƒ}| |||¡}| ||	|
¡}| |||¡|_| ¡ S )Nr_   r   r¤   rÄ   ç      ð¿Únanr]   )r&   r   r  re   ÚfloatrJ   rÆ   rÇ   r   r  r   ÚbooleanrÊ   Únp_complex_ge_implÚnp_complex_eq_implÚnp_complex_lt_implrq   )r-   r,   r"   r   Úopr   Úfloat_tyrw   rÏ   rx   ÚNANr>   Úcmp_sigÚcmp_argsÚarg1_ge_arg2Úarg1_eq_arg2Úarg1_lt_arg2Úreal_when_geÚreal_when_nger   r   r   Únp_complex_sign_implC  s(   
r<  c                 C   ó   t ||dƒ t |d|¡S )Nr_   z	llvm.rint©r&   r   Úcall_fp_intrinsicr¢   r   r   r   Únp_real_rint_implc  ó   r@  c           	      C   s|   t ||dƒ |jd }|j}| j|||d d}|  ||¡}tj|gd Ž }t| |||jgƒ|_t| |||jgƒ|_| 	¡ S )Nr_   r   r¸   r]   )
r&   r   r  rJ   r   r  r@  rÆ   rÇ   rÊ   )	r-   r,   r"   r   r   r3  r©   rT   Ú	inner_sigr   r   r   Únp_complex_rint_impli  s   
rC  c                 C   r  ©Nr_   )r&   r   Úexp_implr¢   r   r   r   Únp_real_exp_impl|  r!  rF  c                 C   r  rD  )r&   r   rE  r¢   r   r   r   Únp_complex_exp_impl  r!  rG  c                 C   ó.   t ||dƒ tjdtjdi}t| ||||dƒS )Nr_   Únumba_exp2fÚ
numba_exp2Úexp2©r&   r   Úfloat32r7   r\   ©r-   r,   r"   r   Údispatch_tabler   r   r   Únp_real_exp2_implˆ  ó   þ
ÿrP  c           	      C   s|   t ||dƒ |jd }|j}| j|||d d}|  ||¡}|  |t¡}| ||j¡|_| ||j¡|_t	| ||| 
¡ gƒS ©Nr_   r   r¸   )r&   r   r  rJ   re   Ú
_NPY_LOGE2rÉ   rÆ   rÇ   rG  rÊ   )	r-   r,   r"   r   r   r3  r©   rí   Úloge2r   r   r   Únp_complex_exp2_impl”  s   
rU  c                 C   r  rD  )r&   r   Úlog_implr¢   r   r   r   Únp_real_log_impl£  r!  rW  c                 C   r  rD  )r&   r   rV  r¢   r   r   r   Únp_complex_log_impl¨  r!  rX  c                 C   rH  )Nr_   Únumba_log2fÚ
numba_log2Úlog2rL  rN  r   r   r   Únp_real_log2_impl¯  rQ  r\  c                 C   ón   t ||dƒ |jd }|j}t| |||ƒ}| j|||d}|  |t¡}| ||j¡|_| ||j	¡|_	| 
¡ S rR  )r&   r   r  rX  rJ   re   r  rÉ   rÆ   rÇ   rÊ   )r-   r,   r"   r   r   r3  rí   Úlog2er   r   r   Únp_complex_log2_implº  ó   
r_  c                 C   r  rD  )r&   r   Ú
log10_implr¢   r   r   r   Únp_real_log10_implÊ  r!  rb  c                 C   r]  rR  )r&   r   r  rX  rJ   re   Ú_NPY_LOG10ErÉ   rÆ   rÇ   rÊ   )r-   r,   r"   r   r   r3  rí   Úlog10er   r   r   Únp_complex_log10_implÏ  r`  re  c                 C   r  rD  )r&   r   Ú
expm1_implr¢   r   r   r   Únp_real_expm1_implß  r!  rg  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 )Nr_   r   r]   r+  r¸   )r&   r   r  r   r  re   rJ   rF  rÆ   Únp_real_cos_implrÇ   Únp_real_sin_implrÉ   r¨   rÊ   )r-   r,   r"   r   r   r3  Úfloat_unary_sigrx   r©   r$  rT   Úcos_imagÚsin_imagrí   r   r   r   Únp_complex_expm1_implã  s   
rm  c                 C   r  rD  )r&   r   Ú
log1p_implr¢   r   r   r   Únp_real_log1p_implû  r!  ro  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 )Nr_   r   r]   é   rÄ   r¸   )r&   r   r  r   r  re   rJ   r¨   rÆ   Únp_real_hypot_implrÇ   Únp_real_atan2_implrW  rÊ   )r-   r,   r"   r   r   r3  rj  Úfloat_binary_sigrÏ   r©   rT   Úreal_plus_oneÚlr   r   r   Únp_complex_log1p_implÿ  s"   
ÿÿrv  c                 C   r  rD  )r&   r   Ú	sqrt_implr¢   r   r   r   Únp_real_sqrt_impl  r!  rx  c                 C   r  rD  )r&   r   rw  r¢   r   r   r   Únp_complex_sqrt_impl  r!  ry  c                 C   ó    t ||dƒ | |d |d ¡S ©Nr_   r   )r&   Úmulr¢   r   r   r   Únp_int_square_impl%  ó   r}  c                 C   rz  r{  )r&   rÉ   r¢   r   r   r   Únp_real_square_impl*  r~  r  c                 C   s:   t ||dƒ tj|jgd Ž }t | |||d |d g¡S ©Nr_   rp  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 )Nr_   T)Úfastmathc                 S   s$   | dk rt  |  d¡ S t  | 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   re   r¡   )	r-   r,   r"   r   r   r‚  Úin_as_floatrÏ   Úresult_as_floatr   r   r   Únp_int_reciprocal_implO  s   r  c                 C   s*   t ||dƒ |  |jd¡}| ||d ¡S )Nr_   rÄ   r   )r&   re   r   r¡   )r-   r,   r"   r   rÏ   r   r   r   Únp_real_reciprocal_impl]  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 s€w   Y  |. | 
|
|¡}| |
|¡}| ||¡}| 
||¡}| ||¡|	_| ||¡|	_W d   ƒ n1 s¸w   Y  W d   ƒ |	 ¡ S W d   ƒ |	 ¡ S 1 sÔw   Y  |	 ¡ S )Nr_   r   r¤   rÄ   r¸   ú<=)r&   r   r  re   rJ   rÆ   rÇ   rµ   r§   rk   r¡   rÉ   r¨   r²   rÊ   )r-   r,   r"   r   r   r3  rw   rÏ   r©   rT   rË   rÌ   Úin1r_absÚin1i_absÚin1i_abs_le_in1r_absr   r€   ÚrÚtmp0ÚdÚinv_dÚminus_rr   r   r   Únp_complex_reciprocal_implc  sJ   
ùú
÷ø
÷ïr˜  c                 C   r  rD  )r&   r   Úsin_implr¢   r   r   r   ri    r!  ri  c                 C   r  rD  )r&   r   r™  r¢   r   r   r   Únp_complex_sin_impl’  r!  rš  c                 C   r  rD  )r&   r   Úcos_implr¢   r   r   r   rh  š  r!  rh  c                 C   r  rD  )r&   r   r›  r¢   r   r   r   Únp_complex_cos_implŸ  r!  rœ  c                 C   r  rD  )r&   r   Útan_implr¢   r   r   r   Únp_real_tan_impl§  r!  rž  c                 C   r  rD  )r&   r   Ú	asin_implr¢   r   r   r   Únp_real_asin_impl¯  r!  r   c                 C   r  rD  )r&   r   Ú	acos_implr¢   r   r   r   Únp_real_acos_impl·  r!  r¢  c                 C   r  rD  )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   rr  Ç  r!  rr  c                 C   r  r    )r&   r   Úhypot_float_implr¢   r   r   r   rq  Ï  r!  rq  c                 C   r  rD  )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 ©Nr_   r   r]   )r&   r   r  r   r  rJ   rÆ   rÇ   ri  r¨  rh  Únp_real_cosh_implrÉ   rÊ   )r-   r,   r"   r   r   ÚftyÚfsig1rë   rT   ÚxrÚxiÚsxiÚshxrÚcxiÚchxrr   r   r   Únp_complex_sinh_implÜ  s   
r³  c                 C   r  rD  )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  rJ   rÆ   rÇ   rh  rª  ri  r¨  rÉ   rÊ   )r-   r,   r"   r   r   r«  r¬  rë   rT   r­  r®  r±  r²  r¯  r°  r   r   r   Únp_complex_cosh_implý  s   
rµ  c                 C   r  rD  )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 )Nr_   r   r]   rÄ   )r&   r   r  r   r  re   rJ   rÆ   rÇ   ri  rh  r¨  rª  rÉ   r¨   r¡   r²   rÊ   )r-   r,   r"   r   r   r«  r¬  rÏ   rë   rT   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  rD  )r&   r   Ú
asinh_implr¢   r   r   r   Únp_real_asinh_implF  r!  rÊ  c                 C   r  rD  )r&   r   Ú
acosh_implr¢   r   r   r   Únp_real_acosh_implN  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 )Nr_   r   rp  y      ð?        )r&   r   r   r  Úget_constant_genericr   Úcomplex_add_implÚcomplex_sub_implry  r  rX  )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_implS  s,   
ÿÿ
ÿÿÿr×  c                 C   r  rD  )r&   r   Ú
atanh_implr¢   r   r   r   Únp_real_atanh_implq  r!  rÙ  c                 C   r=  )Nr_   z
llvm.floorr>  r¢   r   r   r   r  y  rA  r  c                 C   r=  )Nr_   z	llvm.ceilr>  r¢   r   r   r   Únp_real_ceil_impl‚  rA  rÚ  c                 C   r=  )Nr_   z
llvm.truncr>  r¢   r   r   r   Únp_real_trunc_impl‹  rA  rÛ  c                 C   r=  )Nr_   z	llvm.fabsr>  r¢   r   r   r   Únp_real_fabs_impl”  rA  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¸   ©rJ   r   r+   r   r   r.   ¥  ó    z&np_complex_ge_impl.<locals>.<listcomp>rc   Úordr`   rÅ   ©	r&   r   r.  r   rÆ   rÇ   r§   ri   rj   )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   r/  Ÿ  ó   
r/  c                    rÝ  )
Nr]   rÞ  r   c                    rß  rà  rá  r   r+   r   r   r.   º  râ  z&np_complex_le_impl.<locals>.<listcomp>r¥   rã  r`   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   r.   Ï  râ  z&np_complex_gt_impl.<locals>.<listcomp>rc   rã  r`   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   r.   ä  râ  z&np_complex_lt_impl.<locals>.<listcomp>r¥   rã  r`   rä  )r-   r,   r"   r   r©   rª   r­  r®  rå  ræ  rî  rè  ré  Úxi_lt_yirë  rì  r   r+   r   r1  Þ  rí  r1  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   r.   ù  râ  z&np_complex_eq_impl.<locals>.<listcomp>r`   )r&   r   r.  r   rÆ   rÇ   r§   ri   )r-   r,   r"   r   r©   rª   r­  r®  rå  ræ  ré  Úxi_eq_yir   r+   r   r0  ó  ó   
r0  c                    rõ  )Nr]   rÞ  r   c                    rß  rà  rá  r   r+   r   r   r.   
  râ  z&np_complex_ne_impl.<locals>.<listcomp>rd   )r&   r   r.  r   rÆ   rÇ   Úfcmp_unorderedrj   )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¸   )rJ   r	   Úis_truerÆ   rÇ   rj   )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   r_   )r&   r   r.  r	   rü  ri   ©r-   r,   r"   r   r$  r%  r   r   r   Únp_logical_and_impl"  ó   r  c                 C   óN   t ||dtjd t| ||jd |d ƒ}t| ||jd |d ƒ}| ||¡S r  )r&   r   r.  r  r   ri   r  r   r   r   Únp_complex_logical_and_impl)  ó   r  c                 C   r  r  )r&   r   r.  r	   rü  rj   r  r   r   r   Únp_logical_or_impl0  r  r
  c                 C   r  r  )r&   r   r.  r  r   rj   r  r   r   r   Únp_complex_logical_or_impl7  r	  r  c                 C   r  r  )r&   r   r.  r	   rü  rp   r  r   r   r   Únp_logical_xor_impl>  r  r  c                 C   r  r  )r&   r   r.  r  r   rp   r  r   r   r   Únp_complex_logical_xor_implE  r	  r  c                 C   ó"   t ||dtjd t ||d ¡S ©Nr_   rÞ  r   )r&   r   r.  r	   Úis_falser¢   r   r   r   Únp_logical_not_implL  ó   r  c                 C   s4   t ||dtjd t| ||jd |d ƒ}| |¡S r  )r&   r   r.  r  r   Únot_)r-   r,   r"   r   r$  r   r   r   Únp_complex_logical_not_implQ  s   
r  c                 C   ó0   t ||dƒ |\}}| d||¡}| |||¡S ©Nr]   rÅ   ©r&   ro   rq   )r-   r,   r"   r   Úarg1Úarg2Úarg1_sge_arg2r   r   r   Únp_int_smax_impl`  ó   r  c                 C   r  r  ©r&   rh   rq   )r-   r,   r"   r   r  r  Úarg1_uge_arg2r   r   r   Únp_int_umax_implg  r  r  c                 C   óh   t ||dƒ |\}}| d||¡}| d||¡}| |||¡}| d||¡}	| |	||¡}
| |||
¡S ©Nr]   ÚunorÅ   ©r&   rø  rq   r§   )r-   r,   r"   r   r  r  Úarg1_nanÚany_nanÚ
nan_resultr7  Únon_nan_resultr   r   r   Únp_real_maximum_impln  ó   r(  c                 C   sh   t ||dƒ |\}}| d||¡}| d||¡}| |||¡}| d||¡}	| |	||¡}
| |||
¡S r!  r#  )r-   r,   r"   r   r  r  Úarg2_nanr%  r&  r7  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   r.  Únp_complex_isnan_implrj   rq   r/  ©r-   r,   r"   r   r   Úbc_sigÚbcc_sigr  r  r$  r*  r%  r&  r7  r'  r   r   r   Únp_complex_maximum_implŒ  ó   
r3  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.  r0  r   r   r   Únp_complex_fmax_impl¢  ó   
r6  c                 C   r  ©Nr]   r  r  )r-   r,   r"   r   r  r  Úarg1_sle_arg2r   r   r   Únp_int_smin_impl·  r  r:  c                 C   r  r8  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)  rA  c                 C   r,  r-  ©
r&   r   r   r  r   r.  r/  rj   rq   rð  ©r-   r,   r"   r   r   r1  r2  r  r  r$  r*  r%  r&  r?  r'  r   r   r   Únp_complex_minimum_implã  r4  rD  c                 C   r5  r-  rB  rC  r   r   r   Únp_complex_fmin_implù  r7  rE  c                 C   ó   t ||dtjd tjS ©Nr_   rÞ  ©r&   r   r.  r	   Ú	false_bitr¢   r   r   r   Únp_int_isnan_impl  ó   rJ  c                 C   r  r  )r&   r   r.  r   Úis_nanr¢   r   r   r   Únp_real_isnan_impl  r  rM  c                 C   ó<   t ||dtjd |\}|j\}| j|||d}t ||¡S ©Nr_   rÞ  r¸   )r&   r   r.  r   rJ   r   rL  ©r-   r,   r"   r   rë   r   rþ  r   r   r   r/    s
   r/  c                 C   rF  rG  )r&   r   r.  r	   Útrue_bitr¢   r   r   r   Únp_int_isfinite_impl$  rK  rR  c                 C   ó&   t ||dtjd | d|d tj¡S )Nr_   rÞ  rd   r   )r&   r   r.  rh   r   ÚNATr¢   r   r   r   Únp_datetime_isfinite_impl)  ó   rU  c                 C   rS  )Nr_   rÞ  r`   r   )r&   r   r.  ro   r   rT  r¢   r   r   r   Únp_datetime_isnat_impl.  rV  rW  c                 C   r  r  )r&   r   r.  r   Ú	is_finiter¢   r   r   r   Únp_real_isfinite_impl3  r  rY  c                 C   rN  rO  )r&   r   r.  r   rJ   r   rX  rP  r   r   r   Únp_complex_isfinite_impl8  ó
   rZ  c                 C   rF  rG  rH  r¢   r   r   r   Únp_int_isinf_impl@  rK  r\  c                 C   r  r  )r&   r   r.  r   Úis_infr¢   r   r   r   Únp_real_isinf_implE  r  r^  c                 C   rN  rO  )r&   r   r.  r   rJ   r   r]  rP  r   r   r   Únp_complex_isinf_implJ  r[  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 )	Nr_   rÞ  i €  l        l            r   Úuintrd   )r&   r   r.  Úfloat16re   Úuint16rM  Úuint32r7   Úuint64r   ÚgetattrÚbitwidthrA   ri   Úbitcastrh   rf   )
r-   r,   r"   r   ÚmasksÚarg_tyÚ
arg_int_tyÚarg_ll_int_tyÚint_resÚbool_resr   r   r   Únp_real_signbit_implR  s   ý

ÿrn  c                 C   r  r    )r&   r   Úcopysign_float_implr¢   r   r   r   Únp_real_copysign_impld  r  rp  c                 C   rH  )Nr]   Únumba_nextafterfÚnumba_nextafterÚ	nextafterrL  rN  r   r   r   Únp_real_nextafter_impli  rQ  rt  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 )Nr_   rq  rr  r   zllvm.copysignr'   rs  )r&   r   rM  r7   r   r   r  r   rf   r  Úinfr1   r2   r3   r	   r4   r/   r6   r\   r²   )r-   r,   r"   r   rO  r   rB  Úll_tyÚll_infr;   r<   Úll_sinfÚ
inner_argsrs  r   r   r   Únp_real_spacing_implt  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__ÚmathÚllvmlite.irr1   Únumpyr  Únumba.core.extendingr   Únumba.core.imputilsr   Ú
numba.corer   r   r   r   r	   r
   Únumba.npr   Únumba.cpythonr   r   r   r  rc  rS  r&   r7   r?   r\   r‹   r‘   r—   r›   r   rž   Únp_int_fmod_implr£   r¯   r°   rµ   rá   ræ   rö   r  Úexprý   rÿ   r  r  rK  r  r  r  r  r  r  r  r  r   r*  r<  r@  rC  rF  rG  rP  rU  rW  rX  r\  r_  rb  re  rg  rm  ro  rv  rx  ry  r}  r  rƒ  rŠ  r  rŽ  r˜  ri  rš  rh  rœ  rž  r   r¢  r¤  rr  rq  r¨  r³  rª  rµ  r·  rÈ  rÊ  rÌ  r×  rÙ  r  rÚ  rÛ  rÜ  r/  rð  ró  r1  r0  rû  r  r  r  r
  r  r  r  r  r  r  r  r(  r+  r3  r6  r:  r<  r@  rA  rD  rE  rJ  rM  r/  rR  rU  rW  rY  rZ  r\  r^  r_  rn  rp  rt  rz  r€  r   r   r   r   Ú<module>   s   
ÿ>%M


6		 
*)				