o
    8ήcΪ                     @   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rbe]  dS dS )|    N
namedtuple)compile_isolatedFlags)jittypeofnjittyped)errorstypesutilsconfig)TestCasetagignore_internal_warnings)      Tc                 C      t | S N)absx r   @/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_builtins.pyabs_usecase      r   c                 C   H   | d kr|d krt g S | d krt |gS |d krt | gS t | |gS r   )allr   yr   r   r   all_usecase"      

r    c                 C   r   r   )anyr   r   r   r   any_usecase,   r!   r#   c                 C   r   r   )boolr   r   r   r   bool_usecase6   r   r%   c                 C   
   t | |S r   complexr   r   r   r   complex_usecase9      
r)   c                 C   r&   r   )divmodr   r   r   r   divmod_usecase<   r*   r,   c                  C   s&   d} t dD ]
\}}| || 7 } q| S )Nr         ?      @      @	enumerateresultijr   r   r   enumerate_usecase?   s   r7   c                  C   (   d} t ddD ]
\}}| || 7 } q| S )Nr   r-   *   r1   r3   r   r   r   enumerate_start_usecaseE      r:   c                  C   r8   )Nr   r-   gn!	@r1   r3   r   r   r   enumerate_invalid_start_usecaseK   r;   r<   c                 C   
   t || S r   )filter)r   filter_funcr   r   r   filter_usecaseQ   r*   r@   c                 C   r   r   )floatr   r   r   r   float_usecaseT   r   rB   c                 C   s
   |  |S r   )formatr   r   r   r   format_usecaseW   r*   rD   c                   C   s   t  S r   )globalsr   r   r   r   globals_usecaseZ   s   rF   c                 C   r   r   )hexr   r   r   r   hex_usecase_   r   rH   c                 C   r   r   )strr   r   r   r   str_usecaseb   r   rJ   c                 C      t | |dS N)base)intr   rM   r   r   r   int_usecasee      rP   c                 C   s   t | }t|t|fS r   )iternext)r   itr   r   r   iter_next_usecaseh   s   rU   c                 C   s   d}t  d S )N   r   )localsr   r   r   r   locals_usecasel   s   
