U
    9%e                     @   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 ZEdd`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`dkre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   X/var/www/html/Darija-Ai-API/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rt | trdS d	S nt | trd
S t | t	rd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rd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 ZDdd ZEdd ZFefddZGefddZHefddZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPefddZQdd ZRefddZSdd ZTefddZUdd ZVefddZWdd ZXefddZYdd ZZdd Z[dd Z\dd Z]e^fddZ_dd Z`e^fddZadd Zbe^fddZcdd Zde^fddZedd Zfe^fddĄZgddƄ ZhddȄ Ziddʄ Zjdd̄ Zkdd΄ ZldS )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 qt|tj	f|d}|j}|D ]}| |||| qt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 ]}| |||| qd 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 qd 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   il    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 qd S )
Nr   r(   g      @g}Ô%ITg       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 ]}| |||| qd 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 ]}| |||||| qd 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   r8  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   rC  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)rG  rV   r  r   r   r   
test_max_1  s    zTestBuiltins.test_max_1c                 C   s   |  t| dS )z
        min(*args)
        N)rG  r]   r  r   r   r   
test_min_1  s    zTestBuiltins.test_min_1c                 C   s   | j td d S r   )rH  r   r   r   r   r   test_max_npm_1  s    zTestBuiltins.test_max_npm_1c                 C   s   | j td d S r   )rI  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   rE  rF  r   r   r   check_minmax_2  s    

zTestBuiltins.check_minmax_2c                 C   s   |  t| dS )z
        max(list)
        N)rL  rW   r  r   r   r   
test_max_2  s    zTestBuiltins.test_max_2c                 C   s   |  t| dS )z
        min(list)
        N)rL  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   rM  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   rN  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   rT  r   rS  r   check_minmax_3  s    zTestBuiltins.check_minmax_3c                 C   s   |  t| dS )z
        max(tuple)
        N)rV  rX   r  r   r   r   
test_max_3"  s    zTestBuiltins.test_max_3c                 C   s   |  t| dS )z
        min(tuple)
        N)rV  r_   r  r   r   r   
test_min_3(  s    zTestBuiltins.test_min_3c                 C   s   | j td d S r   )rW  r   r   r   r   r   test_max_npm_3.  s    zTestBuiltins.test_max_npm_3c                 C   s   | j td d S r   )rX  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   )ra  rV   r  r   r   r   test_max_bool1R  s    zTestBuiltins.test_max_bool1c                 C   s   |  t| d S r   )ra  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  rd  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   rd  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  rd  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   rd  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   )rj  rZ   r   r   r   r   test_max_empty_tupley  s    z!TestBuiltins.test_max_empty_tuplec                 C   s   |  td d S )Nr\   )rj  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   )ir   r   r{   r6  )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   rm  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"   rp  r   r   r   rr    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   rs  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   gg      gffffffg      r   皙?      ?g333333?gffffff?r         @gr   )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   )rz  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   ru  g      ?g      ?rv  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   rx  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 ro  r   rp  r   r   r   rr    s     z1TestBuiltins.test_sum_objmode.<locals>.<listcomp>c                 S   s   g | ]}t ||qS r   r"   rp  r   r   r   rr    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 qtddD ]2}tddD ]"}| |||d|j||d qqd 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 ro  r   rp  r   r   r   rr    s     z7TestBuiltins.test_sum.<locals>.args.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r   r   rp  r   r   r   rr    s     rz   r{   r|                 @    r|   r}   rL   d                    i@)r   r   r   r   r*  r	   r   onestlr   r   r   r/    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 ro  r   rp  r   r   r   rr    s     z;TestBuiltins.test_sum.<locals>.args_kws.<locals>.<listcomp>y              3@c                 S   s   g | ]}|d  qS r  r   rp  r   r   r   rr    s     )rz   	   )r  r   r  r|   r}   r   rL   r  )rL   rL   )rL   r  ir  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  r/  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   )r/  r   r   r   r   r   r   rT  :  s    z+TestBuiltins.test_type_unary.<locals>.checkr   r|   r{   r)   y              ?y              @F)rs   r   )r   rT  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   r/  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 )Nr   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
@ru  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  r2  r8  r9  r=  r>  r?  rA  rB  rC  rD  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rV  rW  rX  rY  rZ  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  rj  rk  rl  rm  rn  rs  rt  rz  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   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   r4  )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                   @   s\   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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}   rw  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 ]"}||}||}| || qqd 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   r7           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_pruneN)r  r  r  r  r  r  r  r  r  r  r  r  r  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  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_rettyq  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>.foogGz?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  n  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   dummyr)  r   r   r     s    zVTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_string.<locals>.implr   r,  r   r)  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   r+  r   r   r   r     s    zTTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_repr.<locals>.implr   r-  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   	DummyTyper,  r.  r0  r   r)  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      s    z>TestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.foozthis is the dummy object reprc                    s    S r   r   r(  r)  r   r   r  '  r  zCTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.<lambda>r/  c                    s    fdd}|S )Nc                    s    S r   r   r+  r)  r   r   r   +  s    zVTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.ol_dummy_repr.<locals>.implr   r-  r)  r   r   r0  )  s    zHTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.ol_dummy_repr)r   r1  r/  r   r  r  )r   r   r   r2  r,  r0  r   r)  r   test_str_falls_back_to_repr  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   2  s    z,TestStrAndReprBuiltin.test_repr.<locals>.foo)abcF{   r  r  r   r   r   	test_repr1  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   r(  r)  r   r   r  A  r  z:TestStrAndReprBuiltin.test_repr_fallback.<locals>.<lambda>c                    s"   |j |j  }|j |dS rY   )ZpyapiZunserializeZserialize_objectZcall_function_objargs)r0  objr   Zclazobj)r   r   r   	box_dummyC  s    z;TestStrAndReprBuiltin.test_repr_fallback.<locals>.box_dummyc                 S   s   t | S r   r@   r   r   r   r   r   H  s    z5TestStrAndReprBuiltin.test_repr_fallback.<locals>.foo)r1  r   r/  r   r   r  r  )r   r2  r,  r;  r   r   )r   r*  r   test_repr_fallback9  s    
z(TestStrAndReprBuiltin.test_repr_fallbackN)	r  r  r  r$  r'  r3  r4  r8  r<  r   r   r   r   r#    s   	r#  __main__)r   )br   rc   sysrt   collectionsr   numpyr   ZunittestwarningsZ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_pyobjectr@  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   


	
      _! ,`$^
