U
    iâËd&Å  ã                   @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dl	Z	d dl
mZmZ d dlmZmZmZmZ d dlmZmZmZ d dlmZmZmZmZ d dlmZmZ eƒ Zde_eƒ Z de _!eƒ Z"eƒ Z#de#_$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 „ Z0d!d"„ Z1d#d$„ Z2d%d&„ Z3d'd(„ Z4d)d*„ Z5d+d,„ Z6d-d.„ Z7d/d0„ Z8d1d2„ Z9d3d4„ Z:d5d6„ Z;d7d8„ Z<d9d:„ Z=d;d<„ Z>d=d>„ Z?d?d@„ Z@dAdB„ ZAdCdD„ ZBdEdF„ ZCdGdH„ ZDdIdJ„ ZEdKdL„ ZFdMdN„ ZGdOdP„ ZHdQdR„ ZIdSdT„ ZJdUdV„ ZKdWdX„ ZLdYdZ„ ZMd[d\„ ZNd]d^„ ZOd_dJ„ ZEd�d`da„ZPdbdc„ ZQddde„ ZRdfdg„ ZSdhdi„ ZTdjdk„ ZUdldm„ ZVdndo„ ZWdpdq„ ZXdrds„ ZYG dtdu„ dueƒZZG dvdw„ dweƒZ[G dxdy„ dyeƒZ\G dzd{„ d{eeƒZ]G d|d}„ d}eeƒZ^G d~d„ deeƒZ_e`d€k�rüe a¡  dS )‚é    N©Ú
namedtuple)Úcompile_isolatedÚFlags)ÚjitÚtypeofÚnjitÚtyped)ÚerrorsÚtypesÚconfig)ÚTestCaseÚtagÚignore_internal_warningsÚMemoryLeakMixin)Úoverload_methodÚboxTc                 C   s   t | ƒS ©N)Úabs©Úx© r   úR/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_builtins.pyÚabs_usecase    s    r   c                 C   sL   | d kr|d krt g ƒS | d kr*t |gƒS |d kr<t | gƒS t | |gƒS d S r   )Úall©r   Úyr   r   r   Úall_usecase#   s    

r   c                 C   sL   | d kr|d krt g ƒS | d kr*t |gƒS |d kr<t | gƒS t | |gƒS d S r   )Úanyr   r   r   r   Úany_usecase-   s    

r   c                 C   s   t | ƒS r   )Úboolr   r   r   r   Úbool_usecase7   s    r!   c                 C   s
   t | |ƒS r   ©Úcomplexr   r   r   r   Úcomplex_usecase:   s    r$   c                 C   s
   t | |ƒS r   )Údivmodr   r   r   r   Údivmod_usecase=   s    r&   c                  C   s&   d} t dƒD ]\}}| || 7 } q| S )Nr   ©ç      ð?ç      @ç      @©Ú	enumerate©ÚresultÚiÚjr   r   r   Úenumerate_usecase@   s    r1   c                  C   s(   d} t ddƒD ]\}}| || 7 } q| S )Nr   r'   é*   r+   r-   r   r   r   Úenumerate_start_usecaseF   s    r3   c                  C   s(   d} t ddƒD ]\}}| || 7 } q| S )Nr   r'   gn†ðù!	@r+   r-   r   r   r   Úenumerate_invalid_start_usecaseL   s    r4   c                 C   s
   t || ƒS r   )Úfilter)r   Úfilter_funcr   r   r   Úfilter_usecaseR   s    r7   c                 C   s   t | ƒS r   )Úfloatr   r   r   r   Úfloat_usecaseU   s    r9   c                 C   s
   |   |¡S r   )Úformatr   r   r   r   Úformat_usecaseX   s    r;   c                   C   s   t ƒ S r   )Úglobalsr   r   r   r   Úglobals_usecase[   s    r=   c                 C   s   t | ƒS r   )Úhexr   r   r   r   Úhex_usecase`   s    r?   c                 C   s   t | ƒS r   ©Ústrr   r   r   r   Ústr_usecasec   s    rB   c                 C   s   t | |d�S ©N)Úbase)Úint©r   rD   r   r   r   Úint_usecasef   s    rG   c                 C   s   t | ƒ}t|ƒt|ƒfS r   )ÚiterÚnext)r   Úitr   r   r   Úiter_next_usecasei   s    rK   c                 C   s   d}t ƒ d S )Né   r   )Úlocalsr   r   r   r   Úlocals_usecasem   s    rN   c                 C   s   t | |d�S rC   )ÚlongrF   r   r   r   Úlong_usecaseq   s    rP   c                 C   s
   t || ƒS r   )Úmap)r   Úmap_funcr   r   r   Úmap_usecaset   s    rS   c                 C   s
   t | |ƒS r   ©Úmaxr   r   r   r   Úmax_usecase1x   s    rV   c                 C   s   t | |gƒS r   rT   r   r   r   r   Úmax_usecase2{   s    rW   c                 C   s   t | ƒS r   rT   r   r   r   r   Úmax_usecase3~   s    rX   c                   C   s   t dƒS ©Nr   rT   r   r   r   r   Úmax_usecase4�   s    rZ   c                 C   s
   t | |ƒS r   ©Úminr   r   r   r   Úmin_usecase1…   s    r]   c                 C   s   t | |gƒS r   r[   r   r   r   r   Úmin_usecase2ˆ   s    r^   c                 C   s   t | ƒS r   r[   r   r   r   r   Úmin_usecase3‹   s    r_   c                   C   s   t dƒS rY   r[   r   r   r   r   Úmin_usecase4Ž   s    r`   c                 C   s   t | ƒS r   )Úoctr   r   r   r   Úoct_usecase‘   s    rb   c                 C   s   t  | |¡S r   )Ú	functoolsÚreduce)Úreduce_funcr   r   r   r   Úreduce_usecase”   s    rf   c                 C   s   t | ƒS r   ©Úroundr   r   r   r   Úround_usecase1—   s    ri   c                 C   s
   t | |ƒS r   rg   )r   Únr   r   r   Úround_usecase2š   s    rk   c                 C   s   t | ƒS r   ©Úsumr   r   r   r   Úsum_usecase�   s    rn   c                 C   s   t | ƒ|ƒS r   )Útype©ÚaÚbr   r   r   Útype_unary_usecase    s    rs   c                 C   s
   t  | ¡S r   )ÚoperatorÚtruth)Úpr   r   r   Útruth_usecase£   s    rw   c                 C   s   t | ƒS r   )Úunichrr   r   r   r   Úunichr_usecase¦   s    ry   c                  C   s(   d} t ddƒD ]\}}| || 7 } q| S )Nr   ©é   é   é   )g      @çÍÌÌÌÌÌ@©Úzipr-   r   r   r   Úzip_usecase©   s    r�   c                  C   s   d} t ƒ D ]}| d7 } q
| S ©Nr   r{   r   ©r.   r/   r   r   r   Úzip_0_usecase¯   s    

r„   c                  C   s    d} t dƒD ]\}| |7 } q| S )Nr   ©r{   r|   r   rƒ   r   r   r   Úzip_1_usecaseµ   s    
r†   c                  C   s0   d} t dddƒD ]\}}}| || | 7 } q| S )Nr   r…   )r}   é   rL   )r~   gÍÌÌÌÌÌ!@r   )r.   r/   r0   Úkr   r   r   Úzip_3_usecase¼   s    r‰   c                  C   s6   t dƒ} d}t| ƒ}ttt |ƒ|ƒƒ}t|ƒ}||fS )Né   r}   )ÚrangerH   Úlistr€   )Úiterablerj   rJ   ZfrontÚbackr   r   r   Úzip_first_exhaustedÃ   s    r�   c                 C   s   | | S r   r   r   r   r   r   Úpow_op_usecaseÎ   s    r�   c                 C   s
   t | |ƒS r   )Úpowr   r   r   r   Úpow_usecaseÒ   s    r’   c                 C   s   t | ƒS r   rl   r   r   r   r   rn   Ö   s    c                 C   s   t | |ƒ}t | |d�|fS ©N©Ústartrl   )r   r•   Úretr   r   r   Úsum_kwarg_usecaseÚ   s    
r—   c                 C   s¨   t | ttfƒr<t | tƒr$| d dfS t | tƒr¤| d dfS nht | tƒrR| d dfS t | tƒrf| jdfS t | ttfƒrˆt | tƒr‚dS d	S nt | tƒr–d
S t | t	ƒr¤dS dS )Nr{   rE   ç       @r8   z, world!rA   r#   ÚtuplerŒ   ÚsetÚbytesúno match)
Ú
isinstancerE   r8   rA   r#   Úimagr™   rŒ   rš   r›   ©rq   r   r   r   Úisinstance_usecaseß   s$    







r    c                  C   s:   dddœ} dt  d¡dœ}t| tƒr2t|tƒr2dS dS d S )	Nr|   r‡   )r{   r}   é
   r}   rp   Údictznot dict)ÚnpZzerosr�   r¢   rp   r   r   r   Úisinstance_dictõ   s
    