rX   c                 C   rK   rL   )longrO   r   r   r   long_usecasep   rQ   rZ   c                 C   r=   r   )map)r   map_funcr   r   r   map_usecases   r*   r]   c                 C   r&   r   maxr   r   r   r   max_usecase1w   r*   r`   c                 C      t | |gS r   r^   r   r   r   r   max_usecase2z   rQ   rb   c                 C   r   r   r^   r   r   r   r   max_usecase3}   r   rc   c                   C      t dS Nr   r^   r   r   r   r   max_usecase4   r   rf   c                 C   r&   r   minr   r   r   r   min_usecase1   r*   ri   c                 C   ra   r   rg   r   r   r   r   min_usecase2   rQ   rj   c                 C   r   r   rg   r   r   r   r   min_usecase3   r   rk   c                   C   rd   re   rg   r   r   r   r   min_usecase4   r   rl   c                 C   r   r   )octr   r   r   r   oct_usecase   r   rn   c                 C   s   t | |S r   )	functoolsreduce)reduce_funcr   r   r   r   reduce_usecase   rQ   rr   c                 C   r   r   roundr   r   r   r   round_usecase1   r   ru   c                 C   r&   r   rs   )r   nr   r   r   round_usecase2   r*   rw   c                 C   r   r   sumr   r   r   r   sum_usecase   r   rz   c                 C   s   t | |S r   )typeabr   r   r   type_unary_usecase   rQ   r   c                 C   s
   t | S r   )operatortruth)pr   r   r   truth_usecase   r*   r   c                 C   r   r   )unichrr   r   r   r   unichr_usecase   r   r   c                  C   r8   )Nr         r   )g      @@zipr3   r   r   r   zip_usecase   r;   r   c                  C   s   d} t  D ]}| d7 } q| S Nr   r   r   r4   r5   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      rV   )r   g!@r   )r4   r5   r6   kr   r   r   zip_3_usecase   s   r   c                  C   s6   t d} d}t| }ttt ||}t|}||fS )N   r   )rangerR   listr   )iterablerv   rT   frontbackr   r   r   zip_first_exhausted   s   r   c                 C   s   | | S r   r   r   r   r   r   pow_op_usecase   r   r   c                 C   r&   r   )powr   r   r   r   pow_usecase   r*   r   c                 C   r   r   rx   r   r   r   r   rz      r   c                 C   s"   t | |}trt | |d|fS |S Nstart)ry   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 dS t | tr*| d dfS t | tr4| jdfS t | ttfrDt | trBdS d	S t | trKd
S t | t	rRdS dS )Nr   rN          @rA   z, world!rI   r(   tupler   setbytesno match)

isinstancerN   rA   rI   r(   imagr   r   r   r   r}   r   r   r   isinstance_usecase   s&   







r   c                  C   s6   ddd} dt dd}t| trt|trdS dS )	Nr   r   )r   r   
   r   r|   dictznot dict)npzerosr   r   r|   r   r   r   isinstance_dict   s
   
r   c                 C   s   t | tjrdS t | tjtjfrt | tjrdS dS t | tjtjfr6t | tjr,dS t | tjr4dS d S t | tjr>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   r}   r~   cr   r   r    isinstance_usecase_numba_types_2  s   

r   c                 C   s   t | dr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 )Nz
not a typeTFr   rA   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 )Nr   r   r}   TFr   rN   r   zr   r   r   *invalid_isinstance_usecase_phi_nopropagate/     
r   c                 C   s$   | dkrd}nd }t |trdS dS )Nr   r   TFr   r   r   r   r   #invalid_isinstance_optional_usecase:  r   r   c                     s*   t dddgdd  fdd} | S )Nntplr}   r~   r   r   c                    s
   t  S r   r   r   instr   r   r   implG  r*   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   sl  t }t|tjf|d}|j}dD ]}| |||| qt|tjf|d}|j}dD ]}| j||||dd q+dddtd	d
td  tdd
td	  g}t|tjf|d}|j}|D ]}| j||||dd q_t|tj	f|d}|j}|D ]}| |||| q|tj
D ]'}dddd|j d g}t||f|d}|j}|D ]}| |||| qqd S )Nr   r   r   g        皙?singleprecy      ?y                y?      @inf              ?nanr   r   r   r   )r   r   r   r   r   r   r   rA   	complex64
complex128unsigned_domainbitwidth)	r   r   r   r   r   r   complex_valuesunsigned_typeunsigned_valuesr   r   r   test_absS  s:   
zTestBuiltins.test_absc                 C      | j td d S Nr   )r   no_pyobj_flagsr   r   r   r   test_abs_npms     zTestBuiltins.test_abs_npmc           	      C   b   t }t|tjtjf|d}|j}g d}g d}t||D ]\}}| |||||| qd S Nr   )r   r   r   N)r    r   r   r   r   	itertoolsproductr   	r   r   r   r   r   
x_operands
y_operandsr   r   r   r   r   test_allv     zTestBuiltins.test_allc                 C   :   |    | jtd W d    d S 1 sw   Y  d S r   )assertTypingErrorr   r   r   r   r   r   test_all_npm     
"zTestBuiltins.test_all_npmc           	      C   r   r   )r#   r   r   r   r   r   r   r   r   r   r   r   test_any  r   zTestBuiltins.test_anyc                 C   r   r   )r   r  r   r   r   r   r   test_any_npm  r   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 ]}| |||| q4t|tjf|d}|j}t	dtdt	dtdfD ]}| |||| q[d S )	Nr   r   r                ?r   r   r   )
r%   r   r   r   r   r   r   rA   r   r(   r   r   r   r   r   r   r   r   r   	test_bool  s    zTestBuiltins.test_boolc                 C   r   r   )r  r   r   r   r   r   test_bool_npm  r   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 ]}| |||| q0d S )Nr   )r    r   r   )r%   r   r   stringr   r   Dummyr  r   r   r   test_bool_nonnumber  s   z TestBuiltins.test_bool_nonnumberc                 C   r   r   )r   r  r   r   r   r   r   test_bool_nonnumber_npm  r   z$TestBuiltins.test_bool_nonnumber_npmc           	      C   r   Nr   r   )r)   r   r   r   r   r   r   r   r   r   r   r   test_complex     zTestBuiltins.test_complexc                 C   r   r   )r  r   r   r   r   r   test_complex_npm  r   zTestBuiltins.test_complex_npmc              	   C   s   t }t|tjtjf|d}|j}ddd}g d}|dg }t||D ]&\}}	|||	\}
}|||	\}}|}| ||||f||
||f q$|D ]}| t	 ||d W d    n1 sdw   Y  qMd 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_result)
r   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   r   r   )r   r   r   r   r   r   test_divmod_ints_npm  r   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 ]\}}|||\}	}
|||\}}| 
||f|	|
f q+|D ]}| t ||d	 W d    n1 saw   Y  qJd 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   r   r   )r"  r   r   r   r   r   test_divmod_floats_npm  r   z#TestBuiltins.test_divmod_floats_npmc                 C      |  t| d S r   )r   r7   r   r   r   r   r   test_enumerate  r   zTestBuiltins.test_enumeratec                 C   r   r   )r&  r   r   r   r   r   test_enumerate_npm  r   zTestBuiltins.test_enumerate_npmc                 C   r$  r   )r   r:   r%  r   r   r   test_enumerate_start  r   z!TestBuiltins.test_enumerate_startc                 C   r   r   )r(  r   r   r   r   r   test_enumerate_start_npm  r   z%TestBuiltins.test_enumerate_start_npmc                 C   s^   t }t|dtd}| t}|  W d    n1 sw   Y  d}| |t|j d S )Nr   r   z2'float' object cannot be interpreted as an integer)	r<   r   enable_pyobj_flagsr  	TypeErrorr   assertInrI   	exception)r   r   r   raisesmsgr   r   r   'test_enumerate_start_invalid_start_type  s   
z4TestBuiltins.test_enumerate_start_invalid_start_typec                 C   sX   t }| tj}t|dtd}W d    n1 sw   Y  d}| |t|j d S )Nr   r   z3Only integers supported as start value in enumerate)	r<   r  r
   TypingErrorr   r   r,  rI   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   \   t }t|tdtdf|d}|j}dd }g d}| 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   )r@   r   r   r
  r   assertSequenceEqualr   )r   r   r   r   r   r?   r   r   r   r   test_filter     zTestBuiltins.test_filterc                 C   r   r   )r   r:  r   r   r   r   r   test_filter_npm   r   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 q+t|tjf|d}|j}dD ]}| |||| qHd S )Nr   r   r   r   r   )z-1.1z0.0z1.1)rB   r   r   r   r   r   r   r	  r  r   r   r   
test_float$  s   zTestBuiltins.test_floatc                 C   r   r   )r   r=  r   r   r   r   r   test_float_npm6  r   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 ]}| |||||| q5t|tjtjf|d}|j}d}dD ]}| |||||| qVd S )Nr   z{0}r   r   r   )rD   r   r   r	  r   r   r   r   )r   r   r   r   r   r   r   r   r   r   test_format:  s2   zTestBuiltins.test_formatc                 C   r   r   )r   r?  r   r   r   r   r   test_format_npmQ  r   zTestBuiltins.test_format_npmc                 C   s0   t }t|d|d}|j}| }| |t  d S r   )rF   r   r   assertIsrE   )r   r   r   r   r   gr   r   r   test_globalsU  s
   zTestBuiltins.test_globalsc                 C   r   r   )r   rC  r   r   r   r   r   test_globals_npm\  r   zTestBuiltins.test_globals_npmc                 K   s:   t }tdi ||}| | t  | | t  d S re   )rF   r   rA  rE   )r   	jit_flagsr   jittedr   r   r   test_globals_jit`  s   zTestBuiltins.test_globals_jitc                 C   s:   |    | jdd W d    d S 1 sw   Y  d S NTnopython)r   rG  r   r   r   r   test_globals_jit_npmh  r   z!TestBuiltins.test_globals_jit_npmc                 C   >   t }t|tjf|d}|j}dD ]}| |||| qd S r  )rH   r   r   r   r   r   r  r   r   r   test_hexl     zTestBuiltins.test_hexc                 C   r   r   )r   rM  r   r   r   r   r   test_hex_npmt  r   zTestBuiltins.test_hex_npmc              	   C   s   t }g d}g d}g ||}tjtjtjtjtjtjtjtj	tj
