o
    1&i                     @   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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mZ ddiZdd	d
ZddiZdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(d d! Z)d"d# Z*d$d% Z+d&d' Z,d(d) Z-d*d+ Z.d,d- Z/d.d/ Z0d0d1 Z1d2d3 Z2d4d5 Z3d6d7 Z4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8d@dA Z9dBdC Z:dDdE Z;dFdG Z<dHdI Z=dJdK Z>dLdM Z?dNdO Z@dPdQ ZAdRdS ZBdTdU ZCdVdW ZDdXdY ZEdZd[ ZFd\d] ZGd^d_ ZHd`da ZIdbdc ZJdddO Z@ddedfZKdgdh ZLdidj ZMdkdl ZNdmdn ZOdodp ZPdqdr ZQdsdt ZRdudv ZSdwdx ZTdydz ZUG d{d| d|eZVG d}d~ d~eZWG dd deZXG dd deeZYG dd deeZZG dd deeZ[e\dkrze]  dS dS )    N
namedtuple)jittypeofnjittyped)errorstypesconfig)TestCasetagignore_internal_warningsMemoryLeakMixin)overload_methodboxregister_jitableZforceobjTF)nopythonZ_nrtr   c                 C      t | S N)absx r   DC:\wamp64\www\opt\env\Lib\site-packages\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_usecase1   r   r%   c                 C   
   t | |S r   complexr   r   r   r   complex_usecase4      
r)   c                 C   r&   r   )divmodr   r   r   r   divmod_usecase7   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_usecase@      r:   c                  C   r8   )Nr   r-   gn!	@r1   r3   r   r   r   enumerate_invalid_start_usecaseF   r;   r<   c                 C   
   t || S r   )filter)r   filter_funcr   r   r   filter_usecaseL   r*   r@   c                 C   r   r   )floatr   r   r   r   float_usecaseO   r   rB   c              	   C   s@   t dt dt dt dt dt dt dt dd	}|| S )
NinfINF-inf-INFz
INF       z       
	-INFz1234.45z
-123.4)r                        )rA   get)r   dr   r   r   float_inf_usecaseR   s   