r¤   c                 C   s„   t | tjƒrdS t | tjtjfƒr8t | tjƒr2dS dS nHt | tjtjfƒrlt | tjƒrZdS t | tjƒr€dS nt | tjƒr|dS dS d S )Nú
typed listÚint32Úint64Úfloat32Úfloat64ú
typed dictrœ   )	r�   r	   ÚListr   r¦   r§   r¨   r©   ÚDictrŸ   r   r   r   Úisinstance_usecase_numba_typesþ   s    r­   c                  C   sB   d} t ddƒ}tƒ }d|d< t| tƒr>t|t ƒr>t|tƒr>dS dS )Ns   hellor{   r|   r}   TF)r‹   r¢   r�   r›   ©rq   rr   Úcr   r   r   Ú isinstance_usecase_numba_types_2  s    

ÿþr°   c                 C   s   t | dƒrdS dS d S )N)Úfooztrue branchzfalse branch©r�   r   r   r   r   Úinvalid_isinstance_usecase  s    
r³   c                 C   s   t | tdfƒrdS dS d S )Nz
not a typeTF©r�   r8   r   r   r   r   Úisinstance_usecase_invalid_type%  s    rµ   c                 C   s(   | dkrd}nd}t |tƒr dS dS d S )Nr‡   r¡   rq   TF©r�   rE   ©r   Úzr   r   r   Ú*invalid_isinstance_usecase_phi_nopropagate-  s    
r¹   c                 C   s(   | dkrd}nd }t |tƒr dS dS d S )Nr‡   r¡   TFr¶   r·   r   r   r   Ú#invalid_isinstance_optional_usecase8  s    
rº   c                     s*   t dddgƒ‰ˆddƒ‰ ‡ ‡fdd„} | S )NÚntplrq   rr   r{   r|   c                    s
   t ˆ ˆƒS r   r²   r   ©Úinstr»   r   r   ÚimplE  s    z9invalid_isinstance_unsupported_type_usecase.<locals>.implr   )r¾   r   r¼   r   Ú+invalid_isinstance_unsupported_type_usecaseB  s    
r¿   c                   @   sä  e Zd Zdd„ Zefdd„Zdd„ Zefdd„Zd	d
„ Zefdd„Z	dd„ Z
efdd„Zdd„ Zefdd„Zdd„ Zefdd„Zdd„ Zefdd„Zdd„ Zefdd „Zd!d"„ Zefd#d$„Zd%d&„ Zefd'd(„Zd)d*„ Zd+d,„ Zd-d.„ Zefd/d0„Zd1d2„ Zefd3d4„Zd5d6„ Zefd7d8„Zd9d:„ Z efd;d<„Z!d=d>„ Z"d?d@„ Z#dAdB„ Z$efdCdD„Z%dEdF„ Z&e'fdGdH„Z(efdIdJ„Z)dKdL„ Z*efdMdN„Z+dOdP„ Z,efdQdR„Z-dSdT„ Z.dUdV„ Z/efdWdX„Z0dYdZ„ Z1d[d\„ Z2efd]d^„Z3efd_d`„Z4dadb„ Z5dcdd„ Z6dedf„ Z7efdgdh„Z8efdidj„Z9dkdl„ Z:dmdn„ Z;dodp„ Z<efdqdr„Z=efdsdt„Z>dudv„ Z?dwdx„ Z@efdydz„ZAd{d|„ ZBd}d~„ ZCdd€„ ZDd�d‚„ ZEdƒd„„ ZFefd…d†„ZGefd‡dˆ„ZHefd‰dŠ„ZId‹dŒ„ ZJd�dŽ„ ZKd�d�„ ZLd‘d’„ ZMd“d”„ ZNd•d–„ ZOd—d˜„ ZPefd™dš„ZQd›dœ„ ZRefd�dž„ZSdŸd „ ZTefd¡d¢„ZUd£d¤„ ZVefd¥d¦„ZWd§d¨„ ZXefd©dª„ZYd«d¬„ ZZd­d®„ Z[d¯d°„ Z\d±d²„ Z]e^fd³d´„Z_dµd¶„ Z`e^fd·d¸„Zad¹dº„ Zbe^fd»d¼„Zcd½d¾„ Zde^fd¿dÀ„ZedÁdÂ„ Zfe^fdÃdÄ„ZgdÅdÆ„ ZhdÇdÈ„ ZidÉdÊ„ ZjdËdÌ„ ZkdÍdÎ„ ZldÏS )ÐÚTestBuiltinsc                 C   s,   t |d|d�}|j}|ƒ }|  |ƒ |¡ d S ©Nr   ©Úflags)r   Úentry_pointÚassertPreciseEqual)ÚselfÚpyfuncrÃ   ÚcrÚcfuncÚexpectedr   r   r   Úrun_nullary_funcK  s    zTestBuiltins.run_nullary_funcc           	      C   sp  t }t|tjf|d�}|j}dD ]}|  ||ƒ||ƒ¡ q t|tjf|d�}|j}dD ]}| j||ƒ||ƒdd� qVdddtd	ƒd
tdƒ  tdƒd
td	ƒ  g}t|tjf|d�}|j}|D ]}| j||ƒ||ƒdd� q¾t|tj	f|d�}|j}|D ]}|  ||ƒ||ƒ¡ qøtj
D ]R}dddd|j d g}t||f|d�}|j}|D ]}|  ||ƒ||ƒ¡ �qL�qd S )NrÂ   ©éÿÿÿÿr   r{   ©gš™™™™™ñ¿ç        çš™™™™™ñ?Úsingle©Úprecyš™™™™™ñ¿      à?y                yš™™™™™ñ?      @Úinfù              ð?Únanr   r¡   r|   r{   )r   r   r   r¦   rÄ   rÅ   r¨   r8   Ú	complex64Ú
complex128Zunsigned_domainZbitwidth)	rÆ   rÃ   rÇ   rÈ   rÉ   r   Zcomplex_valuesZunsigned_typeZunsigned_valuesr   r   r   Útest_absQ  s6    þ
zTestBuiltins.test_absc                 C   s   | j td� d S ©NrÂ   )rÙ   Úno_pyobj_flags©rÆ   r   r   r   Útest_abs_npmq  s    zTestBuiltins.test_abs_npmc           	      C   sj   t }t|tjtjf|d�}|j}dddd g}dddd g}t ||¡D ] \}}|  |||ƒ|||ƒ¡ qDd S ©NrÂ   rÍ   r   r{   )r   r   r   r¦   rÄ   Ú	itertoolsÚproductrÅ   ©	rÆ   rÃ   rÇ   rÈ   rÉ   Ú
x_operandsÚ
y_operandsr   r   r   r   r   Útest_allt  s    zTestBuiltins.test_allc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )ÚassertTypingErrorrä   rÛ   rÜ   r   r   r   Útest_all_npm~  s    
zTestBuiltins.test_all_npmc           	      C   sj   t }t|tjtjf|d�}|j}dddd g}dddd g}t ||¡D ] \}}|  |||ƒ|||ƒ¡ qDd S rÞ   )r   r   r   r¦   rÄ   rß   rà   rÅ   rá   r   r   r   Útest_any‚  s    zTestBuiltins.test_anyc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   rç   rÛ   rÜ   r   r   r   Útest_any_npmŒ  s    
zTestBuiltins.test_any_npmc                 C   sÔ   t }t|tjf|d�}|j}dD ]}|  ||ƒ||ƒ¡ q t|tjf|d�}|j}dddtdƒtdƒfD ]}|  ||ƒ||ƒ¡ qht|tjf|d�}|j}t	dtdƒƒt	dtdƒƒfD ]}|  ||ƒ||ƒ¡ q¶d S )	NrÂ   rÌ   rÏ   ç       €ç      ø?rÔ   rÖ   r   )
r!   r   r   r¦   rÄ   rÅ   r©   r8   rØ   r#   ©rÆ   rÃ   rÇ   rÈ   rÉ   r   r   r   r   Ú	test_bool�  s     zTestBuiltins.test_boolc                 C   s   | j td� d S rÚ   )rì   rÛ   rÜ   r   r   r   Útest_bool_npm   s    zTestBuiltins.test_bool_npmc                 C   s~   t }t|tjf|d�}|j}dD ]}|  ||ƒ||ƒ¡ q t|t d¡f|d�}|j}dgg fD ]}|  ||ƒ||ƒ¡ q`d S )NrÂ   )r   Ú rŒ   r{   )r!   r   r   ÚstringrÄ   rÅ   ÚDummyrë   r   r   r   Útest_bool_nonnumber£  s    z TestBuiltins.test_bool_nonnumberc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   rñ   rÛ   rÜ   r   r   r   Útest_bool_nonnumber_npm°  s    
z$TestBuiltins.test_bool_nonnumber_npmc           	      C   sf   t }t|tjtjf|d�}|j}dddg}dddg}t ||¡D ] \}}|  |||ƒ|||ƒ¡ q@d S rÞ   )r$   r   r   r¦   rÄ   rß   rà   rÅ   rá   r   r   r   Útest_complex´  s    