g	}|D ]3}t||f|d}|j}	|D ]#}
| |	||
|||
 |jrX| |	||
 |||
  q5q&d S )N)i  r   r   r   i  )i[i! i@B r   r   )rJ   r   int8int16r   r   uintuint8uint16uint32uint64r   r   r   signed)r   r   r   small_inputslarge_inputsargstypstypr   r   vr   r   r   test_int_strx  s0    zTestBuiltins.test_int_strc           	      C   sb   t }t|tjtjf|d}|j}g d}g d}t||D ]\}}| |||||| qd S )Nr   )z-10110)r   r   r      )	rP   r   r   r	  r   r   r   r   r   r   r   r   r   test_int  r  zTestBuiltins.test_intc                 C   r   r   )r   rc  r   r   r   r   r   test_int_npm  r   zTestBuiltins.test_int_npmc                 C   s   t }t|ttjdf|d}|j}| |dd t|ttjdf|d}|j}| t |d W d    d S 1 s?w   Y  d S )Nr   r   )r   r9   rV   )r   r9   r   r   )	rU   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   r   r   )rh  r   r   r   r   r   test_iter_next_npm  r   zTestBuiltins.test_iter_next_npmc                 C   sH   t }| tj t|tjf|d}W d    d S 1 sw   Y  d S r   )rX   r  r
   ForbiddenConstructr   r   r   )r   r   r   r   r   r   r   test_locals  s   "zTestBuiltins.test_localsc                 C   r   r   )rk  forceobj_flagsr   r   r   r   test_locals_forceobj  r   z!TestBuiltins.test_locals_forceobjc                 C   r   r   )r   rk  r   r   r   r   r   test_locals_npm  r   zTestBuiltins.test_locals_npmc                 C   r3  )Nr   r4  r   c                 S   s   | d S r5  r   r   r   r   r   r6    r7  z'TestBuiltins.test_map.<locals>.<lambda>r8  )r]   r   r   r
  r   r9  r   )r   r   r   r   r   r\   r   r   r   r   test_map  r;  zTestBuiltins.test_mapc                 C   r   r   )r   ro  r   r   r   r   r   test_map_npm  r   zTestBuiltins.test_map_npmc           	      C   ^   t |tjtjf|d}|j}g d}g d}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     zTestBuiltins.check_minmax_1c                 C      |  t| dS )z
        max(*args)
        N)rt  r`   r%  r   r   r   
test_max_1     zTestBuiltins.test_max_1c                 C   rv  )z
        min(*args)
        N)rt  ri   r%  r   r   r   
test_min_1  rx  zTestBuiltins.test_min_1c                 C   r   r   )rw  r   r   r   r   r   test_max_npm_1  r   zTestBuiltins.test_max_npm_1c                 C   r   r   )ry  r   r   r   r   r   test_min_npm_1  r   zTestBuiltins.test_min_npm_1c           	      C   rq  r  rr  rs  r   r   r   check_minmax_2  ru  zTestBuiltins.check_minmax_2c                 C   rv  )z
        max(list)
        N)r|  rb   r%  r   r   r   
test_max_2  rx  zTestBuiltins.test_max_2c                 C   rv  )z
        min(list)
        N)r|  rj   r%  r   r   r   
test_min_2
  rx  zTestBuiltins.test_min_2c                 C   r   r   )r   r}  r   r   r   r   r   test_max_npm_2  r   zTestBuiltins.test_max_npm_2c                 C   r   r   )r   r~  r   r   r   r   r   test_min_npm_2  r   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 ]}||| qd S )Nr   r  r   r/   r   )r   r   rA   r   )argtyr   r   tupvalr   r   r   r   r   check  s   z*TestBuiltins.check_minmax_3.<locals>.checkr   )r   rf  r   Tupler   )r   r   r   r  r   r  r   check_minmax_3  s   zTestBuiltins.check_minmax_3c                 C   rv  )z
        max(tuple)
        N)r  rc   r%  r   r   r   
test_max_3$  rx  zTestBuiltins.test_max_3c                 C   rv  )z
        min(tuple)
        N)r  rk   r%  r   r   r   
test_min_3*  rx  zTestBuiltins.test_min_3c                 C   r   r   )r  r   r   r   r   r   test_max_npm_30  r   zTestBuiltins.test_max_npm_3c                 C   r   r   )r  r   r   r   r   r   test_min_npm_33  r   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_types6  s
   z(TestBuiltins.check_min_max_invalid_typesc                 C   :   |  t | t W d    d S 1 sw   Y  d S r   )r  r+  r  r`   r   r   r   r   test_max_1_invalid_types<     "z%TestBuiltins.test_max_1_invalid_typesc                 C   <   |    | jttd W d    d S 1 sw   Y  d S r   )r   r  r`   r   r   r   r   r   test_max_1_invalid_types_npm@     