rP   c                 C   s
   |  |S r   )formatr   r   r   r   format_usecase_   r*   rR   c                   C      t  S r   )globalsr   r   r   r   globals_usecaseb   s   rU   c                 C   r   r   )hexr   r   r   r   hex_usecaseg   r   rW   c                 C   r   r   strr   r   r   r   str_usecasej   r   rZ   c                 C      t | |dS N)base)intr   r]   r   r   r   int_usecasem      r`   c                 C   s   t | }t|t|fS r   )iternext)r   itr   r   r   iter_next_usecasep   s   re   c                 C   s   d}t  d S )NrK   r   )localsr   r   r   r   locals_usecaset   s   
rg   c                 C   r[   r\   )longr_   r   r   r   long_usecasex   ra   ri   c                 C   r=   r   )map)r   map_funcr   r   r   map_usecase{   r*   rl   c                 C   r&   r   maxr   r   r   r   max_usecase1   r*   ro   c                 C      t | |gS r   rm   r   r   r   r   max_usecase2   ra   rq   c                 C   r   r   rm   r   r   r   r   max_usecase3   r   rr   c                   C      t dS Nr   rm   r   r   r   r   max_usecase4   r   ru   c                 C   r&   r   minr   r   r   r   min_usecase1   r*   rx   c                 C   rp   r   rv   r   r   r   r   min_usecase2   ra   ry   c                 C   r   r   rv   r   r   r   r   min_usecase3   r   rz   c                   C   rs   rt   rv   r   r   r   r   min_usecase4   r   r{   c                 C   r   r   )octr   r   r   r   oct_usecase   r   r}   c                 C   s   t | |S r   )	functoolsreduce)reduce_funcr   r   r   r   reduce_usecase   ra   r   c                 C   r   r   roundr   r   r   r   round_usecase1   r   r   c                 C   r&   r   r   )r   nr   r   r   round_usecase2   r*   r   c                 C   r   r   sumr   r   r   r   sum_usecase   r   r   c                 C   s   t | |S r   )typeabr   r   r   type_unary_usecase   ra   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   rG   rH   rI   )g      @@zipr3   r   r   r   zip_usecase   r;   r   c                  C   s   d} t  D ]}| d7 } q| S Nr   rG   r   r4   r5   r   r   r   zip_0_usecase   s   

r   c                  C   s    d} t dD ]\}| |7 } q| S )Nr   rG   rH   r   r   r   r   r   zip_1_usecase   s   
r   c                  C   s0   d} t dddD ]\}}}| || | 7 } q| S )Nr   r   )rI   rJ   rK   )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 )NrM   rI   )rangerb   listr   )iterabler   rd   Z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   r   r   r   r   r   r      r   c                 C   s   t | |}t | |d|fS Nstartr   )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 )NrG   r^          @rA   z, world!rY   r(   tupler   setbytesno match)

isinstancer^   rA   rY   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 )	NrH   rJ   )rG   rI   
   rI   r   dictznot dict)npZ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   hellorG   rH   rI   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 )NrJ   r   r   TFr   r^   r   zr   r   r   *invalid_isinstance_usecase_phi_nopropagate4     
r   c                 C   s4   d}t | tr| | f} tt| D ]}||7 }q|S )Nr   )r   r^   r   len)r   r   r5   r   r   r   +invalid_isinstance_usecase_phi_nopropagate2?  s   

r   c                 C   s$   | dkrd}nd }t |trdS dS )NrJ   r   TFr   r   r   r   r   #invalid_isinstance_optional_usecaseJ  r   r   c                     s*   t dddgdd  fdd} | S )Nntplr   r   rG   rH   c                    s
   t  S r   r   r   instr   r   r   implW  r*   z9invalid_isinstance_unsupported_type_usecase.<locals>.implr   )r   r   r   r   +invalid_isinstance_unsupported_type_usecaseT  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d7d8 Zefd9d:Z d;d< Z!efd=d>Z"d?d@ Z#efdAdBZ$dCdD Z%efdEdFZ&dGdH Z'dIdJ Z(efdKdLZ)dMdN Z*efdOdPZ+dQdR Z,efdSdTZ-dUdV Z.dWdX Z/efdYdZZ0d[d\ Z1d]d^ Z2efd_d`Z3efdadbZ4dcdd Z5dedf Z6dgdh Z7efdidjZ8efdkdlZ9dmdn Z:dodp Z;dqdr Z<efdsdtZ=efdudvZ>dwdx Z?dydz Z@efd{d|ZAd}d~ ZBdd ZCdd 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Z`dd ZaefddZbdd ZcefddZdddĄ ZeefddƄZfddȄ Zgddʄ Zhdd̄ Zidd΄ ZjddЄ ZkdS )TestBuiltinsc                 C   s*   t di ||}| }| | | d S Nr   r   )r   assertPreciseEqual)selfpyfuncflagscfuncexpectedr   r   r   run_nullary_func]  s   zTestBuiltins.run_nullary_funcc                 C   sl  t }ttjffi ||}dD ]}| |||| qttjffi ||}dD ]}| j||||dd q+dddtdd	td
  td
d	td  g}ttjffi ||}|D ]}| j||||dd q_ttjffi ||}|D ]}| |||| q|tj	D ]'}dddd|j
 d g}t|ffi ||}|D ]}| |||| qqd S )Nr   rG   g        皙?singleprecy      ?y                y?      @rC                 ?nanr   r   rH   rG   )r   r   r	   r   r   r   rA   	complex64
complex128Zunsigned_domainZbitwidth)r   r   r   r   r   Zcomplex_valuesZunsigned_typeZunsigned_valuesr   r   r   test_absb  s0   
zTestBuiltins.test_absc                 C      | j td d S N)r   )r   no_pyobj_flagsr   r   r   r   test_abs_npm}     zTestBuiltins.test_abs_npmc                 C   b   t }ttjtjffi ||}g d}g d}t||D ]\}}| |||||| qd S N)r   r   rG   N)r    r   r	   r   	itertoolsproductr   r   r   r   r   
x_operands
y_operandsr   r   r   r   r   test_all     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   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fi ||}dD ]}| |||| qttjffi ||}dddtdtdfD ]}| |||| q4ttjffi ||}tdtdtdtdfD ]}| |||| q[d S )Nr   r                ?rC   r   r   )	r%   r   r	   r   r   r   rA   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fi ||}dD ]}| |||| qttdffi ||}dgg fD ]}| |||| q0d S )N)r    r   rG   )r%   r   r	   stringr   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   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fi ||}ddd}g d}|dg }t||D ]&\}}|||\}	}
|||\}}|}| ||||f||	||
f q$|D ]}| t ||d W d    n1 sdw   Y  qMd S )N@   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)
rG   rI   rM      r   il    l         r   )r  )	r,   r   r	   r   r   r   r   assertRaisesZeroDivisionError)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fi ||}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.   g      @g}Ô%ITg       g      g\nr  r   )r,   r   r	   r   r   rC   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i t|}| t}|  W d    n1 sw   Y  d}| |t|j d S )Nr   z2'float' object cannot be interpreted as an integerr   )r<   r   forceobj_flagsr  	TypeErrorassertInrY   	exception)r   r   r   raisesmsgr   r   r   'test_enumerate_start_invalid_start_type  s   z4TestBuiltins.test_enumerate_start_invalid_start_typec                 C   s\   t }| tj}tdi t| W d    n1 sw   Y  d}| |t|j d S )Nr   z3Only integers supported as start value in enumerater   )	r<   r  r   TypingErrorr   r   r-  rY   r.  )r   r   r/  r0  r   r   r   +test_enumerate_start_invalid_start_type_npm  s   z8TestBuiltins.test_enumerate_start_invalid_start_type_npmc                 C   `   t }tdtdf}t|fi ||}dd }g d}| t|||t||| d S )Nr   function_ptrc                 S   s   | d S NrH   r   r   r   r   r   <lambda>      z*TestBuiltins.test_filter.<locals>.<lambda>r   rG   rH   rI   rJ   )r@   r	   r  r   assertSequenceEqualr   )r   r   r   argtysr   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fi ||}dD ]}| |||| qttjffi ||}dD ]}| j||||dd q+ttjffi ||}dD ]}| |||| qHd S )Nr   r   r   r   )z-1.1z0.0z1.1rC   rE   rD   rF   )rB   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_npm1  r  zTestBuiltins.test_float_npmc                 C   s2   t }t|}tdD ]}| |||| q
d S )N   )rP   r   r   r   )r   r   r   r   r   r   r   test_float_string_literal5  s
   z&TestBuiltins.test_float_string_literalc                 C   s   t }ttjtjffi ||}d}dD ]}| |||||| qttjtjffi ||}d}dD ]}| |||||| q5ttjtjffi ||}d}dD ]}| |||||| qVd S )Nz{0}r   r   r   )rR   r   r	   r
  r   r   r   )r   r   r   r   r   r   r   r   r   test_format;  s   zTestBuiltins.test_formatc                 C   r   r   )r   rC  r   r   r   r   r   test_format_npmM  r  zTestBuiltins.test_format_npmc                 C   s.   t }tdi ||}| }| |t  d S r   rU   r   ZassertIsrT   )r   r   r   r   gr   r   r   test_globalsQ  s   zTestBuiltins.test_globalsc                 C   r   r   )r   rG  r   r   r   r   r   test_globals_npmW  r  zTestBuiltins.test_globals_npmc                 C   s:   t }tdi ||}| | t  | | t  d S rt   rE  )r   r   r   Z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r   )r   rI  r   r   r   r   test_globals_jit_npmc  r  z!TestBuiltins.test_globals_jit_npmc                 C   >   t }ttjffi ||}dD ]}| |||| qd S r  )rW   r   r	   r   r   r  r   r   r   test_hexg  
   zTestBuiltins.test_hexc                 C   r   r   )r   rN  r   r   r   r   r   test_hex_npmn  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 ]G}t|ffi t|}|D ]7}t|j}	|	j|  krI|	jksKn q5| |||||| |jrl| ||| |||  q5q&d S )N)i  rG   r   r   i  )i[i! i@B r   )rZ   r	   int8Zint16r   r   Zuintuint8Zuint16uint32uint64r   nrt_no_pyobj_flagsr   Ziinfokeyrw   rn   r   signed)
