U
    ,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mZ d dlmZmZmZ ejdk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  Z/d!d" Z0d#d$ Z1d%d& Z2d'd( Z3d)d* Z4d+d, Z5d-d. Z6d/d0 Z7d1d2 Z8d3d4 Z9d5d6 Z:d7d8 Z;d9d: Z<d;d< Z=d=d> Z>d?d@ Z?dAdB Z@dCdD ZAdEdF ZBdGdH ZCdIdJ ZDdKdL ZEdMdN ZFdOdP ZGdQdR ZHdSdT ZIdUdV ZJdWdX ZKdYdZ ZLd[d\ ZMd]d^ ZNd_dJ ZDd{d`daZOdbdc ZPddde ZQdfdg ZRdhdi ZSdjdk ZTdldm ZUdndo ZVdpdq ZWdrds ZXG dtdu dueZYG dvdw dweZZG dxdy dyeZ[e\dzkre]  dS )|    N
namedtuple)compile_isolatedFlags)jittypeofnjittyped)errorstypesutilsconfig)TestCasetagignore_internal_warnings)      Tc                 C   s   t | S N)absx r   =/tmp/pip-unpacked-wheel-eu7e0c37/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_usecase6   s    r!   c                 C   s
   t | |S r   complexr   r   r   r   complex_usecase9   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_usecaseE   s    r3   c                  C   s(   d} t ddD ]\}}| || 7 } q| S )Nr   r'   gn!	@r+   r-   r   r   r   enumerate_invalid_start_usecaseK   s    r4   c                 C   s
   t || S r   )filter)r   filter_funcr   r   r   filter_usecaseQ   s    r7   c                 C   s   t | S r   )floatr   r   r   r   float_usecaseT   s    r9   c                 C   s
   |  |S r   )formatr   r   r   r   format_usecaseW   s    r;   c                   C   s   t  S r   )globalsr   r   r   r   globals_usecaseZ   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_usecaseb   s    rA   c                 C   s   t | |dS N)base)intr   rC   r   r   r   int_usecasee   s    rF   c                 C   s   t | }t|t|fS r   )iternext)r   itr   r   r   iter_next_usecaseh   s    rJ   c                 C   s   d}t  d S )N   r   )localsr   r   r   r   locals_usecasel   s    rM   c                 C   s   t | |dS rB   )longrE   r   r   r   long_usecasep   s    rO   c                 C   s
   t || S r   )map)r   map_funcr   r   r   map_usecases   s    rR   c                 C   s
   t | |S r   maxr   r   r   r   max_usecase1w   s    rU   c                 C   s   t | |gS r   rS   r   r   r   r   max_usecase2z   s    rV   c                 C   s   t | S r   rS   r   r   r   r   max_usecase3}   s    rW   c                   C   s   t dS Nr   rS   r   r   r   r   max_usecase4   s    rY   c                 C   s
   t | |S r   minr   r   r   r   min_usecase1   s    r\   c                 C   s   t | |gS r   rZ   r   r   r   r   min_usecase2   s    r]   c                 C   s   t | S r   rZ   r   r   r   r   min_usecase3   s    r^   c                   C   s   t dS rX   rZ   r   r   r   r   min_usecase4   s    r_   c                 C   s   t | S r   )octr   r   r   r   oct_usecase   s    ra   c                 C   s   t | |S r   )	functoolsreduce)reduce_funcr   r   r   r   reduce_usecase   s    re   c                 C   s   t | S r   roundr   r   r   r   round_usecase1   s    rh   c                 C   s
   t | |S r   rf   )r   nr   r   r   round_usecase2   s    rj   c                 C   s   t | S r   sumr   r   r   r   sum_usecase   s    rm   c                 C   s   t | |S r   )typeabr   r   r   type_unary_usecase   s    rr   c                 C   s
   t | S r   )operatortruth)pr   r   r   truth_usecase   s    rv   c                 C   s   t | S r   )unichrr   r   r   r   unichr_usecase   s    rx   c                  C   s(   d} t ddD ]\}}| || 7 } q| S )Nr         r   )g      @@zipr-   r   r   r   zip_usecase   s    r   c                  C   s   d} t  D ]}| d7 } q