"z)TestBuiltins.test_max_1_invalid_types_npmc                 C   r  r   )r  r+  r  ri   r   r   r   r   test_min_1_invalid_typesD  r  z%TestBuiltins.test_min_1_invalid_typesc                 C   r  r   )r   r  ri   r   r   r   r   r   test_min_1_invalid_types_npmH  r  z)TestBuiltins.test_min_1_invalid_types_npmc                 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_iterableN  s   z-TestBuiltins.check_min_max_unary_non_iterablec                 C   r  r   )r  r+  r  rc   r   r   r   r   test_max_unary_non_iterableS  r  z(TestBuiltins.test_max_unary_non_iterablec                 C   8   |    | t W d    d S 1 sw   Y  d S r   )r   r  rc   r   r   r   r   test_max_unary_non_iterable_npmW     
"z,TestBuiltins.test_max_unary_non_iterable_npmc                 C   r  r   )r  r+  r  rk   r   r   r   r   test_min_unary_non_iterable[  r  z(TestBuiltins.test_min_unary_non_iterablec                 C   r  r   )r   r  rk   r   r   r   r   test_min_unary_non_iterable_npm_  r  z,TestBuiltins.test_min_unary_non_iterable_npmc                 C   sP   |   }t|dtd W d    n1 sw   Y  | d| t|j d S )Nr   r   z%s() argument is an empty tuple)r   r   r   r,  rI   r-  )r   r   	func_namer.  r   r   r   check_min_max_empty_tuplee  s   