r   r   Zsmall_inputsZlarge_inputsargsZtypstypr   vZtp_infor   r   r   test_int_strr  s4    zTestBuiltins.test_int_strc                 C   sb   t }ttjtjffi ||}g d}g d}t||D ]\}}| |||||| qd S )N)z-10110)rH   rA  r      )r`   r   r	   r
  r   r   r   r   r   r   r   r   test_int  r  zTestBuiltins.test_intc                 C   r   r   )r   r`  r   r   r   r   r   test_int_npm  r  zTestBuiltins.test_int_npmc                 C   s   t }tttjdffi ||}| |dd tttjdffi ||}| t |d W d    d S 1 s?w   Y  d S )NrI   )rG   r9   rK   )rG   r9   rG   rG   )re   r   r	   UniTupler   r   r  StopIteration)r   r   r   r   r   r   r   test_iter_next  s     
"zTestBuiltins.test_iter_nextc                 C   r   r   )re  r   r   r   r   r   test_iter_next_npm  r   zTestBuiltins.test_iter_next_npmc                 C   sN   t }| tj ttjffi || W d    d S 1 s w   Y  d S r   )rg   r  r   ZForbiddenConstructr   r	   r   )r   r   r   r   r   r   test_locals  s   "zTestBuiltins.test_localsc                 C   r   r   )rg  r+  r   r   r   r   test_locals_forceobj  r   z!TestBuiltins.test_locals_forceobjc                 C   r   r   )r   rg  r   r   r   r   r   test_locals_npm  r  zTestBuiltins.test_locals_npmc                 C   r4  )Nr   r5  c                 S   s   | d S r6  r   r   r   r   r   r7    r8  z'TestBuiltins.test_map.<locals>.<lambda>r9  )rl   r	   r  r   r:  r   )r   r   r   r;  r   rk   r   r   r   r   test_map  r=  zTestBuiltins.test_mapc                 C   r   r   )r   rj  r   r   r   r   r   test_map_npm  r  zTestBuiltins.test_map_npmc                 C   ^   t tjtjffi ||}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   check_minmax_1     zTestBuiltins.check_minmax_1c                 C      |  t| dS )z
        max(*args)
        N)ro  ro   r&  r   r   r   