zTestBuiltins.test_complexc                 C   s   | j td� d S rÚ   )ró   rÛ   rÜ   r   r   r   Útest_complex_npm¿  s    zTestBuiltins.test_complex_npmc              
   C   sÔ   t }t|tjtjf|d�}|j}ddd„}ddddd	d
ddddg
}|dg }t ||¡D ]L\}}	|||	ƒ\}
}|||	ƒ\}}|}|  ||ƒ||ƒf||
ƒ||ƒf¡ qX|D ]$}|  t	¡� ||dƒ W 5 Q R X qªd S )NrÂ   é@   c                 S   s    | dkr| d|d > d M } | S r‚   r   )r   Úbitsr   r   r   Útruncate_resultÉ  s    z6TestBuiltins.test_divmod_ints.<locals>.truncate_resultr{   r}   rŠ   é   rÍ   éýÿÿÿiùÿÿÿéñÿÿÿl   ÿÿÿÿ lûÿÿÿ         r   )rõ   )
r&   r   r   r§   rÄ   rß   rà   rÅ   ÚassertRaisesÚZeroDivisionError)rÆ   rÃ   rÇ   rÈ   rÉ   r÷   ÚdenominatorsÚ
numeratorsr   r   Úexpected_quotÚexpected_remÚquotÚremÚfr   r   r   Útest_divmod_intsÂ  s$    ÿ

ÿzTestBuiltins.test_divmod_intsc                 C   s   | j td� d S rÚ   )r  rÛ   rÜ   r   r   r   Útest_divmod_ints_npmÝ  s    z!TestBuiltins.test_divmod_ints_npmc              
   C   s¾   t }t|tjtjf|d�}|j}ddddddtjtj tjg	}|dd	g }t 	||¡D ]8\}}|||ƒ\}	}
|||ƒ\}}|  
||f|	|
f¡ qV|D ]$}|  t¡� ||d	ƒ W 5 Q R X q”d S )
NrÂ   r(   g      @g}Ã”%­I²Tg       Àg      Àg\ôùnÜæÔ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   Útest_divmod_floatsà  s$    ÿ  ÿzTestBuiltins.test_divmod_floatsc                 C   s   | j td� d S rÚ   )r  rÛ   rÜ   r   r   r   Útest_divmod_floats_npmó  s    z#TestBuiltins.test_divmod_floats_npmc                 C   s   |   t|¡ d S r   )rË   r1   ©rÆ   rÃ   r   r   r   Útest_enumerateö  s    zTestBuiltins.test_enumeratec                 C   s   | j td� d S rÚ   )r	  rÛ   rÜ   r   r   r   Útest_enumerate_npmù  s    zTestBuiltins.test_enumerate_npmc                 C   s   |   t|¡ d S r   )rË   r3   r  r   r   r   Útest_enumerate_startü  s    z!TestBuiltins.test_enumerate_startc                 C   s   | j td� d S rÚ   )r  rÛ   rÜ   r   r   r   Útest_enumerate_start_npmÿ  s    z%TestBuiltins.test_enumerate_start_npmc              	   C   sJ   t }t|dtd�}|  t¡�}| ¡  W 5 Q R X d}|  |t|jƒ¡ d S )Nr   rÂ   z2'float' object cannot be interpreted as an integer)	r4   r   Úenable_pyobj_flagsrû   Ú	TypeErrorrÄ   ÚassertInrA   Ú	exception)rÆ   rÇ   rÈ   ÚraisesÚmsgr   r   r   Ú'test_enumerate_start_invalid_start_type  s    z4TestBuiltins.test_enumerate_start_invalid_start_typec              	   C   sD   t }|  tj¡�}t|dtd�}W 5 Q R X d}|  |t|jƒ¡ d S )Nr   rÂ   z3Only integers supported as start value in enumerate)	r4   rû   r
   ÚTypingErrorr   rÛ   r  rA   r  )rÆ   rÇ   r  rÈ   r  r   r   r   Ú+test_enumerate_start_invalid_start_type_npm  s
    z8TestBuiltins.test_enumerate_start_invalid_start_type_npmc                 C   sb   t }t|t d¡t d¡f|d�}|j}dd„ }dddd	d
g}|  t|||ƒƒt|||ƒƒ¡ d S )NrŒ   Úfunction_ptrrÂ   c                 S   s   | d S ©Nr|   r   r   r   r   r   Ú<lambda>  ó    z*TestBuiltins.test_filter.<locals>.<lambda>r   r{   r|   r}   r‡   )r7   r   r   rð   rÄ   ÚassertSequenceEqualrŒ   )rÆ   rÃ   rÇ   rÈ   rÉ   r6   r   r   r   r   Útest_filter  s    ÿþÿzTestBuiltins.test_filterc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   r  rÛ   rÜ   r   r   r   Útest_filter_npm  s    
zTestBuiltins.test_filter_npmc                 C   s®   t }t|tjf|d�}|j}dD ]}|  ||ƒ||ƒ¡ q t|tjf|d�}|j}dD ]}| j||ƒ||ƒdd� qVt|tjf|d�}|j}dD ]}|  ||ƒ||ƒ¡ q�d S )NrÂ   rÌ   rÎ   rÑ   rÒ   )z-1.1z0.0z1.1)r9   r   r   r¦   rÄ   rÅ   r¨   rï   rë   r   r   r   Ú
test_float"  s    zTestBuiltins.test_floatc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   r  rÛ   rÜ   r   r   r   Útest_float_npm4  s    
zTestBuiltins.test_float_npmc                 C   sÎ   t }t|tjtjf|d�}|j}d}dD ]}|  |||ƒ|||ƒ¡ q(t|tjtjf|d�}|j}d}dD ]}|  |||ƒ|||ƒ¡ qjt|tjtjf|d�}|j}d}dD ]}|  |||ƒ|||ƒ¡ q¬d S )NrÂ   z{0}rÌ   rÎ   r®   )r;   r   r   rï   r¦   rÄ   rÅ   r¨   )rÆ   rÃ   rÇ   rÈ   rÉ   r   r   r   r   r   Útest_format8  s0    ÿÿÿÿzTestBuiltins.test_formatc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   r  rÛ   rÜ   r   r   r   Útest_format_npmO  s    
zTestBuiltins.test_format_npmc                 C   s0   t }t|d|d�}|j}|ƒ }|  |tƒ ¡ d S rÁ   )r=   r   rÄ   ÚassertIsr<   )rÆ   rÃ   rÇ   rÈ   rÉ   Úgr   r   r   Útest_globalsS  s
    zTestBuiltins.test_globalsc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   r#  rÛ   rÜ   r   r   r   Útest_globals_npmZ  s    
zTestBuiltins.test_globals_npmc                 K   s6   t }tf |Ž|ƒ}|  |ƒ tƒ ¡ |  |ƒ tƒ ¡ d S r   )r=   r   r!  r<   )rÆ   Z	jit_flagsrÇ   Zjittedr   r   r   Útest_globals_jit^  s    zTestBuiltins.test_globals_jitc              	   C   s$   |   ¡ � | jdd� W 5 Q R X d S ©NT©Znopython)rå   r%  rÜ   r   r   r   Útest_globals_jit_npmf  s    
z!TestBuiltins.test_globals_jit_npmc                 C   s>   t }t|tjf|d�}|j}dD ]}|  ||ƒ||ƒ¡ q d S )NrÂ   rÌ   )r?   r   r   r¦   rÄ   rÅ   rë   r   r   r   Útest_hexj  s
    zTestBuiltins.test_hexc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   r)  rÛ   rÜ   r   r   r   Útest_hex_npmr  s    
zTestBuiltins.test_hex_npmc              	   C   s¾   t }dddddg}dddd	g}||•}tjtjtjtjtjtjtjtj	tj
g	}|D ]f}t||f|d
�}|j}	|D ]F}
|  |	||
ƒƒ|||
ƒƒ¡ |jrp|  |	||
 ƒƒ|||
 ƒƒ¡ qpqRd S )NiÒ  r{   r   r¡   iè  iÍ[iŽè! i@B rÍ   rÂ   )rB   r   Úint8Zint16r¦   r§   ZuintÚuint8Zuint16Úuint32Úuint64r   rÄ   rÅ   Úsigned)rÆ   rÃ   rÇ   Zsmall_inputsZlarge_inputsÚargsZtypsÚtyprÈ   rÉ   Úvr   r   r   Útest_int_strv  s<    û	ü÷zTestBuiltins.test_int_strc           	      C   sj   t }t|tjtjf|d�}|j}ddddg}dddd	g}t ||¡D ] \}}|  |||ƒ|||ƒ¡ qDd S )