z&TestBuiltins.check_min_max_empty_tuplec                 C      |  td d S )Nr_   )r  rf   r   r   r   r   test_max_empty_tuplek  r   z!TestBuiltins.test_max_empty_tuplec                 C   r  )Nrh   )r  rl   r   r   r   r   test_min_empty_tuplen  r   z!TestBuiltins.test_min_empty_tuplec                 C   rL  )Nr   )ir   r   r   r   )rn   r   r   r   r   r   r  r   r   r   test_octr  rN  zTestBuiltins.test_octc                 C   r   r   )r   r  r   r   r   r   r   test_oct_npmz  r   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 )
Nr4  r   r   c                 S   s   | | S r   r   r   r   r   r   r6    r7  z*TestBuiltins.test_reduce.<locals>.<lambda>r   c                 S      g | ]}||d   qS g      $@r   .0r   r   r   r   
<listcomp>      z,TestBuiltins.test_reduce.<locals>.<listcomp>c                 S      g | ]}t ||qS r   r'   r  r   r   r   r        )rr   r   r   r
  r   r   r   )r   r   r   r   r   rq   r   r   r   r   test_reduce~  s   zTestBuiltins.test_reducec                 C   r   r   )r   r  r   r   r   r   r   test_reduce_npm  r   zTestBuiltins.test_reduce_npmc                 C   sb   t }tjtjfD ]&}t||f|d}|j}g d}|ddg7 }|D ]}| |||| q!qd S )Nr   )gg      gffffffg      r   皙?      ?g333333?gffffff?r        @gr  )ru   r   r   r   r   r   r   )r   r   r   tpr   r   valuesr   r   r   r   test_round1  s   zTestBuiltins.test_round1c                 C   r   r   )r  r   r   r   r   r   test_round1_npm  r   zTestBuiltins.test_round1_npmc           
      C   s   t }tjtjfD ]F}|tju rdnd}t||tjf|d}|j}dD ]+}dD ]&}| j|||||||d || |}	| j|| ||| ||d q&q"qd S )Nr   exactr   )r   r  g      ?g      ?r  g      ?g      ?r  g      ?g      @r/   g      @g      )@g      .@g     6@)r   r   r   r   r   )rw   r   r   r   r   r   r   r   )
