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]dƒd„„ Z^d…d†„ Z_d‡dˆ„ Z`d‰dŠ„ Zad‹dŒ„ ZbddŽ„ Zcdd„ Zdd‘d’„ Zed“d”„ Zfd•d–„ Zgd—d˜„ Zhd™dš„ Zid›dœ„ Zjddž„ 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û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Úconfig)Úregister_jitable)Ú
npdatetime)Ú	cmathimplÚmathimplÚnumbers)Únumpy_versiongþ‚+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   úT/home/ubuntu/maya3_transcribe/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>>   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 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Ú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 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©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 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   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 s€w   Y  |. | 
|
|¡}| |
|¡}| ||¡}| 
||¡}| ||¡|	_| ||¡|	_W d   ƒ n1 s¸w   Y  W d   ƒ |	 ¡ S W d   ƒ |	 ¡ S 1 sÔw   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		-
	
*)				