test_max_1     zTestBuiltins.test_max_1c                 C   rq  )z
        min(*args)
        N)ro  rx   r&  r   r   r   
test_min_1  rs  zTestBuiltins.test_min_1c                 C   r   r   )rr  r   r   r   r   r   test_max_npm_1  r   zTestBuiltins.test_max_npm_1c                 C   r   r   )rt  r   r   r   r   r   test_min_npm_1  r   zTestBuiltins.test_min_npm_1c                 C   rl  r  rm  rn  r   r   r   check_minmax_2  rp  zTestBuiltins.check_minmax_2c                 C   rq  )z
        max(list)
        N)rw  rq   r&  r   r   r   
test_max_2  rs  zTestBuiltins.test_max_2c                 C   rq  )z
        min(list)
        N)rw  ry   r&  r   r   r   
test_min_2  rs  zTestBuiltins.test_min_2c                 C   r   r   )r   rx  r   r   r   r   r   test_max_npm_2  r  zTestBuiltins.test_max_npm_2c                 C   r   r   )r   ry  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fi  }dtddf}||d d d fD ]}||| qd S )Nr  r   r/   r   )r   rA   r   )Zargtyr   tupvalr   r   r   r   r   check  s
   z*TestBuiltins.check_minmax_3.<locals>.checkrI   )r	   rc  r   Tupler   )r   r   r   r  r   r~  r   check_minmax_3  s   zTestBuiltins.check_minmax_3c                 C   rq  )z
        max(tuple)
        N)r  rr   r&  r   r   r   
test_max_3  rs  zTestBuiltins.test_max_3c                 C   rq  )z
        min(tuple)
        N)r  rz   r&  r   r   r   
test_min_3  rs  zTestBuiltins.test_min_3c                 C   r   r   )r  r   r   r   r   r   test_max_npm_3"  r   zTestBuiltins.test_max_npm_3c                 C   r   r   )r  r   r   r   r   r   test_min_npm_3%  r   zTestBuiltins.test_min_npm_3c                 C   s0   t tjtdffi ||}|ddg d S )Nr   rG   )r   r	   r   r  r   r   r   r   r   r   r   check_min_max_invalid_types(  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  ro   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  ro   r   r   r   r   r   test_max_1_invalid_types_npm0     
"z)TestBuiltins.test_max_1_invalid_types_npmc                 C   r  r   )r  r,  r  rx   r   r   r   r   test_min_1_invalid_types4  r  z%TestBuiltins.test_min_1_invalid_typesc                 C   r  r   )r   r  rx   r   r   r   r   r   test_min_1_invalid_types_npm8  r  z)TestBuiltins.test_min_1_invalid_types_npmc                 C   sR   t tjtjffi ||}d}t||D ]\}}| |||||| qd S )N)FT)r   r	   Zbool_r   r   r   )r   r   r   r   Zoperandsr   r   r   r   r   check_minmax_bool1<  s
   zTestBuiltins.check_minmax_bool1c                 C   r%  r   )r  ro   r&  r   r   r   test_max_bool1C     zTestBuiltins.test_max_bool1c                 C   r%  r   )r  rx   r&  r   r   r   test_min_bool1G  r  zTestBuiltins.test_min_bool1c                 C   s$   t tjffi ||}|d d S NrG   )r   r	   r   r  r   r   r    check_min_max_unary_non_iterableM  s   z-TestBuiltins.check_min_max_unary_non_iterablec                 C   r  r   )r  r,  r  rr   r   r   r   r   test_max_unary_non_iterableQ  r  z(TestBuiltins.test_max_unary_non_iterablec                 C   8   |    | t W d    d S 1 sw   Y  d S r   )r   r  rr   r   r   r   r   test_max_unary_non_iterable_npmU     