NrÂ   z-1Ú0Ú1Ú10r|   é   r¡   é   )	rG   r   r   rï   r¦   rÄ   rß   rà   rÅ   rá   r   r   r   Útest_intŸ  s    zTestBuiltins.test_intc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   r9  rÛ   rÜ   r   r   r   Útest_int_npmª  s    
zTestBuiltins.test_int_npmc              	   C   sv   t }t|t tjd¡f|d�}|j}|  |dƒd¡ t|t tjd¡f|d�}|j}|  t¡� |dƒ W 5 Q R X d S )Nr}   rÂ   )r{   r2   rL   )r{   r2   r{   ©r{   )	rK   r   r   ÚUniTupler¦   rÄ   rÅ   rû   ÚStopIteration)rÆ   rÃ   rÇ   rÈ   rÉ   r   r   r   Útest_iter_next®  s    ÿÿzTestBuiltins.test_iter_nextc                 C   s   | j td� d S rÚ   )r>  rÛ   rÜ   r   r   r   Útest_iter_next_npm»  s    zTestBuiltins.test_iter_next_npmc              	   C   s2   t }|  tj¡� t|tjf|d�}W 5 Q R X d S rÚ   )rN   rû   r
   ZForbiddenConstructr   r   r§   )rÆ   rÃ   rÇ   rÈ   r   r   r   Útest_locals¾  s    zTestBuiltins.test_localsc                 C   s   | j td� d S rÚ   )r@  Úforceobj_flagsrÜ   r   r   r   Útest_locals_forceobjÃ  s    z!TestBuiltins.test_locals_forceobjc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   r@  rÛ   rÜ   r   r   r   Útest_locals_npmÆ  s    
zTestBuiltins.test_locals_npmc                 C   sb   t }t|t d¡t d¡f|d�}|j}dd„ }dddd	d
g}|  t|||ƒƒt|||ƒƒ¡ d S )NrŒ   r  rÂ   c                 S   s   | d S r  r   r   r   r   r   r  Ñ  r  z'TestBuiltins.test_map.<locals>.<lambda>r   r{   r|   r}   r‡   )rS   r   r   rð   rÄ   r  rŒ   )rÆ   rÃ   rÇ   rÈ   rÉ   rR   r   r   r   r   Útest_mapÊ  s    ÿþÿzTestBuiltins.test_mapc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   rD  rÛ   rÜ   r   r   r   Útest_map_npmÖ  s    
zTestBuiltins.test_map_npmc           	      C   sb   t |tjtjf|d�}|j}dddg}dddg}t ||¡D ] \}}|  |||ƒ|||ƒ¡ q<d S rÞ   ©r   r   r¦   rÄ   rß   rà   rÅ   ©	rÆ   rÇ   rÃ   rÈ   rÉ   râ   rã   r   r   r   r   r   Úcheck_minmax_1Þ  s    

zTestBuiltins.check_minmax_1c                 C   s   |   t|¡ dS )z
        max(*args)
        N)rH  rV   r  r   r   r   Ú
test_max_1ç  s    zTestBuiltins.test_max_1c                 C   s   |   t|¡ dS )z
        min(*args)
        N)rH  r]   r  r   r   r   Ú
test_min_1í  s    zTestBuiltins.test_min_1c                 C   s   | j td� d S rÚ   )rI  rÛ   rÜ   r   r   r   Útest_max_npm_1ó  s    zTestBuiltins.test_max_npm_1c                 C   s   | j td� d S rÚ   )rJ  rÛ   rÜ   r   r   r   Útest_min_npm_1ö  s    zTestBuiltins.test_min_npm_1c           	      C   sb   t |tjtjf|d�}|j}dddg}dddg}t ||¡D ] \}}|  |||ƒ|||ƒ¡ q<d S rÞ   rF  rG  r   r   r   Úcheck_minmax_2ù  s    

zTestBuiltins.check_minmax_2c                 C   s   |   t|¡ dS )z
        max(list)
        N)rM  rW   r  r   r   r   Ú
test_max_2  s    zTestBuiltins.test_max_2c                 C   s   |   t|¡ dS )z
        min(list)
        N)rM  r^   r  r   r   r   Ú
test_min_2  s    zTestBuiltins.test_min_2c              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   rN  rÛ   rÜ   r   r   r   Útest_max_npm_2  s    
zTestBuiltins.test_max_npm_2c              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   rO  rÛ   rÜ   r   r   r   Útest_min_npm_2  s    
zTestBuiltins.test_min_npm_2c                    s@   ‡ ‡‡fdd„}|t  t jd¡ƒ |t  t jt jt jf¡ƒ d S )Nc                    sT   t ˆ| fˆ d�}|j}dtdƒdf}||d d d… fD ]}ˆ ||ƒˆ|ƒ¡ q6d S )NrÂ   rê   rÖ   r)   rÍ   )r   rÄ   r8   rÅ   )ZargtyrÈ   rÉ   ÚtupÚval©rÃ   rÇ   rÆ   r   r   Úcheck  s
    z*TestBuiltins.check_minmax_3.<locals>.checkr}   )r   r<  r©   ÚTupler¨   )rÆ   rÇ   rÃ   rU  r   rT  r   Úcheck_minmax_3  s    zTestBuiltins.check_minmax_3c                 C   s   |   t|¡ dS )z
        max(tuple)
        N)rW  rX   r  r   r   r   Ú
test_max_3"  s    zTestBuiltins.test_max_3c                 C   s   |   t|¡ dS )z
        min(tuple)
        N)rW  r_   r  r   r   r   Ú
test_min_3(  s    zTestBuiltins.test_min_3c                 C   s   | j td� d S rÚ   )rX  rÛ   rÜ   r   r   r   Útest_max_npm_3.  s    zTestBuiltins.test_max_npm_3c                 C   s   | j td� d S rÚ   )rY  rÛ   rÜ   r   r   r   Útest_min_npm_31  s    zTestBuiltins.test_min_npm_3c                 C   s0   t |tjt d¡f|d�}|j}|ddgƒ d S )NrŒ   rÂ   r{   )r   r   r¦   rð   rÄ   ©rÆ   rÇ   rÃ   rÈ   rÉ   r   r   r   Úcheck_min_max_invalid_types4  s
    ÿz(TestBuiltins.check_min_max_invalid_typesc              	   C   s$   |   t¡� |  t¡ W 5 Q R X d S r   )rû   r  r]  rV   rÜ   r   r   r   Útest_max_1_invalid_types:  s    z%TestBuiltins.test_max_1_invalid_typesc              	   C   s&   |   ¡ � | jttd� W 5 Q R X d S rÚ   )rå   r]  rV   rÛ   rÜ   r   r   r   Útest_max_1_invalid_types_npm>  s    
z)TestBuiltins.test_max_1_invalid_types_npmc              	   C   s$   |   t¡� |  t¡ W 5 Q R X d S r   )rû   r  r]  r]   rÜ   r   r   r   Útest_min_1_invalid_typesB  s    z%TestBuiltins.test_min_1_invalid_typesc              	   C   s&   |   ¡ � | jttd� W 5 Q R X d S rÚ   )rå   r]  r]   rÛ   rÜ   r   r   r   Útest_min_1_invalid_types_npmF  s    
z)TestBuiltins.test_min_1_invalid_types_npmc                 C   sR   t |tjtjf|d�}|j}d}t ||¡D ] \}}|  |||ƒ|||ƒ¡ q,d S )NrÂ   )FT)r   r   Zbool_rÄ   rß   rà   rÅ   )rÆ   rÇ   rÃ   rÈ   rÉ   Zoperandsr   r   r   r   r   Úcheck_minmax_bool1J  s
    zTestBuiltins.check_minmax_bool1c                 C   s   |   t|¡ d S r   )rb  rV   r  r   r   r   Útest_max_bool1R  s    zTestBuiltins.test_max_bool1c                 C   s   |   t|¡ d S r   )rb  r]   r  r   r   r   Útest_min_bool1V  s    zTestBuiltins.test_min_bool1c                 C   s$   t |tjf|d�}|j}|dƒ d S )NrÂ   r{   )r   r   r¦   rÄ   r\  r   r   r   Ú check_min_max_unary_non_iterable\  s    z-TestBuiltins.check_min_max_unary_non_iterablec              	   C   s$   |   t¡� |  t¡ W 5 Q R X d S r   )rû   r  re  rX   rÜ   r   r   r   Útest_max_unary_non_iterablea  s    z(TestBuiltins.test_max_unary_non_iterablec              	   C   s"   |   ¡ � |  t¡ W 5 Q R X d S r   )rå   re  rX   rÜ   r   r   r   Útest_max_unary_non_iterable_npme  s    
z,TestBuiltins.test_max_unary_non_iterable_npmc              	   C   s$   |   t¡� |  t¡ W 5 Q R X d S r   )rû   r  re  r_   rÜ   r   r   r   Útest_min_unary_non_iterablei  s    z(TestBuiltins.test_min_unary_non_iterablec              	   C   s"   |   ¡ � |  t¡ W 5 Q R X d S r   )rå   re  r_   rÜ   r   r   r   Útest_min_unary_non_iterable_npmm  s    
z,TestBuiltins.test_min_unary_non_iterable_npmc              	   C   s<   |   ¡ �}t|dtd� W 5 Q R X |  d| t|jƒ¡ d S )Nr   rÂ   z%s() argument is an empty tuple)rå   r   rÛ   r  rA   r  )rÆ   rÇ   Ú	func_namer  r   r   r   Úcheck_min_max_empty_tuples  s
    