r   r   r   r  r   r   r   r   rv   r   r   r   r   test_round2  s"   zTestBuiltins.test_round2c                 C   r   r   )r  r   r   r   r   r   test_round2_npm  r   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   r  r  r   r  r   r   r   r    r  z1TestBuiltins.test_sum_objmode.<locals>.<listcomp>c                 S   r  r   r'   r  r   r   r   r    r  )rz   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 qOtddD ]}tddD ]}| |||d|j||d qoqhd S )Nr   c                 S   s*   t | }t||}trt||d|fS |S r   )r   ry   r   )szr   tmpr   r   r   r   	sum_range  s
   
z(TestBuiltins.test_sum.<locals>.sum_ranger   r}   r~   c                  3   s    g 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   r  r  r   r  r   r   r   r    r  z7TestBuiltins.test_sum.<locals>.args.<locals>.<listcomp>c                 S      g | ]}|d  qS r   r   r  r   r   r   r        r   r   r                 @    r   r   rV   d                    i@)r   r   r   r   rP  r	   r   onestlr   r   r   rZ    s   z#TestBuiltins.test_sum.<locals>.argsr  r   r   c                  3   s    g 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   r  r  r   r  r   r   r   r    r  z;TestBuiltins.test_sum.<locals>.args_kws.<locals>.<listcomp>y              3@c                 S   r  r  r   r  r   r   r   r    r  )r   	   )r  r   r  r   r   r   rV   r  )rV   rV   )rV   r  ir  r  )	r   r   r   r   rP  rU  r	   r   r  r  r  r   r   args_kws  s   (
z'TestBuiltins.test_sum.<locals>.args_kwsr   r  r   r   )r   rz   r   r   r   py_funcr   rV  rU  rS  assertEqualr   )	r   sum_default	sum_kwargr  rZ  r   r  r   r  r   r  r   test_sum  s,   
zTestBuiltins.test_sumc                 C   sL  t t}t t}d}| tj}|dd W d    n1 s w   Y  | |dt|j	 | tj}|dd W d    n1 sGw   Y  | |dt|j	 | tj}|dt
d W d    n1 spw   Y  | |dt|j	 | tj}|d W d    n1 sw   Y  | d	t|j	 d S )
Nzsum() can't sum {}r   r}   stringss   123r   	bytearrayabcdzNo implementation)r   rz   r   r  r
   r1  r,  rC   rI   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 )NTrI  F)r   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 )NTrI  c                     s   |  }  |  | d S r   )r   )rZ  r   r   r   r   r   r   r  /  s   z+TestBuiltins.test_type_unary.<locals>.checkr  r   r   r/   y              ?y              @F)r   r   )r   r  r   r  r   test_type_unary*  s   