"z,TestBuiltins.test_max_unary_non_iterable_npmc                 C   r  r   )r  r,  r  rz   r   r   r   r   test_min_unary_non_iterableY  r  z(TestBuiltins.test_min_unary_non_iterablec                 C   r  r   )r   r  rz   r   r   r   r   test_min_unary_non_iterable_npm]  r  z,TestBuiltins.test_min_unary_non_iterable_npmc                 C   sT   |   }tdi t| W d    n1 sw   Y  | d| t|j d S )Nr   z%s() argument is an empty tupler   )r   r   r   r-  rY   r.  )r   r   	func_namer/  r   r   r   check_min_max_empty_tuplec  s   

z&TestBuiltins.check_min_max_empty_tuplec                 C      |  td d S )Nrn   )r  ru   r   r   r   r   test_max_empty_tuplei  r   z!TestBuiltins.test_max_empty_tuplec                 C   r  )Nrw   )r  r{   r   r   r   r   test_min_empty_tuplel  r   z!TestBuiltins.test_min_empty_tuplec                 C   rM  )N)ir   r   rG   rA  )r}   r   r	   r   r   r  r   r   r   test_octp  rO  zTestBuiltins.test_octc                 C   r   r   )r   r  r   r   r   r   r   test_oct_npmw  r  zTestBuiltins.test_oct_npmc                 C   s   t }tdtdf}t|fi ||}dd }td}| |||||| dd tdD }| |||||| dd tdD }| |||||| d S )	Nr5  r   c                 S      | | S r   r   r   r   r   r   r7    r8  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        )r   r	   r  r   r   r   )r   r   r   r;  r   r   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fi ||}g d}|ddg7 }|D ]}| |||| q!qd S )N)gg      gffffffg      r   皙?      ?g333333?gffffff?r        @gr  )r   r	   r   r   r   r   )r   r   r   tpr   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fi ||}dD ]+}dD ]&}| j|||||||d || |}| j|| ||| ||d q&q"qd S )Nr   exact)r   r  g      ?g      ?r  g      ?g      ?r  g      ?g      @r/   g      @g      )@g      .@g     6@)r   r   rG   rH   r   )r   r	   r   r   r   r   r   )	r   r   r   r  r   r   r   r   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fi ||}td}| |||| dd tdD }| |||| dd tdD }| |||| d S )Nr   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  )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||d|fS r   )r   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   rG   rH                 @    rH   rI   rK   d                    i@)r   r   r   r   rQ  r   r   onestlr   r   r   rX    s   z#TestBuiltins.test_sum.<locals>.argsr  rH   rI   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  rH   rI   rM   rK   r  )rK   rK   )rK   r  ir  r  )	r   r   r   r   rQ  rS  r   r   r  r  r  r   r   args_kws  s   (
z'TestBuiltins.test_sum.<locals>.args_kwsr   r  rJ   r   )r   r   r   r   r   py_funcr   rT  rS  rR  assertEqualr   )	r   sum_default	sum_kwargr  rX  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   r   r   r  r   r2  r-  rQ   rY   r.  r  )r   r  r  r0  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 )NTrK  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 )NTrK  c                     s   |  }  |  | d S r   )r   )rX  r   r   r   r   r   r   r  $  s   z+TestBuiltins.test_type_unary.<locals>.checkr  rH   rG   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_zip.  r   zTestBuiltins.test_zipc                 C   r   r   )r  r   r   r   r   r   test_zip_npm1  r   zTestBuiltins.test_zip_npmc                 C   r%  r   )r   r   r&  r   r   r   
test_zip_14  r   zTestBuiltins.test_zip_1c                 C   r   r   )r  r   r   r   r   r   test_zip_1_npm7  r   zTestBuiltins.test_zip_1_npmc                 C   r%  r   )r   r   r&  r   r   r   
test_zip_3:  r   zTestBuiltins.test_zip_3c                 C   r   r   )r  r   r   r   r   r   test_zip_3_npm=  r   zTestBuiltins.test_zip_3_npmc                 C   r%  r   )r   r   r&  r   r   r   
test_zip_0@  r   zTestBuiltins.test_zip_0c                 C   r   r   )r  r   r   r   r   r   test_zip_0_npmC  r   zTestBuiltins.test_zip_0_npmc                 C   rq  )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_exhaustedF  s   z%TestBuiltins.test_zip_first_exhaustedc                 C   r   r   )r  rU  r   r   r   r   test_zip_first_exhausted_npmM  r   z)TestBuiltins.test_zip_first_exhausted_npmc                 C   Z   g d}|D ]$\}}t |t |f}t|fi tt}|||}| |t|| qd S N))rH   rI   )r   rI   )rH   r0   )y               @r  )r   r   r   r   r   r   rX  r   r   r;  r   rr   r   r   test_pow_op_usecaseP     
z TestBuiltins.test_pow_op_usecasec                 C   r  r  )r   r   r   r   r   r  r   r   r   test_pow_usecase^  r  zTestBuiltins.test_pow_usecasec                 C   s&   t  |}| }| }| || d S r   )r   r   )r   r   r   r   gotr   r   r   _check_min_maxl  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   franget  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   r7  |      zTTestBuiltins.test_min_max_iterable_input.<locals>.sample_functions.<locals>.<lambda>c                      s    t ddS )NrJ   r  r  r   r  r   r   r7  }  s    c                      s    t dddS )Nr  r   r  r   r  r   r   r7  ~      c                          g dS )N)gffffff@g      @g@r   r   r  r   r   r7    r  c                      s    ddgS )N)rI   rJ   r   r   r   r  r   r   r7    r  c                      s    dddS )Nr   gffffff
@r  r   r   )r  r  r   r   r7    r  c                      s    t jt j t jt jgS r   )r   r   rC   r   r  r   r   r7    s    c                      r  )N))rI   rb  )rH   r   r   r  r   r   r7    r  r   r  r  r  r   sample_functions{  s   zBTestBuiltins.test_min_max_iterable_input.<locals>.sample_functionsr  )r   rw   r  rn   )r   r  fnr   r  r   test_min_max_iterable_inputr  s   