| S Nr   rz   r}   r.   r/   r   r   r   zip_0_usecase   s    

r   c                  C   s    d} t dD ]\}| |7 } q| S )Nr   rz   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      rK   )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   )rangerG   listr~   )iterableri   rI   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   rk   r   r   r   r   rm      s    c                 C   s&   t | |}trt | |d|fS |S d S Nstart)rl   py38orlater)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 )Nrz   rD          @r8   z, world!r@   r#   tupler   setbytesno match)

isinstancerD   r8   r@   r#   imagr   r   r   r   rp   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   )rz   r   
   r   ro   dictznot dict)npzerosr   r   ro   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   hellorz   r{   r   TF)r   r   r   r   rp   rq   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   rp   TFr   rD   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_usecase:  s    
r   c                     s*   t dddgdd  fdd} | S )Nntplrp   rq   rz   r{   c                    s
   t  S r   r   r   instr   r   r   implG  s    z9invalid_isinstance_unsupported_type_usecase.<locals>.implr   )r   r   r   r   +invalid_isinstance_unsupported_type_usecaseD  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 ZEefddZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMefddZNdd ZOefddZPdd ZQefddZRdd ZSefddZTdd ZUefddZVdd ZWdd ZXdd ZYdd ZZe[fddZ\dd Z]e[fddZ^dd Z_e[fddZ`dd Zae[fddZbdd Zce[fddZddd Zedd ZfddĄ ZgddƄ ZhddȄ ZidS )TestBuiltinsc                 C   s,   t |d|d}|j}| }| | | d S Nr   flags)r   entry_pointassertPreciseEqual)selfpyfuncr   crcfuncexpectedr   r   r   run_nullary_funcM  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   rz   g        皙?singleprecy      ?y                y?      @inf              ?nanr   r   r{   rz   )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_absS  s6    
zTestBuiltins.test_absc                 C   s   | j td d S Nr   )r   no_pyobj_flagsr   r   r   r   test_abs_npms  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   rz   )r   r   r   r   r   	itertoolsproductr   	r   r   r   r   r   
x_operands
y_operandsr   r   r   r   r   test_allv  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   rz   )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_resultrz   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   assertInr@   	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  r@   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   rz   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_npm6  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_format:  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_npmQ  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_globalsU  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_npm\  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_npmh  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_hexl  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_npmt  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  rz   r   r   i  i[i! i@B r   r   )rA   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_strx  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   r      )	rF   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   )rz   r2   rK   )rz   r2   rz   rz   )	rJ   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   )rM   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   rz   r{   r   r   )rR   r   r   r   r   r  r   )r   r   r   r   r   rQ   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  rU   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  rV   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  rW   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_30  s    zTestBuiltins.test_max_npm_3c                 C   s   | j td d S r   )rX  r   r   r   r   r   test_min_npm_33  s    zTestBuiltins.test_min_npm_3c                 C   s0   t |tjtdf|d}|j}|ddg d S )Nr   r   rz   )r   r   r   r   r   r   r   r   r   r   r   r   r   check_min_max_invalid_types6  s
    z(TestBuiltins.check_min_max_invalid_typesc              	   C   s$   |  t | t W 5 Q R X d S r   )r   r  r\  rU   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\  rU   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_typesD  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_npmH  s    
z)TestBuiltins.test_min_1_invalid_types_npmc                 C   s$   t |tjf|d}|j}|d d S )Nr   rz   )r   r   r   r   r[  r   r   r    check_min_max_unary_non_iterableN  s    z-TestBuiltins.check_min_max_unary_non_iterablec              	   C   s$   |  t | t W 5 Q R X d S r   )r   r  ra  rW   r   r   r   r   test_max_unary_non_iterableS  s    z(TestBuiltins.test_max_unary_non_iterablec              	   C   s"   |    | t W 5 Q R X d S r   )r   ra  rW   r   r   r   r   test_max_unary_non_iterable_npmW  s    
z,TestBuiltins.test_max_unary_non_iterable_npmc              	   C   s$   |  t | t W 5 Q R X d S r   )r   r  ra  r^   r   r   r   r   test_min_unary_non_iterable[  s    z(TestBuiltins.test_min_unary_non_iterablec              	   C   s"   |    | t W 5 Q R X d S r   )r   ra  r^   r   r   r   r   test_min_unary_non_iterable_npm_  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  r@   r  )r   r   	func_namer  r   r   r   check_min_max_empty_tuplee  s
    

z&TestBuiltins.check_min_max_empty_tuplec                 C   s   |  td d S )NrT   )rg  rY   r   r   r   r   test_max_empty_tuplek  s    z!TestBuiltins.test_max_empty_tuplec                 C   s   |  td d S )Nr[   )rg  r_   r   r   r   r   test_min_empty_tuplen  s    z!TestBuiltins.test_min_empty_tuplec                 C   s>   t }t|tjf|d}|j}dD ]}| |||| q d S )Nr   )ir   r   rz   r   )ra   r   r   r   r   r   r   r   r   r   test_octr  s
    zTestBuiltins.test_octc              	   C   s$   |    | jtd W 5 Q R X d S r   )r   rj  r   r   r   r   r   test_oct_npmz  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"   rm  r   r   r   ro    s     )re   r   r   r   r   r   r   )r   r   r   r   r   rd   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   rp  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   )rh   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   )rw  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   rr  g      ?g      ?rs  g      ?g      ?r   g      ?g      @r)   g      @g      )@g      .@g     6@)r   r   rz   r{   r   )rj   r   r   r   r   r   r   r   )
r   r   r   ru  r   r   r   r   ri   r   r   r   r   test_round2  s    zTestBuiltins.test_round2c                 C   s   | j td d S r   )rz  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 rl  r   rm  r   r   r   ro    s     z1TestBuiltins.test_sum_objmode.<locals>.<listcomp>c                 S   s   g | ]}t ||qS r   r"   rm  r   r   r   ro    s     )rm   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r&t||d|fS |S d S r   )r   rl   r   )szr   tmpr   r   r   r   	sum_range  s
    
z(TestBuiltins.test_sum.<locals>.sum_ranger   rp   rq   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 rl  r   rm  r   r   r   ro    s     z7TestBuiltins.test_sum.<locals>.args.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r   r   rm  r   r   r   ro    s     ry   rz   r{                 @    r{   r   rK   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 rl  r   rm  r   r   r   ro    s     z;TestBuiltins.test_sum.<locals>.args_kws.<locals>.<listcomp>y              3@c                 S   s   g | ]}|d  qS r  r   rm  r   r   r   ro    s     )ry   	   )r  r   r  r{   r   r   rK   r  )rK   rK   )rK   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   rm   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 {}ry   rp   stringss   123r   	bytearrayZabcdzNo implementation)r   rm   r   r   r
   r  r  r:   r@   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)rv   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   rT  /  s    z+TestBuiltins.test_type_unary.<locals>.checkr   r{   rz   r)   y              ?y              @F)rr   r   )r   rT  r   r  r   test_type_unary*  s    



zTestBuiltins.test_type_unaryc                 C   s   |  t| d S r   )r   r   r  r   r   r   test_zip9  s    zTestBuiltins.test_zipc                 C   s   | j td d S r   )r  r   r   r   r   r   test_zip_npm<  s    zTestBuiltins.test_zip_npmc                 C   s   |  t| d S r   )r   r   r  r   r   r   
test_zip_1?  s    zTestBuiltins.test_zip_1c                 C   s   | j td d S r   )r  r   r   r   r   r   test_zip_1_npmB  s    zTestBuiltins.test_zip_1_npmc                 C   s   |  t| d S r   )r   r   r  r   r   r   
test_zip_3E  s    zTestBuiltins.test_zip_3c                 C   s   | j td d S r   )r  r   r   r   r   r   test_zip_3_npmH  s    zTestBuiltins.test_zip_3_npmc                 C   s   |  t| d S r   )r   r   r  r   r   r   
test_zip_0K  s    zTestBuiltins.test_zip_0c                 C   s   | j td d S r   )r  r   r   r   r   r   test_zip_0_npmN  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_exhaustedQ  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_npmX  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_usecase[  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_usecasei  s    zTestBuiltins.test_pow_usecasec                 C   s&   t  |}| }| }| || d S r   )r   r   )r   r   r   r   gotr   r   r   _check_min_maxw  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
@rr  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  rT   )r   r  fnr   r  r   test_min_max_iterable_input}  s    

z(TestBuiltins.test_min_max_iterable_inputN)j__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  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  rg  rh  ri  rj  rk  rp  rq  rw  rx  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   K  s    

	)		C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   ro   r  r   r   func  s    z/TestOperatorMixedTypes.test_eq_ne.<locals>.func)rz   r   TFr(   r   r   r   Nr   r5  )getattrrs   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   ro   r  r   r   r    s    z-TestOperatorMixedTypes.test_cmp.<locals>.func)rz   r   TFr(   r   r   z0%s %s %s does not match between Python and Numba)r  rs   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   rt  ZHellos   worldr   rz   r{   )rz   r   r   r   )rz   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'  rz   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  r@   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  r@   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_argrz   gffffff@              @5   )r      8r  )r      r  )   rp   y              ,@r   r7           r   )rD   r8   r#   r@   r   r   r   r   r   r   r+  r   arrayr	   r   r  r   Zunicode_typer   r   Z
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 Nrz   r   r   r  r   r   r   .  s    zGTestIsinstanceBuiltin.test_numba_types.<locals>.gen_w_arg.<locals>.implr   r  r   r  r   r  -  s    z9TestIsinstanceBuiltin.test_numba_types.<locals>.gen_w_argz%Numba type classes.*are not supported)r   ZIntegerZFloatArrayr   r   r
   r  assertRegexr@   r  )r   r  r  r  r  r  r  r   r   r   test_numba_types*  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   intprD   r   r   r   r   r   @  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   barG  s    zITestIsinstanceBuiltin.test_python_numpy_scalar_alias_problem.<locals>.bar)r   r  r  )r   r   r  r   r   r   &test_python_numpy_scalar_alias_problem;  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 )NZsome_stringr   )r   r@   r#   r   r   r   lenAssertionErrorr   r   r   r   r   R  s    



z4TestIsinstanceBuiltin.test_branch_prune.<locals>.foo)r   y      ?       @)rp   r   r  )r   r  r  )r   r   r   r   r  r   r   r   test_branch_pruneN  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   l  s    z<TestIsinstanceBuiltin.test_experimental_warning.<locals>.foogX9v?rz   r   z>Use of isinstance() detected. This is an experimental feature.)warningscatch_warningssimplefilterr
   ZNumbaWarningr   r   r  r  categoryZNumbaExperimentalFeatureWarningr  r@   r  )r   wr   r  r   r   r   test_experimental_warningb  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  __main__)r   )^r   rb   sysrs   collectionsr   Znumpyr   Zunittestr  Znumba.core.compilerr   r   Znumbar   r   r   r	   Z
numba.corer
   r   r   r   Znumba.tests.supportr   r   r   Z	PYVERSIONr   r  Zenable_pyobjectr@  Zforce_pyobjectr   r  Znrtr   r   r   r!   r$   r&   r1   r3   r4   r7   r9   r;   r=   r?   rA   rF   rJ   rM   rO   rR   rU   rV   rW   rY   r\   r]   r^   r_   ra   re   rh   rj   rm   rr   rv   rx   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   



	
      R! D