zTestBuiltins.test_type_unaryc                 C   r$  r   )r   r   r%  r   r   r   test_zip9  r   zTestBuiltins.test_zipc                 C   r   r   )r  r   r   r   r   r   test_zip_npm<  r   zTestBuiltins.test_zip_npmc                 C   r$  r   )r   r   r%  r   r   r   
test_zip_1?  r   zTestBuiltins.test_zip_1c                 C   r   r   )r  r   r   r   r   r   test_zip_1_npmB  r   zTestBuiltins.test_zip_1_npmc                 C   r$  r   )r   r   r%  r   r   r   
test_zip_3E  r   zTestBuiltins.test_zip_3c                 C   r   r   )r  r   r   r   r   r   test_zip_3_npmH  r   zTestBuiltins.test_zip_3_npmc                 C   r$  r   )r   r   r%  r   r   r   
test_zip_0K  r   zTestBuiltins.test_zip_0c                 C   r   r   )r  r   r   r   r   r   test_zip_0_npmN  r   zTestBuiltins.test_zip_0_npmc                 C   rv  )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   r   r   )r  nrt_no_pyobj_flagsr   r   r   r   test_zip_first_exhausted_npmX  r   z)TestBuiltins.test_zip_first_exhausted_npmc                 C   R   g d}|D ] \}}t tt|t|ftd}|||}| |t|| qd S N))r   r   )r   r   )r   r0   )y               @r  r   )r   r   r   r   r   r   r   rZ  r   r   cresrr   r   r   test_pow_op_usecase[     z TestBuiltins.test_pow_op_usecasec                 C   r  r  )r   r   r   r   r   r   r  r   r   r   test_pow_usecasei  r  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 }||k sd S d S r   r   )r   stopstepr5   r   r   r   frange  s   z8TestBuiltins.test_min_max_iterable_input.<locals>.frangec                 3   sx     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   r6        zTTestBuiltins.test_min_max_iterable_input.<locals>.sample_functions.<locals>.<lambda>c                      s    t ddS )Nr   r  r  r   r  r   r   r6    s    c                      s    t dddS )Nr  r   r  r   r  r   r   r6        c                          g dS )N)gffffff@g      @g@r   r   r  r   r   r6    r  c                      s    ddgS )N)r   r   r   r   r   r  r   r   r6    r  c                      s    dddS )Nr   gffffff
@r  r   r   )r  r  r   r   r6    r  c                      s    t jt j t jt jgS r   )r   r   r   r   r  r   r   r6    s    c                      r  )N))r   re  )r   r   r   r  r   r   r6    r  r   r  r  r  r   sample_functions  s   zBTestBuiltins.test_min_max_iterable_input.<locals>.sample_functionsr  )r   rh   r  r_   )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)  r0  r2  r:  r<  r=  r>  r?  r@  rC  rD  rG  rK  rM  rO  r  r^  rc  rd  rh  ri  rk  rm  rn  ro  rp  rt  rw  ry  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  r  r  r  r  r  r  r  r  r  rl  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 ])}t t| t fdd}d}t||D ]\}}| |||||| qqd S )N)eqnec                    
    | |S r   r   r|   r  r   r   func     
z/TestOperatorMixedTypes.test_eq_ne.<locals>.func)r   r   TFr.   r   r   r   Nr  r`  )getattrr   r   r   r   r   r  )r   opstrr  thingsr   r   r   r  r   
test_eq_ne  s   
z!TestOperatorMixedTypes.test_eq_nec           	         st   dD ]5}t t| t fdd}d}t||D ]\}}|||}|||}d|||f }| ||| qqd S )N)gtltgeler  r  c                    r  r   r   r|   r  r   r   r    r  z-TestOperatorMixedTypes.test_cmp.<locals>.func)r   r   TFr.   r   r   z0%s %s %s does not match between Python and Numba)r  r   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   s`   t }tdd|}dddddg dd	td
dgdd f
}|D ]}||}||}| || qd S )NTrI  r   r  Hellos   worldr   r   )r   r   r   r   r   r   )r   nbar   )r   r   r   r  r   r   r   inputsinptr   r  r   r   r   test_isinstance  s$   
z%TestIsinstanceBuiltin.test_isinstancec                 C   &   t }tdd|}| | |  d S rH  )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 ]\}}||}| || q=d S )NTrI  r   r   r   r   r0   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   r  rH  )r   r   r  r  r   r   r   test_isinstance_numba_types_2  s   z3TestIsinstanceBuiltin.test_isinstance_numba_types_2c                 C   sn   t }tdd|}| |d d}| tj}|d W d    n1 s'w   Y  | |t|j d S )NTrI  g333333@&Cannot infer numba type of python typer  )	r   r   
assertTruer  r
   r1  r,  rI   r-  )r   r   r   r/  r.  r   r   r   test_isinstance_invalid_type  s   