z(TestBuiltins.test_min_max_iterable_inputN)l__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*  r1  r3  r<  r>  r?  r@  rB  rC  rD  rG  rH  rI  rL  rN  rP  r[  r`  ra  re  rf  rg  rh  ri  rj  rk  ro  rr  rt  ru  rv  rw  rx  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  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   [  s    		

+
	

@r   c                   @      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)rG   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)rG   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                   @   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d Zdd Zdd Z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 )NTrK  rI   r  ZHellos   worldr   r   )rG   rI   rI   rI   rG   rH   )rG   ZnbarH   )r   r   r   r  r   r   r   ZinputsZinptr   r  r   r   r   test_isinstance  s$   
z%TestIsinstanceBuiltin.test_isinstancec                 C   &   t }tdd|}| | |  d S rJ  )r   r   r  r  r   r   r   test_isinstance_dict  s   z*TestIsinstanceBuiltin.test_isinstance_dictc                 C   s*   t }tdd|}| |d|d d S )NTrK  rI   )r   r   r  r  r   r   r   test_isinstance_issue9125  s   z/TestIsinstanceBuiltin.test_isinstance_issue9125c              
   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 )NTrK  rG   r   rH   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  rJ  )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 )NTrK  g333333@&Cannot infer Numba type of Python typer  )	r   r   
assertTruer  r   r2  r-  rY   r.  )r   r   r   r0  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   r2  r-  rY   r.  )r   fnsr  r0  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                    
   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_argrG   gffffff@              @5rL   )rM      8r  )r      r  )   r   y              ,@)r  r_           rJ   )r^   rA   r(   rY   r   r   r   r   r   r   rQ  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   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 r  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   r2  assertRegexrY   r.  )r   r$  r0  r0  r1  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   intpr^   r   r   r   r   r   :  r  zITestIsinstanceBuiltin.test_python_numpy_scalar_alias_problem.<locals>.fooTFc                   S   s   t dtjS r  )r   r   r8  r   r   r   r   barA     zITestIsinstanceBuiltin.test_python_numpy_scalar_alias_problem.<locals>.barr   r  r  )r   r   r9  r   r   r   &test_python_numpy_scalar_alias_problem5  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   rY   r(   r   r   r   r   r   r   r   r   r   L  s   



z4TestIsinstanceBuiltin.test_branch_prune.<locals>.foo)r
  y      ?       @)r   rI   r&  )r   r  r  )r   r   r   r   r  r   r   r   test_branch_pruneH  s   


z'TestIsinstanceBuiltin.test_branch_prunec                    s   t dd  t fdd}d}| |||| | tj}|d W d    n1 s0w   Y  t|j}| 	d| | 	d| d S )	Nc                 S   r  r   r   r   r   r   r   r   ^     zBTestIsinstanceBuiltin.test_branch_prune_and_bind_to_sig.<locals>.fc                    s   t | tr	 |  S  | S r   r   r   r   r   r   r   call_fb     
zGTestIsinstanceBuiltin.test_branch_prune_and_bind_to_sig.<locals>.call_fr   rG   zCannot bindz+TypeError: missing a required argument: 'y')
r   r   r  r  r  r   r2  rY   r.  r-  )r   rB  r   r/  r0  r   rA  r   !test_branch_prune_and_bind_to_sig\  s   



z7TestIsinstanceBuiltin.test_branch_prune_and_bind_to_sigc                    sH   t dd  t dd t fdd}d}| |||| d S )Nc                 S   r  r   r   r   r   r   r   r   ~  r?  zITestIsinstanceBuiltin.test_branch_prune_non_tuples_as_star_arg.<locals>.fc                 S      | S r   r   r   r   r   r   rF       zITestIsinstanceBuiltin.test_branch_prune_non_tuples_as_star_arg.<locals>.gc                    s   t | tr	 |  S | S r   r@  r   r   rF  r   r   rB    rC  zNTestIsinstanceBuiltin.test_branch_prune_non_tuples_as_star_arg.<locals>.call_frG   r   r   r  r  )r   rB  r   r   rG  r   (test_branch_prune_non_tuples_as_star_arg{  s   


z>TestIsinstanceBuiltin.test_branch_prune_non_tuples_as_star_argc                    sF   t dd  t dd dt fdd}| | |  d S )Nc                 S   r  r   r   r   r   r   r   r     r?  zFTestIsinstanceBuiltin.test_branch_prune_literal_as_star_arg.<locals>.fc                 S   rE  r   r   r   r   r   r   rF    rF  zFTestIsinstanceBuiltin.test_branch_prune_literal_as_star_arg.<locals>.grG   c                     s   } t | tr |  S | S r   r@  r   r   rF  oner   r   rB    s   
zKTestIsinstanceBuiltin.test_branch_prune_literal_as_star_arg.<locals>.call_frH  )r   rB  r   rJ  r   %test_branch_prune_literal_as_star_arg  s   

z;TestIsinstanceBuiltin.test_branch_prune_literal_as_star_argN)r  r  r  r  r  r  r  r  r  r  r2  r7  r<  r>  rD  rI  rL  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   0   t dd }dD ]}| |||| qd S )Nc                 S   s   t | d}| S )N__hash__r  )r   attrr   r   r   r     s   
z7TestGetattrBuiltin.test_getattr_func_retty.<locals>.foorG   Q@rK   rL   rM   r   r   r  r   r   r   r   r   r   test_getattr_func_retty  s
   
z*TestGetattrBuiltin.test_getattr_func_rettyc                 C   sB   t dd }tdD ]}td| }| |||| q
d S )Nc                 S   s
   t | dS )NndimrP  r   r   r   r   r     r  z8TestGetattrBuiltin.test_getattr_value_retty.<locals>.foorI   rb  )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   "   t dd }| | |  d S )Nc                   S   s
   t tdS )Npir  r   r   r   r   r   r     r  z7TestGetattrBuiltin.test_getattr_module_obj.<locals>.foorU  r   r   r   r   r   test_getattr_module_obj  s   
z*TestGetattrBuiltin.test_getattr_module_objc                 C   sX   t dd }| tj}|  W d    n1 sw   Y  d}| |t|j d S )Nc                   S   s   t tddS )NcosrG   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   r2  r-  rY   r.  r   r   r/  r0  r   r   r   'test_getattr_module_obj_not_implemented  s   
z:TestGetattrBuiltin.test_getattr_module_obj_not_implementedc                    sd   d t  fdd}| t}|d W d    n1 sw   Y  | d  dt|j d S )N__not_a_valid_attr__c                    r   r   rP  r   Zinvalid_attrr   r   r     r  zCTestGetattrBuiltin.test_getattr_raises_attribute_error.<locals>.foogGz?z'float64' has no attribute '')r   r  AttributeErrorr-  rY   r.  )r   r   r/  r   rd  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 )Nrc  rP  )r   defaultr   r   r   r     r:  z9TestGetattrBuiltin.test_getattr_with_default.<locals>.foorR  )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   s\   t dd }| tj}|dd W d    n1 sw   Y  d}| |t|j d S )Nc                 S   r&   r   rP  )r   Znonliteral_strr   r   r   r     r  z<TestGetattrBuiltin.test_getattr_non_literal_str.<locals>.foorG   rO  z(argument 'name' must be a literal stringr`  ra  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      dS )Ni90  r   r   r   r   r   default_hash  rF  zPTestGetattrBuiltin.test_getattr_no_optional_type_generated.<locals>.default_hashc                     s   t tdd } |  S )NrG   rc  )r  r   r  )Z	hash_funcrm  r   r   r     s   zGTestGetattrBuiltin.test_getattr_no_optional_type_generated.<locals>.foorU  r]  r   rn  r   'test_getattr_no_optional_type_generated   s
   