ÿz&TestBuiltins.check_min_max_empty_tuplec                 C   s   |   td¡ d S )NrU   )rk  rZ   rÜ   r   r   r   Útest_max_empty_tupley  s    z!TestBuiltins.test_max_empty_tuplec                 C   s   |   td¡ d S )Nr\   )rk  r`   rÜ   r   r   r   Útest_min_empty_tuple|  s    z!TestBuiltins.test_min_empty_tuplec                 C   s>   t }t|tjf|d�}|j}dD ]}|  ||ƒ||ƒ¡ q d S )NrÂ   )iøÿÿÿrÍ   r   r{   r7  )rb   r   r   r¦   rÄ   rÅ   rë   r   r   r   Útest_oct€  s
    zTestBuiltins.test_octc              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   rn  rÛ   rÜ   r   r   r   Útest_oct_npmˆ  s    
zTestBuiltins.test_oct_npmc                 C   s¨   t }t|t d¡t d¡f|d�}|j}dd„ }tdƒ}|  |||ƒ|||ƒ¡ dd„ tdƒD ƒ}|  |||ƒ|||ƒ¡ d	d„ tdƒD ƒ}|  |||ƒ|||ƒ¡ d S )
Nr  rŒ   rÂ   c                 S   s   | | S r   r   r   r   r   r   r  “  r  z*TestBuiltins.test_reduce.<locals>.<lambda>r¡   c                 S   s   g | ]}||d   ‘qS ©g      $@r   ©Ú.0r   r   r   r   Ú
<listcomp>˜  s     z,TestBuiltins.test_reduce.<locals>.<listcomp>c                 S   s   g | ]}t ||ƒ‘qS r   r"   rq  r   r   r   rs  ›  s     )rf   r   r   rð   rÄ   r‹   rÅ   )rÆ   rÃ   rÇ   rÈ   rÉ   re   r   r   r   r   Útest_reduceŒ  s    ÿþzTestBuiltins.test_reducec              	   C   s$   |   ¡ � | jtd� W 5 Q R X d S rÚ   )rå   rt  rÛ   rÜ   r   r   r   Útest_reduce_npmž  s    
zTestBuiltins.test_reduce_npmc                 C   st   t }tjtjfD ]^}t||f|d�}|j}dddddddd	d
ddg}|ddg7 }|D ]}|  ||ƒ||ƒ¡ qTqd S )NrÂ   gš™™™™™ù¿g      ø¿gffffffö¿g      à¿rÏ   çš™™™™™¹?ç      à?g333333ã?gffffffö?rê   ç      @gš™™™™™¹¿ré   )ri   r   r©   r¨   r   rÄ   rÅ   )rÆ   rÃ   rÇ   ÚtprÈ   rÉ   Úvaluesr   r   r   r   Útest_round1¢  s    zTestBuiltins.test_round1c                 C   s   | j td� d S rÚ   )r{  rÛ   rÜ   r   r   r   Útest_round1_npm­  s    zTestBuiltins.test_round1_npmc           
      C   s¢   t }tjtjfD ]Œ}|tjkr"dnd}t||tjf|d�}|j}dD ]V}dD ]L}| j|||ƒ|||ƒ|d� || |ƒ}	| j|| |ƒ|| |ƒ|d� qLqDqd S )NrÑ   ÚexactrÂ   )rÏ   rv  g      À?g      Ð?rw  g      è?g      ô?rê   g      ü?g      @r)   g      @g      )@g      .@g     €6@)rÍ   r   r{   r|   rÒ   )rk   r   r©   r¨   r   r¦   rÄ   rÅ   )
rÆ   rÃ   rÇ   ry  rÓ   rÈ   rÉ   r   rj   rÊ   r   r   r   Útest_round2°  s    ÿÿzTestBuiltins.test_round2c                 C   s   | j td� d S rÚ   )r~  rÛ   rÜ   r   r   r   Útest_round2_npmÀ  s    zTestBuiltins.test_round2_npmc                 C   sŒ   t }t|t d¡f|d�}|j}tdƒ}|  ||ƒ||ƒ¡ dd„ tdƒD ƒ}|  ||ƒ||ƒ¡ dd„ tdƒD ƒ}|  ||ƒ||ƒ¡ d S )NrŒ   rÂ   r¡   c                 S   s   g | ]}||d   ‘qS rp  r   rq  r   r   r   rs  Ì  s     z1TestBuiltins.test_sum_objmode.<locals>.<listcomp>c                 S   s   g | ]}t ||ƒ‘qS r   r"   rq  r   r   r   rs  Ï  s     )rn   r   r   rð   rÄ   r‹   rÅ   rë   r   r   r   Útest_sum_objmodeÃ  s    zTestBuiltins.test_sum_objmodec           	   	      s  t tƒ}t tƒ}t ddd„ƒ}tdddgƒ‰ ‡ fdd„}|ƒ D ]}|  ||ƒ| |¡¡ q>t d	¡t d
¡t 	d¡f}|  
||ƒ| |¡¡ ‡ fdd„}|ƒ D ]&\}}|  |||d�|j||d�¡ qžtddƒD ]2}tddƒD ]"}|  |||d�|j||d�¡ qÞqÐd S )Nr   c                 S   s"   t | ƒ}t||ƒ}t||d�|fS r“   )r‹   rm   )Úszr•   Útmpr–   r   r   r   Ú	sum_range×  s    
z(TestBuiltins.test_sum.<locals>.sum_ranger»   rq   rr   c                  3   sš   t dƒ•V  dd„ t dƒD ƒV  dd„ t dƒD ƒV  dV  dV  t d¡t d¡t d	¡fV  t t d
ƒ¡} | V  t d
¡V  ˆ ddƒV  ˆ ddƒV  d S )Nr¡   c                 S   s   g | ]}||d   ‘qS rp  r   rq  r   r   r   rs  â  s     z7TestBuiltins.test_sum.<locals>.args.<locals>.<listcomp>c                 S   s   g | ]}|d  ‘qS ©rÕ   r   rq  r   r   r   rs  ã  s     rz   ©r{   r|   ù              @é    r|   r}   rL   éd   éÈ   ù              i@)r‹   r£   r§   r¦   r+  r	   r«   Úones©Útl©r»   r   r   r0  à  s    z#TestBuiltins.test_sum.<locals>.argsr‡  r|   r}   c                  3   sÊ   t dƒ•dfV  dd„ t dƒD ƒdfV  dd„ t dƒD ƒdfV  dV  d	V  t d
¡t d¡t d¡ft d¡fV  t t dƒ¡} | dfV  t d¡dt d¡ fV  ˆ ddƒdfV  ˆ ddƒdfV  d S )Nr¡   é   c                 S   s   g | ]}||d   ‘qS rp  r   rq  r   r   r   rs  û  s     z;TestBuiltins.test_sum.<locals>.args_kws.<locals>.<listcomp>y              3@c                 S   s   g | ]}|d  ‘qS r„  r   rq  r   r   r   rs  ü  s     éþÿÿÿ)rz   é	   )r…  r   r‡  r|   r}   rŠ   rL   rˆ  )rL   rL   )rL   r‰  iÎÿÿÿrŠ  r‘  )	r‹   r£   r§   r¦   r+  r-  r	   r«   r‹  rŒ  rŽ  r   r   Úargs_kwsù  s    (
z'TestBuiltins.test_sum.<locals>.args_kwsr”   rù   r‡   )r   )r   rn   r—   r   rÅ   Úpy_funcr£   r.  r-  r,  ÚassertEqualr‹   )	rÆ   Úsum_defaultÚ	sum_kwargrƒ  r0  r   r’  r•   r�  r   rŽ  r   Útest_sumÒ  s(    
ÿÿzTestBuiltins.test_sumc              	   C   sü   t tƒ}t tƒ}d}|  tj¡�}|ddƒ W 5 Q R X |  | d¡t|j	ƒ¡ |  tj¡�}|ddƒ W 5 Q R X |  | d¡t|j	ƒ¡ |  tj¡�}|dt
dƒƒ W 5 Q R X |  | d¡t|j	ƒ¡ |  tj¡�}|dƒ W 5 Q R X |  d	t|j	ƒ¡ d S )
Nzsum() can't sum {}rz   rq   Ústringss   123r›   Ú	bytearrayÚabcdzNo implementation)r   rn   r—   rû   r
   r  r  r:   rA   r  r™  )rÆ   r•  r–  r  r  r   r   r   Útest_sum_exceptions  s    z TestBuiltins.test_sum_exceptionsc                 C   s>   t }tdd�|ƒ}|  |dƒ|dƒ¡ |  |dƒ|dƒ¡ d S )NTr'  F)rw   r   r”  ©rÆ   rÇ   rÉ   r   r   r   Ú
test_truth.  s    zTestBuiltins.test_truthc                    sX   t ‰tdd�ˆƒ‰ ‡ ‡‡fdd„}|ddƒ |ddƒ |d	dƒ |ddƒ |d
dƒ d S )NTr'  c                     s   ˆ| Ž }ˆ  ˆ | Ž |¡ d S r   )rÅ   )r0  rÊ   ©rÉ   rÇ   rÆ   r   r   rU  :  s    z+TestBuiltins.test_type_unary.<locals>.checkrê   r|   r{   r)   y              ø?y              @F)rs   r   )rÆ   rU  r   rž  r   Útest_type_unary5  s    



zTestBuiltins.test_type_unaryc                 C   s   |   t|¡ d S r   )rË   r�   r  r   r   r   Útest_zipD  s    zTestBuiltins.test_zipc                 C   s   | j td� d S rÚ   )r   rÛ   rÜ   r   r   r   Útest_zip_npmG  s    zTestBuiltins.test_zip_npmc                 C   s   |   t|¡ d S r   )rË   r†   r  r   r   r   Ú
test_zip_1J  s    zTestBuiltins.test_zip_1c                 C   s   | j td� d S rÚ   )r¢  rÛ   rÜ   r   r   r   Útest_zip_1_npmM  s    zTestBuiltins.test_zip_1_npmc                 C   s   |   t|¡ d S r   )rË   r‰   r  r   r   r   Ú
test_zip_3P  s    zTestBuiltins.test_zip_3c                 C   s   | j td� d S rÚ   )r¤  rÛ   rÜ   r   r   r   Útest_zip_3_npmS  s    zTestBuiltins.test_zip_3_npmc                 C   s   |   t|¡ d S r   )rË   r„   r  r   r   r   Ú
test_zip_0V  s    zTestBuiltins.test_zip_0c                 C   s   | j td� d S rÚ   )r¦  rÛ   rÜ   r   r   r   Útest_zip_0_npmY  s    zTestBuiltins.test_zip_0_npmc                 C   s   |   t|¡ dS )z‡
        Test side effect to the input iterators when a left iterator has been
        exhausted before the ones on the right.
        N)rË   r�   r  r   r   r   Útest_zip_first_exhausted\  s    z%TestBuiltins.test_zip_first_exhaustedc                 C   s   | j td� d S rÚ   )r¨  Únrt_no_pyobj_flagsrÜ   r   r   r   Útest_zip_first_exhausted_npmc  s    z)TestBuiltins.test_zip_first_exhausted_npmc                 C   sV   ddddg}|D ]@\}}t tt|ƒt|ƒftd�}| ||¡}|  |t||ƒ¡ qd S ©N)r|   r}   )r˜   r}   )r|   r*   )y               @r†  rÂ   )r   r�   r   rÛ   rÄ   rÅ   ©rÆ   r0  r   r   ZcresÚrr   r   r   Útest_pow_op_usecasef  s    üÿz TestBuiltins.test_pow_op_usecasec                 C   sV   ddddg}|D ]@\}}t tt|ƒt|ƒftd�}| ||¡}|  |t||ƒ¡ qd S r«  )r   r’   r   rÛ   rÄ   rÅ   r¬  r   r   r   Útest_pow_usecaset  s    üÿzTestBuiltins.test_pow_usecasec                 C   s&   t ƒ |ƒ}|ƒ }|ƒ }|  ||¡ d S r   )r   rÅ   )rÆ   rÇ   rÉ   rÊ   Úgotr   r   r   Ú_check_min_max‚  s    
zTestBuiltins._check_min_maxc                    sP   t dd„ ƒ‰ ‡ fdd„}|td�D ]}|  |¡ q"|td�D ]}|  |¡ q<d S )Nc                 s   s    | }||k r|V  ||7 }qd S r   r   )r•   ÚstopÚstepr/   r   r   r   ÚfrangeŠ  s    z8TestBuiltins.test_min_max_iterable_input.<locals>.frangec                 3   sv   ‡ fdd„V  ‡ fdd„V  ‡ fdd„V  ‡ fdd„V  ‡ fdd„V  ‡‡ fdd„V  ‡ fdd„V  ‡ fd	d„V  d S )
Nc                      s   ˆ t dƒƒS ©Nr¡   ©r‹   r   ©Úopr   r   r  ’  r  zTTestBuiltins.test_min_max_iterable_input.<locals>.sample_functions.<locals>.<lambda>c                      s   ˆ t ddƒƒS )Nr‡   r�  r¶  r   r·  r   r   r  “  r  c                      s   ˆ t dddƒƒS )Néüÿÿÿrú   rÍ   r¶  r   r·  r   r   r  ”  r  c                      s   ˆ dddgƒS )Ngffffff@g      @gÍÌÌÌÌÌ@r   r   r·  r   r   r  •  r  c                      s   ˆ ddgƒS )N)r}   r‡   r…   r   r   r·  r   r   r  –  r  c                      s   ˆˆ dddƒƒS )NrÐ   gffffff
@rv  r   r   )r´  r¸  r   r   r  —  r  c                      s   ˆ t jt j t jt jgƒS r   )r£   rÖ   rÔ   r   r·  r   r   r  ˜  r  c                      s   ˆ dddgƒS )N)r}   r;  )r|   r   r   r·  r   r   r  ™  r  r   r·  ©r´  r·  r   Úsample_functions‘  s    zBTestBuiltins.test_min_max_iterable_input.<locals>.sample_functionsr·  )r   r\   r±  rU   )rÆ   r»  Úfnr   rº  r   Útest_min_max_iterable_inputˆ  s    

z(TestBuiltins.test_min_max_iterable_inputN)mÚ__name__Ú
__module__Ú__qualname__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©  r3  r9  r:  r>  r?  r@  rB  rC  rD  rE  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rW  rX  rY  rZ  r[  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rk  rl  rm  rn  ro  rt  ru  r{  r|  r~  r  r€  r—  r›  r�  rŸ  rA  r   r¡  r¢  r£  r¤  r¥  r¦  r§  r¨  rª  r®  r¯  r±  r½  r   r   r   r   rÀ   I  sÎ    

	)		@rÀ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestOperatorMixedTypesc                    s\   dD ]R}t t|ƒ‰ t‡ fdd„ƒ}d}t ||¡D ]"\}}|  | ||¡|||ƒ¡ q2qd S )N)ÚeqÚnec                    s
   ˆ | |ƒS r   r   rp   r·  r   r   Úfunc¨  s    z/TestOperatorMixedTypes.test_eq_ne.<locals>.func)r{   r   TFr(   r˜   rÐ   rÕ   Nrî   r5  )Úgetattrrt   r   rß   rà   rÅ   r“  )rÆ   ÚopstrrÄ  Úthingsr   r   r   r·  r   Ú
test_eq_ne¤  s    
z!TestOperatorMixedTypes.test_eq_nec           	         st   dD ]j}t t|ƒ‰ t‡ fdd„ƒ}d}t ||¡D ]:\}}| ||¡}|||ƒ}d|||f }|  |||¡ q2qd S )N)ÚgtÚltÚgeÚlerÂ  rÃ  c                    s
   ˆ | |ƒS r   r   rp   r·  r   r   rÄ  µ  s    z-TestOperatorMixedTypes.test_cmp.<locals>.func)r{   r   TFr(   rÏ   rÐ   z0%s %s %s does not match between Python and Numba)rÅ  rt   r   rß   rà   r“  r”  )	rÆ   rÆ  rÄ  rÇ  r   r   rÊ   r°  Úmessager   r·  r   Útest_cmp²  s    

ÿzTestOperatorMixedTypes.test_cmpN)r¾  r¿  rÀ  rÈ  rÎ  r   r   r   r   rÁ  ¢  s   rÁ  c                   @   sj   e Z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ejdd„ ƒZdS )ÚTestIsinstanceBuiltinc              
   C   sb   t }tdd�|ƒ}ddddddd	dgd
tdd	gƒdd f
}|D ] }||ƒ}||ƒ}|  ||¡ q<d S )NTr'  r}   rx  ZHellos   worldrÕ   r{   r|   )r{   r}   r}   r}   )r{   Znbar|   )r    r   rš   r”  ©rÆ   rÇ   rÉ   ÚinputsZinptrÊ   r°  r   r   r   Útest_isinstanceÄ  s"    
õz%TestIsinstanceBuiltin.test_isinstancec                 C   s&   t }tdd�|ƒ}|  |ƒ |ƒ ¡ d S r&  )r¤   r   r”  rœ  r   r   r   Útest_isinstance_dictÛ  s    z*TestIsinstanceBuiltin.test_isinstance_dictc              
   C   sœ   t }tdd�|ƒ}t d¡dft d¡dft d¡dft d	¡d
ft d¡dft 	ddg¡dftj
 tjtj¡dff}|D ]\}}||ƒ}|  ||¡ qzd S )NTr'  r{   r¦   r|   r§   r*   r¨   g      @r©   y              @rœ   r¥   rª   )r­   r   r   r¦   r§   r¨   r©   r×   r	   r«   r¬   Úemptyr”  rÐ  r   r   r   Útest_isinstance_numba_typesá  s    ù
z1TestIsinstanceBuiltin.test_isinstance_numba_typesc                 C   s&   t }tdd�|ƒ}|  |ƒ |ƒ ¡ d S r&  )r°   r   r”  rœ  r   r   r   Útest_isinstance_numba_types_2õ  s    z3TestIsinstanceBuiltin.test_isinstance_numba_types_2c              	   C   sZ   t }tdd�|ƒ}|  |dƒ¡ d}|  tj¡�}|dƒ W 5 Q R X |  |t|jƒ¡ d S )NTr'  g333333@ú&Cannot infer numba type of python typerˆ  )	rµ   r   Ú
assertTruerû   r
   r  r  rA   r  )rÆ   rÇ   rÉ   r  r  r   r   r   Útest_isinstance_invalid_typeú  s    z2TestIsinstanceBuiltin.test_isinstance_invalid_typec              
   C   sj   t dftdftdftƒ dfg}|D ]B\}}t|ƒ}|  tj¡�}|dƒ W 5 Q R X |  |t	|j
ƒ¡ q"d S )Nr×  zGisinstance() cannot determine the type of variable "z" due to a branch.z6isinstance() does not support variables of type "ntpl(rˆ  )r³   r¹   rº   r¿   r   rû   r
   r  r  rA   r  )rÆ   Úfnsr¼  r  r  r   r   r   Útest_isinstance_exceptions	  s$    ÿÿÿÿ÷z0TestIsinstanceBuiltin.test_isinstance_exceptionsc           	      C   sÈ   dd„ }t ttttttttt	j
t	jf}dddddgdd	d
hd ddt	 dddg¡t	 
d¡t	 d¡tj tjtj¡tj tj¡t	 d¡f}|D ]8}t||ƒƒ}|D ]"}| |¡}||ƒ}|  ||¡ qžqŠd S )Nc                    s   ‡ fdd„}|S )Nc                    s
   t | ˆ ƒS r   r²   r   ©Ú
clazz_typer   r   r¾   "  s    zHTestIsinstanceBuiltin.test_combinations.<locals>.gen_w_arg.<locals>.implr   ©rÝ  r¾   r   rÜ  r   Ú	gen_w_arg!  s    z:TestIsinstanceBuiltin.test_combinations.<locals>.gen_w_argr{   gffffff@ù              @Ú5é   )rŠ   ó   8r‘  )r¡   é   r�  )é   rq   y              ,@rø   r8  é   é   é   r‡   )rE   r8   r#   rA   rŒ   r™   r›   rš   r‹   r£   r+  r¨   Úarrayr	   r¬   rÔ  r   Zunicode_typer©   r«   Ú
empty_listrØ   r‹  r   r“  r”  )	rÆ   rß  Úclazz_typesZ	instancesÚctr¼  r   rÊ   r°  r   r   r   Útest_combinations  s*     ÿ    ü
z'TestIsinstanceBuiltin.test_combinationsc              
   C   sf   dd„ }t jt jt jf}d}|D ]@}t||ƒƒ}|  tj¡�}|ƒ  W 5 Q R X |  t	|j
ƒ|¡ q d S )Nc                    s   ‡ fdd„}|S )Nc                      s
   t dˆ ƒS ©Nr{   r²   r   rÜ  r   r   r¾   9  s    zGTestIsinstanceBuiltin.test_numba_types.<locals>.gen_w_arg.<locals>.implr   rÞ  r   rÜ  r   rß  8  s    z9TestIsinstanceBuiltin.test_numba_types.<locals>.gen_w_argz%Numba type classes.*are not supported)r   ÚIntegerÚFloatZArrayr   rû   r
   r  ÚassertRegexrA   r  )rÆ   rß  rë  r  rì  r¼  r  r   r   r   Útest_numba_types5  s    z&TestIsinstanceBuiltin.test_numba_typesc                 C   sX   t dd„ ƒ}|  |ƒ d¡ |  | ¡ d¡ t dd„ ƒ}|  |ƒ d¡ |  | ¡ d¡ d S )Nc                   S   s   t t d¡tƒS rµ  )r�   r£   ÚintprE   r   r   r   r   r±   K  s    zITestIsinstanceBuiltin.test_python_numpy_scalar_alias_problem.<locals>.fooTFc                   S   s   t dtjƒS rî  )r�   r£   ró  r   r   r   r   ÚbarR  s    zITestIsinstanceBuiltin.test_python_numpy_scalar_alias_problem.<locals>.bar©r   r”  r“  )rÆ   r±   rô  r   r   r   Ú&test_python_numpy_scalar_alias_problemF  s    

z<TestIsinstanceBuiltin.test_python_numpy_scalar_alias_problemc                 C   s8   t dd„ ƒ}dD ]"}| |¡}||ƒ}|  ||¡ qd S )Nc                 S   sD   t | tƒr| d S t | tƒr&t | ¡S t | tƒr8t| ƒS ds@t‚d S )NÚsome_stringr   )r�   rA   r#   r£   rž   r™   ÚlenÚAssertionErrorr   r   r   r   r±   ]  s    



z4TestIsinstanceBuiltin.test_branch_prune.<locals>.foo)rï   y      ð?       @)rq   r}   rà  )r   r“  r”  )rÆ   r±   r   rÊ   r°  r   r   r   Útest_branch_pruneY  s    


z'TestIsinstanceBuiltin.test_branch_prunec              	   C   s‚   t jdd��l}t  dtj¡ tƒ  tdd„ ƒ}|dƒ |  t|ƒd¡ |  |d j	tj
¡ d	}|  |t|d jƒ¡ W 5 Q R X d S )
NT)ÚrecordÚalwaysc                 S   s
   t | tƒS r   r´   r   r   r   r   r±   w  s    z<TestIsinstanceBuiltin.test_experimental_warning.<locals>.foogX9´Èv¾ó?r{   r   z>Use of isinstance() detected. This is an experimental feature.)ÚwarningsÚcatch_warningsÚsimplefilterr
   ZNumbaWarningr   r   r”  rø  ÚcategoryZNumbaExperimentalFeatureWarningr  rA   rÍ  )rÆ   Úwr±   r  r   r   r   Útest_experimental_warningm  s    
ÿz/TestIsinstanceBuiltin.test_experimental_warningN)r¾  r¿  rÀ  rÒ  rÓ  rÕ  rÖ  rÙ  rÛ  rí  rò  rö  rú  r   Zrun_test_in_subprocessr  r   r   r   r   rÏ  Ã  s   rÏ  c                   @   sL   e Z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 )ÚTestGetattrBuiltinc                 C   s0   t dd„ ƒ}dD ]}|  ||ƒ| |¡¡ qd S )Nc                 S   s   t | dƒ}|ƒ S )NÚ__hash__©rÅ  )r   Úattrr   r   r   r±   ‹  s    
z7TestGetattrBuiltin.test_getattr_func_retty.<locals>.foo©r{   ç¸…ëQ¸@©rL   râ  rŠ   ©r   rÅ   r“  ©rÆ   r±   r   r   r   r   Útest_getattr_func_retty‰  s    
z*TestGetattrBuiltin.test_getattr_func_rettyc                 C   sB   t dd„ ƒ}tdƒD ](}t d| ¡}|  ||ƒ| |¡¡ qd S )Nc                 S   s
   t | dƒS )NÚndimr  r   r   r   r   r±   •  s    z8TestGetattrBuiltin.test_getattr_value_retty.<locals>.foor}   r;  )r   r‹   r£   rÔ  rÅ   r“  )rÆ   r±   r   r‚  r   r   r   Útest_getattr_value_retty“  s
    
z+TestGetattrBuiltin.test_getattr_value_rettyc                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                   S   s
   t tdƒS )NÚpi©rÅ  r£   r   r   r   r   r±      s    z7TestGetattrBuiltin.test_getattr_module_obj.<locals>.foor
  ©rÆ   r±   r   r   r   Útest_getattr_module_obj�  s    
z*TestGetattrBuiltin.test_getattr_module_objc              	   C   sD   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X d}|  |t|jƒ¡ d S )Nc                   S   s   t tdƒdƒS )NÚcosr{   r  r   r   r   r   r±   ©  s    zGTestGetattrBuiltin.test_getattr_module_obj_not_implemented.<locals>.fooz-Returning function objects is not implemented©r   rû   r
   r  r  rA   r  ©rÆ   r±   r  r  r   r   r   Ú'test_getattr_module_obj_not_implemented¦  s    
z:TestGetattrBuiltin.test_getattr_module_obj_not_implementedc              	      sP   d‰ t ‡ fdd„ƒ}|  t¡�}|dƒ W 5 Q R X |  dˆ › d�t|jƒ¡ d S )NÚ__not_a_valid_attr__c                    s
   t | ˆ ƒS r   r  r   ©Zinvalid_attrr   r   r±   ·  s    zCTestGetattrBuiltin.test_getattr_raises_attribute_error.<locals>.foog®Gáz®ó?z'float64' has no attribute 'ú')r   rû   ÚAttributeErrorr  rA   r  )rÆ   r±   r  r   r  r   Ú#test_getattr_raises_attribute_error³  s    ÿz6TestGetattrBuiltin.test_getattr_raises_attribute_errorc                 C   s>   t dd„ ƒ}tddƒD ]"\}}|  |||ƒ| ||¡¡ qd S )Nc                 S   s   t | d|ƒS )Nr  r  )r   Údefaultr   r   r   r±   Ä  s    z9TestGetattrBuiltin.test_getattr_with_default.<locals>.foor  )Né   r÷  )r   r€   rÅ   r“  )rÆ   r±   r   r   r   r   r   Útest_getattr_with_defaultÁ  s    
z,TestGetattrBuiltin.test_getattr_with_defaultc              	   C   sH   t dd„ ƒ}|  tj¡�}|ddƒ W 5 Q R X d}|  |t|jƒ¡ d S )Nc                 S   s
   t | |ƒS r   r  )r   Znonliteral_strr   r   r   r±   Í  s    z<TestGetattrBuiltin.test_getattr_non_literal_str.<locals>.foor{   r  z(argument 'name' must be a literal stringr  r  r   r   r   Útest_getattr_non_literal_strË  s    
z/TestGetattrBuiltin.test_getattr_non_literal_strc                    s2   t dd„ ƒ‰ t ‡ fdd„ƒ}|  |ƒ | ¡ ¡ d S )Nc                   S   s   dS )Ni90  r   r   r   r   r   Údefault_hashÙ  s    zPTestGetattrBuiltin.test_getattr_no_optional_type_generated.<locals>.default_hashc                     s   t t d¡dˆ ƒ} | ƒ S )Nr{   r  )rÅ  r£   r‹  )Z	hash_func©r   r   r   r±   Ý  s    ÿzGTestGetattrBuiltin.test_getattr_no_optional_type_generated.<locals>.foor
  r  r   r!  r   Ú'test_getattr_no_optional_type_generated×  s
    
z:TestGetattrBuiltin.test_getattr_no_optional_type_generatedN)r¾  r¿  rÀ  r  r  r  r  r  r  r  r"  r   r   r   r   r  †  s   

	
r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestHasattrBuiltinc                 C   s\   t dd„ ƒ}tj}dddtj ||¡tj |¡t 	d¡dfD ]}|  
||ƒ| |¡¡ q<d S )Nc                 S   s   t | dƒt | dƒfS )Nr  r  ©Úhasattrr   r   r   r   r±   ë  s    z,TestHasattrBuiltin.test_hasattr.<locals>.foor{   r  r	  r‡   ÚABC)r   r   r§   r	   r¬   rÔ  r«   rê  r£   r‹  rÅ   r“  )rÆ   r±   Útyr   r   r   r   Útest_hasattré  s    

  ÿzTestHasattrBuiltin.test_hasattrc              	   C   sF   t dd„ ƒ}|  tj¡�}|dƒ W 5 Q R X d}|  |t|jƒ¡ d S )Nc                 S   s    | dkrd}nd}t d|ƒ d S )Nr}   r  Ú__str__r{   r$  )Úpredr  r   r   r   r±   ù  s    z;TestHasattrBuiltin.test_hasattr_non_const_attr.<locals>.foorâ  zGhasattr() cannot determine the type of variable "attr" due to a branch.)r   rû   r
   ZNumbaTypeErrorr  rA   r  r  r   r   r   Útest_hasattr_non_const_attrô  s    
z.TestHasattrBuiltin.test_hasattr_non_const_attrN)r¾  r¿  rÀ  r(  r+  r   r   r   r   r#  æ  s   r#  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestStrAndReprBuiltinc                 C   s"   t dd„ ƒ}|  |ƒ | ¡ ¡ d S )Nc                   S   s   t ƒ S r   r@   r   r   r   r   r±     s    z3TestStrAndReprBuiltin.test_str_default.<locals>.foorõ  r  r   r   r   Útest_str_default  s    
z&TestStrAndReprBuiltin.test_str_defaultc                 C   s*   t dd„ ƒ}d}|  ||ƒ| |¡¡ d S )Nc                 S   s
   t | d�S )N)Úobjectr@   r   r   r   r   r±     s    z8TestStrAndReprBuiltin.test_str_object_kwarg.<locals>.fooza stringrõ  )rÆ   r±   Úvaluer   r   r   Útest_str_object_kwarg  s    
z+TestStrAndReprBuiltin.test_str_object_kwargc                    sr   t dd„ ƒ}|  ¡ \}}|ƒ }d‰ ‡ fdd„|_t|dƒ‡ fdd„ƒ}t|d	ƒd
d„ ƒ}|  ||ƒ| |¡¡ d S )Nc                 S   s   t | ƒS r   r@   r   r   r   r   r±     s    z<TestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.foozthis is the dummy object strc                    s   ˆ S r   r   ©r½   ©Ústring_reprr   r   r  &  r  zATestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.<lambda>r)  c                    s   ‡ fdd„}|S )Nc                    s   ˆ S r   r   ©Údummyr2  r   r   r¾   *  s    zVTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_string.<locals>.implr   ©r5  r¾   r2  r   r   Úol_dummy_string(  s    zHTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_stringÚ__repr__c                 S   s   dd„ }|S )Nc                 S   s   dS )NzSHOULD NOT BE CALLEDr   r4  r   r   r   r¾   0  s    zTTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_repr.<locals>.implr   r6  r   r   r   Úol_dummy_repr.  s    zFTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_repr)r   Úmake_dummy_typer)  r   r”  r“  )rÆ   r±   rð   Ú	DummyTyper5  r7  r9  r   r2  r   Útest_str_calls_dunder_str  s    

z/TestStrAndReprBuiltin.test_str_calls_dunder_strc                    s`   t dd„ ƒ}|  ¡ \}}|ƒ }d‰ ‡ fdd„|_t|dƒ‡ fdd„ƒ}|  ||ƒ| |¡¡ d S )	Nc                 S   s   t | ƒS r   r@   r   r   r   r   r±   8  s    z>TestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.foozthis is the dummy object reprc                    s   ˆ S r   r   r1  r2  r   r   r  ?  r  zCTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.<lambda>r8  c                    s   ‡ fdd„}|S )Nc                    s   ˆ S r   r   r4  r2  r   r   r¾   C  s    zVTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.ol_dummy_repr.<locals>.implr   r6  r2  r   r   r9  A  s    zHTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.ol_dummy_repr)r   r:  r8  r   r”  r“  )rÆ   r±   rð   r;  r5  r9  r   r2  r   Útest_str_falls_back_to_repr6  s    
z1TestStrAndReprBuiltin.test_str_falls_back_to_reprc                 C   s0   t dd„ ƒ}dD ]}|  ||ƒ| |¡¡ qd S )Nc                 S   s   t | ƒ| fS r   )Úreprr   r   r   r   r±   J  s    z,TestStrAndReprBuiltin.test_repr.<locals>.foo)ÚabcFé{   rõ  r  r   r   r   Ú	test_reprI  s    
zTestStrAndReprBuiltin.test_reprc                    sj   |   ¡ \‰ }ˆ ƒ }dt|ƒ› d�‰‡fdd„ˆ _t|ƒ‡ fdd„ƒ}tdd„ ƒ}|  ||ƒ| |¡¡ d S )	Nz<object type:ú>c                    s   ˆ S r   r   r1  r2  r   r   r  Y  r  z:TestStrAndReprBuiltin.test_repr_fallback.<locals>.<lambda>c                    s"   |j  |j  ˆ ¡¡}|j  |d¡S rY   )ZpyapiZunserializeZserialize_objectZcall_function_objargs)r1  Úobjr¯   Zclazobj)rð   r   r   Ú	box_dummy[  s    z;TestStrAndReprBuiltin.test_repr_fallback.<locals>.box_dummyc                 S   s   t | ƒS r   r@   r   r   r   r   r±   `  s    z5TestStrAndReprBuiltin.test_repr_fallback.<locals>.foo)r:  r   r8  r   r   r”  r“  )rÆ   r;  r5  rD  r±   r   )rð   r3  r   Útest_repr_fallbackQ  s    
z(TestStrAndReprBuiltin.test_repr_fallbackN)	r¾  r¿  rÀ  r-  r0  r<  r=  rA  rE  r   r   r   r   r,  
  s   	r,  Ú__main__)r   )brß   rc   Úsysrt   Úcollectionsr   Únumpyr£   Zunittestrý  Znumba.core.compilerr   r   Znumbar   r   r   r	   Z
numba.corer
   r   r   Znumba.tests.supportr   r   r   r   Znumba.core.extendingr   r   r  Zenable_pyobjectrA  Zforce_pyobjectrÛ   r©  Znrtr   r   r   r!   r$   r&   r1   r3   r4   r7   r9   r;   r=   r?   rB   rG   rK   rN   rP   rS   rV   rW   rX   rZ   r]   r^   r_   r`   rb   rf   ri   rk   rn   rs   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¾  Úmainr   r   r   r   Ú<module>   s°   


	
      _! D`$^