z2TestIsinstanceBuiltin.test_isinstance_invalid_typec              	   C   s~   t dftdftdft dfg}|D ]+\}}t|}| tj}|d W d    n1 s.w   Y  | |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
   r1  r,  rI   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	g dt	
dt	dtjtjtjtjtjt	df}|D ]}t||}|D ]}||}||}| || qNqDd S )Nc                        fdd}|S )Nc                    s
   t |  S r   r   r   
clazz_typer   r   r     r*   zHTestIsinstanceBuiltin.test_combinations.<locals>.gen_w_arg.<locals>.implr   r%  r   r   r$  r   	gen_w_arg     z:TestIsinstanceBuiltin.test_combinations.<locals>.gen_w_argr   gffffff@              @5   )r      8r  )r      r  )   r}   y              ,@)r  rb           r   )rN   rA   r(   rI   r   r   r   r   r   r   rP  r   arrayr	   r   r  r   unicode_typer   r   
empty_listr   r  r   r  r  )	r   r'  clazz_types	instancesctr  r   r   r  r   r   r   test_combinations  s$   
z'TestIsinstanceBuiltin.test_combinationsc              	   C   sz   dd }t jt jt jf}d}|D ]*}t||}| tj}|  W d    n1 s,w   Y  | t	|j
| qd S )Nc                    r#  )Nc                      s
   t d S Nr   r   r   r$  r   r   r   .  r*   zGTestIsinstanceBuiltin.test_numba_types.<locals>.gen_w_arg.<locals>.implr   r&  r   r$  r   r'  -  r(  z9TestIsinstanceBuiltin.test_numba_types.<locals>.gen_w_argz%Numba type classes.*are not supported)r   IntegerFloatArrayr   r  r
   r1  assertRegexrI   r-  )r   r'  r5  r/  r7  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   intprN   r   r   r   r   r   @  s   zITestIsinstanceBuiltin.test_python_numpy_scalar_alias_problem.<locals>.fooTFc                   S   s   t dtjS r9  )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   s<   t | tr	| d S t | trt| S t | trt| S J )Nsome_string)r   rI   r(   r   r   r   lenr   r   r   r   r   R  s   



z4TestIsinstanceBuiltin.test_branch_prune.<locals>.foo)r	  y      ?       @)r}   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<}t dtj t  tdd }|d | t|d | |d j	tj
 d	}| |t|d j W d    d S 1 sEw   Y  d S )
NT)recordalwaysc                 S   s
   t | tS r   r   r   r   r   r   r   l  r  z<TestIsinstanceBuiltin.test_experimental_warning.<locals>.foogX9v?r   r   z>Use of isinstance() detected. This is an experimental feature.)warningscatch_warningssimplefilterr
   NumbaWarningr   r   r  rC  categoryNumbaExperimentalFeatureWarningr,  rI   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"  r8  r>  rA  rD  r   run_test_in_subprocessrN  r   r   r   r   r    s    r  __main__r  )^r   ro   sysr   collectionsr   numpyr   unittestrG  numba.core.compilerr   r   numbar   r   r   r	   
numba.corer
   r   r   r   numba.tests.supportr   r   r   	PYVERSIONr   r*  enable_pyobjectrl  force_pyobjectr   r  nrtr   r    r#   r%   r)   r,   r7   r:   r<   r@   rB   rD   rF   rH   rJ   rP   rU   rX   rZ   r]   r`   rb   rc   rf   ri   rj   rk   rl   rn   rr   ru   rw   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  mainr   r   r   r   <module>   s    



	
      R! 
D