z:TestGetattrBuiltin.test_getattr_no_optional_type_generatedN)r  r  r  rW  rY  r^  rb  rg  rj  rk  ro  r   r   r   r   rM    s    

	
rM  c                   @   r   )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 )NrO  rc  hasattrr   r   r   r   r     s   z,TestHasattrBuiltin.test_hasattr.<locals>.foorG   rS  rT  rJ   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   sZ   t dd }| tj}|d W d    n1 sw   Y  d}| |t|j d S )Nc                 S   s    | dkrd}nd}t d| d S )NrI   rO  __str__rG   rq  )predrQ  r   r   r   r   "  s   z;TestHasattrBuiltin.test_hasattr_non_const_attr.<locals>.foorL   zGhasattr() cannot determine the type of variable "attr" due to a branch.)r   r  r   ZNumbaTypeErrorr-  rY   r.  ra  r   r   r   test_hasattr_non_const_attr  s   

z.TestHasattrBuiltin.test_hasattr_non_const_attrN)r  r  r  ru  rx  r   r   r   r   rp    s    rp  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   rZ  )Nc                   S   rS   r   rX   r   r   r   r   r   7  s   z3TestStrAndReprBuiltin.test_str_default.<locals>.foor;  r]  r   r   r   test_str_default5  s   
z&TestStrAndReprBuiltin.test_str_defaultc                 C   s*   t dd }d}| |||| d S )Nc                 S   s
   t | dS )N)objectrX   r   r   r   r   r   ?  r  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   r   r   rX   r   r   r   r   r   H  r?  z<TestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.foozthis is the dummy object strc                        S r   r   r   string_reprr   r   r7  O      zATestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.<lambda>rv  c                    r  )Nc                    r~  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_stringQ     zHTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_string__repr__c                 S   s   dd }|S )Nc                 S   rl  )NzSHOULD NOT BE CALLEDr   r  r   r   r   r   Y  r  zTTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_repr.<locals>.implr   r  r   r   r   ol_dummy_reprW  s   zFTestStrAndReprBuiltin.test_str_calls_dunder_str.<locals>.ol_dummy_repr)r   make_dummy_typerv  r   r  r  )r   r   r  	DummyTyper  r  r  r   r  r   test_str_calls_dunder_strF  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   r   r   rX   r   r   r   r   r   a  r?  z>TestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.foozthis is the dummy object reprc                    r~  r   r   r  r  r   r   r7  h  r  zCTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.<lambda>r  c                    r  )Nc                    r~  r   r   r  r  r   r   r   l  r  zVTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.ol_dummy_repr.<locals>.implr   r  r  r   r   r  j  r  zHTestStrAndReprBuiltin.test_str_falls_back_to_repr.<locals>.ol_dummy_repr)r   r  r  r   r  r  )r   r   r  r  r  r  r   r  r   test_str_falls_back_to_repr_  s   
z1TestStrAndReprBuiltin.test_str_falls_back_to_reprc                 C   rN  )Nc                 S   s   t | | fS r   )reprr   r   r   r   r   s  r:  z,TestStrAndReprBuiltin.test_repr.<locals>.foo)abcF{   r;  rV  r   r   r   	test_reprr  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                    r~  r   r   r  r  r   r   r7    r  z:TestStrAndReprBuiltin.test_repr_fallback.<locals>.<lambda>c                    s"   |j |j  }|j |dS rt   )ZpyapiZunserializeZserialize_objectZcall_function_objargs)rY  objr   Zclazobj)r  r   r   	box_dummy  s   z;TestStrAndReprBuiltin.test_repr_fallback.<locals>.box_dummyc                 S   r   r   rX   r   r   r   r   r     r?  z5TestStrAndReprBuiltin.test_repr_fallback.<locals>.foo)r  r   r  r   r   r  r  )r   r  r  r  r   r   )r  r  r   test_repr_fallbackz  s   
z(TestStrAndReprBuiltin.test_repr_fallbackN)	r  r  r  rz  r}  r  r  r  r  r   r   r   r   ry  3  s    	ry  __main__r  )^r   r~   sysr   collectionsr   numpyr   ZunittestwarningsZnumbar   r   r   r   Z
numba.corer   r	   r
   Znumba.tests.supportr   r   r   r   Znumba.core.extendingr   r   r   r+  r   rU  r   r    r#   r%   r)   r,   r7   r:   r<   r@   rB   rP   rR   rU   rW   rZ   r`   re   rg   ri   rl   ro   rq   rr   ru   rx   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  rM  rp  ry  r  mainr   r   r   r   <module>   s    



	
      7!  `$
^