U
    9%e4                    @   sN  d dl Z d dlZd dlZd dlZd dlZd dlZ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mZmZmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlm Z  d d	l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d d
l(m)Z) d dl*Z*d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZEmFZF zd dlGmH  mIZJ W n eKk
r   dZJY nX G dd deLZMG dd dejNZOeOdZPeM ZQe,ReMdd ZSe/eOejTdd ZUdd ZVe4eOe3jW e6eOdd ZXdd ZYeYd\ZZZ[Z\e6eZdd  Z]dd!d"Z^d#d$ Z_e-e^e_Z`e.e^e.e^ejad%d& Zbe.e^ejcd'd( ZdeAG d)d* d*e?Zee.d+eOd,d- Zfd.d/ Zgd0d1 Zhd2d3 Zie0egd4d5 Zje0egd6d7 Zke0eld8d9 Zme0ejnd:d; Zoe0ejpd<d= Zqe0ejrd>d? Zse0ejtd@dA ZudBdC ZvdDdE Zwe0ejxdFdG ZydHdI ZzdJdK Z{dLdM Z|dNdO Z}dPdQ Z~e2eOdRdSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl Zdmdn Ze0edodp Zdqdr Zdsdt Zdudv ZeBeG dwdx dxeCZdydz ZG d{d| d|eLZG d}d~ d~ejZe4eG dd de3jWZeBeee e edd Ze0e
jdd ZG dd de"ZG dd de"ZG dd de"Zdd Ze'G dd de"Zdd ZG dd de"ZG dd de*j"ZG dd de*j"Ze2eOdddiddd Ze2eOdddiddd Ze1eOdddiddd Ze1eOdddiddd ZG dd de"ZG dd de"Zdd Ze'G dd de"ZG dd de"ZG dd de"ZG dd de"ZG dd de"ZedkrJe*  dS )    N)ir)njitjit	vectorizeguvectorizeobjmode)typeserrorstypingcompilercgutils)type_inference_stage)
cpu_target)compile_isolated)lower_constant)TestCasecaptured_stdouttemp_directoryoverride_configrun_in_new_process_in_cache_dirskip_if_typeguard)LoweringError)typeof_impltype_callablelower_builtin
lower_castoverloadoverload_attributeoverload_methodmodelsregister_modelboxunboxNativeValue	intrinsic
_Intrinsicregister_jitableget_cython_function_address	is_jittedoverload_classmethod)ConcreteTemplate	signatureinferinfer_globalAbstractTemplate   )IndexSeriesc                   @   s   e Zd ZdS )MyDummyN__name__
__module____qualname__ r7   r7   Y/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_extending.pyr2   K   s   r2   c                   @   s   e Zd Zdd ZdS )MyDummyTypec                 C   s"   t |tjrddlm} |jS d S )Nr   )
Conversion)
isinstancer   NumberZnumba.core.typeconvr:   safe)selfcontexttotyr:   r7   r7   r8   can_convert_toP   s    zMyDummyType.can_convert_toN)r4   r5   r6   rA   r7   r7   r7   r8   r9   O   s   r9   mydummyc                 C   s   t S N)mydummy_typevalcr7   r7   r8   typeof_mydummy[   s    rH   c                 C   s   |  |dS )z2
    Implicit conversion from MyDummy to int.
    *   )get_constant)r?   builderZfromtyr@   rF   r7   r7   r8   mydummy_to_number`   s    rL   c                   C   s   t S rC   )rB   r7   r7   r7   r8   	get_dummyh   s    rM   c                 C   s   t |j S rC   r#   r?   get_dummy_valuetypobjrG   r7   r7   r8   unbox_indexo   s    rS   c                    sX   G dd dt }G dd dtj}||  t| fdd}t|tj || fS )Nc                   @   s   e Zd ZdS )z(base_dummy_type_factory.<locals>.DynTypeNr3   r7   r7   r7   r8   DynTypey   s   rT   c                   @   s   e Zd ZdS )z,base_dummy_type_factory.<locals>.DynTypeTypeNr3   r7   r7   r7   r8   DynTypeType|   s   rU   c                    s    S rC   r7   rE   dyn_type_typer7   r8   rH      s    z/base_dummy_type_factory.<locals>.typeof_mydummy)objectr   Opaquer   registerr    r   OpaqueModel)namerT   rU   rH   r7   rV   r8   base_dummy_type_factoryx   s    r]   mydummy2c                 C   s   t |j S rC   rN   rP   r7   r7   r8   unbox_index2   s    r_   c                 C   s   t d S rC   NotImplementedErrorxr7   r7   r8   func1   s    rd   c                 C   s   ddd}|S )Nc                 S   s(   | d t jfkrt jS t| t jr$| S d S rC   )r   noneint32r;   Floatrb   r7   r7   r8   typer   s    ztype_func1_.<locals>.typer)Nr7   )r?   rh   r7   r7   r8   type_func1_   s    
ri   c                 C   s   |  |jdS NrI   )rJ   return_type)r?   rK   sigargsr7   r7   r8   func1_nullary   s    rn   c                 C   s   dd }|  ||||S )Nc                 S   s   t d|  S )N   )mathsqrtrb   r7   r7   r8   
func1_impl   s    zfunc1_unary.<locals>.func1_impl)Zcompile_internal)r?   rK   rl   rm   rr   r7   r7   r8   func1_unary   s    rs   c                   @   s   e Zd ZdZeejegZdS )
PrintDummy
print_itemN)	r4   r5   r6   keyr+   r   re   rD   Zcasesr7   r7   r7   r8   rt      s   rt   ru   c                 C   s<   |\}|  |}||d}|| || |  S )Nzhello!)Zget_python_apiZunserializeZserialize_objectZprint_objectZdecrefrO   )r?   rK   rl   rm   rc   pyapiZstrobjr7   r7   r8   print_dummy   s    


rx   c                 C   s   t d S rC   r`   condrc   yr7   r7   r8   where   s    r|   c                 C   s   t | ||S )z8
    Wrap np.where() to allow for keyword arguments
    )npr|   ry   r7   r7   r8   np_where   s    r~   c                 C   s   t | ||dS )N)r{   rc   )r|   ry   r7   r7   r8   
call_where   s    r   c                 C   sT   t | tjrP|j|jkr"tdtdd | ||fD rDdd }ndd }|S dS )z'
    Implement where() for arrays.
    "x and y should have the same dtypec                 s   s   | ]}|j d kV  qdS )CN)Zlayout).0tyr7   r7   r8   	<genexpr>   s     z(overload_where_arrays.<locals>.<genexpr>c           
      S   st   | j }|j |ks|j |kr"tdt|}| j}|j}|j}|j}t| jD ] }	||	 rb||	 n||	 ||	< qN|S )zM
                Fast implementation for C-contiguous arrays
                %all inputs should have the same shape)shape
ValueErrorr}   
empty_likeZflatrangesize)
rz   rc   r{   r   rescfZxfZyfrfir7   r7   r8   
where_impl   s    
z)overload_where_arrays.<locals>.where_implc                 S   s\   | j }|j |ks|j |kr"tdt|}t| D ] \}}|rJ|| n|| ||< q6|S )zI
                Generic implementation for other arrays
                r   )r   r   r}   r   Zndenumerate)rz   rc   r{   r   r   idxrG   r7   r7   r8   r      s    
N)r;   r   Arraydtyper	   TypingErrorallrz   rc   r{   r   r7   r7   r8   overload_where_arrays   s    

r   c                 C   s.   t | tjs*||krtddd }|S dS )z(
    Implement where() for scalars.
    z!x and y should have the same typec                 S   s"   | r|n|}t |}||d< |S )z@
            Scalar where() => return a 0-dim array
            r7   )r}   r   )rz   rc   r{   Zscalarrr7   r7   r8   r     s    
z*overload_where_scalars.<locals>.where_implN)r;   r   r   r	   r   r   r7   r7   r8   overload_where_scalars  s
    

r   c                 C   s   t | trdd }|S d S )Nc                 S   s   dS )N   r7   argr7   r7   r8   len_impl.  s    z$overload_len_dummy.<locals>.len_implr;   r9   )r   r   r7   r7   r8   overload_len_dummy*  s    
r   c                 C   s,   t | ttfr(t |ttfr(dd }|S d S )Nc                 S   s   dS rj   r7   arg1arg2r7   r7   r8   dummy_add_impl:  s    z*overload_add_dummy.<locals>.dummy_add_implr;   r9   MyDummyType2)r   r   r   r7   r7   r8   overload_add_dummy4  s     r   c                 C   s&   t | tr"t |tjr"dd }|S d S )Nc                 S   s   t d| | d S )NdelprintrR   r   r7   r7   r8   dummy_delitem_implD  s    z2overload_dummy_delitem.<locals>.dummy_delitem_implr;   r9   r   Integer)rR   r   r   r7   r7   r8   overload_dummy_delitem@  s    r   c                 C   s&   t | tr"t |tjr"dd }|S d S )Nc                 S   s   |d S )N{   r7   r   r7   r7   r8   dummy_getitem_implN  s    z2overload_dummy_getitem.<locals>.dummy_getitem_implr   )rR   r   r   r7   r7   r8   overload_dummy_getitemJ  s    r   c                 C   s4   t t| tt|tjt|tjgr0dd }|S d S )Nc                 S   s   t || d S rC   r   rR   r   rF   r7   r7   r8   dummy_setitem_impl^  s    z2overload_dummy_setitem.<locals>.dummy_setitem_impl)r   r;   r9   r   r   )rR   r   rF   r   r7   r7   r8   overload_dummy_setitemT  s    

r   c                 C   s   t | |S rC   operatoraddr   r7   r7   r8   call_add_operatord  s    r   c                 C   s   | | S rC   r7   r   r7   r7   r8   call_add_binoph  s    r   c                 C   s,   t | ttfr(t |ttfr(dd }|S d S )Nc                 S   s   dS rj   r7   r   r7   r7   r8   dummy_iadd_implr  s    z,overload_iadd_dummy.<locals>.dummy_iadd_implr   )r   r   r   r7   r7   r8   overload_iadd_dummyl  s     r   c                 C   s   t | |S rC   r   r   r7   r7   r8   call_iadd_operatorx  s    r   c                 C   s   | |7 } | S rC   r7   r   r7   r7   r8   call_iadd_binop|  s    r   c                 C   s
   | |= d S rC   r7   r   r7   r7   r8   call_delitem  s    r   c                 C   s   | | S rC   r7   r   r7   r7   r8   call_getitem  s    r   c                 C   s   || |< d S rC   r7   r   r7   r7   r8   call_setitem  s    r   lengthc                 C   s   dd }|S )Nc                 S   s   t | S rC   lenr   r7   r7   r8   imp  s    z#overload_method_length.<locals>.impr7   )r   r   r7   r7   r8   overload_method_length  s    r   c                 C   s   |   S rC   )r   rb   r7   r7   r8   cache_overload_method_usecase  s    r   c                   C   s   t  S rC   rd   r7   r7   r7   r8   call_func1_nullary  s    r   c                 C   s   t | S rC   r   rb   r7   r7   r8   call_func1_unary  s    r   c                 C   s   t | S rC   r   rb   r7   r7   r8   len_usecase  s    r   c                 C   s   t |  d S rC   r   rb   r7   r7   r8   print_usecase  s    r   c                 C   s   | | S rC   r7   )rc   rv   r7   r7   r8   getitem_usecase  s    r   c                 C   s   t t | S rC   )r}   cossinrb   r7   r7   r8   npyufunc_usecase  s    r   c                 C   s   | j S rC   )_datarb   r7   r7   r8   get_data_usecase  s    r   c                 C   s   | j S rC   )_indexrb   r7   r7   r8   get_index_usecase  s    r   c                 C   s   | j S rC   )Zis_monotonic_increasingrb   r7   r7   r8   is_monotonic_usecase  s    r   c                 C   s
   t | |S rC   )r1   )dataindexr7   r7   r8   make_series_usecase  s    r   c                 C   s   |  ||S rC   )Zclip)rc   lohir7   r7   r8   clip_usecase  s    r   c                   C   s   t S rC   r}   r7   r7   r7   r8   return_non_boxable  s    r   c                  C   s   dd } | S )Nc                   S   s   t S rC   r   r7   r7   r7   r8   r     s    z(overload_return_non_boxable.<locals>.impr7   )r   r7   r7   r8   overload_return_non_boxable  s    r   c                 C   s   t  }|| S rC   )r   arange)szmodr7   r7   r8   non_boxable_ok_usecase  s    r   c                   C   s   t  S rC   )r   r7   r7   r7   r8   non_boxable_bad_usecase  s    r   c                 C   s   d S rC   r7   )fr7   r7   r8   mk_func_input  s    r   c                   @   s   e Zd Zdd ZdS )MkFuncTypingc                 C   s$   t |d tjstttjf| S Nr   )r;   r   MakeFunctionLiteralAssertionErrorr+   re   )r>   rm   kwsr7   r7   r8   generic  s    zMkFuncTyping.genericN)r4   r5   r6   r   r7   r7   r7   r8   r     s   r   c                   C   s   t dd  d S )Nc                 S   s   | S rC   r7   ar7   r7   r8   <lambda>      z#mk_func_test_impl.<locals>.<lambda>)r   r7   r7   r7   r8   mk_func_test_impl  s    r   c                   @   s   e Zd ZdS )MyClassNr3   r7   r7   r7   r8   r     s   r   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	CallableTypeRefc                    s.   || _ i | _g | _tt| d| j  d S )Nzcallable_type_ref[{}])instance_typesig_to_impl_keycompiled_templatessuperr   __init__format)r>   r   	__class__r7   r8   r     s    zCallableTypeRef.__init__c              	   C   st   d }|j t|  D ]\}z|||}W n tk
r:   Y qX t|di }||kr|| | j|< | j|  qpq|S )NZ_compiled_overloads)Z
_functionstypeapply	Exceptiongetattrr   r   append)r>   r?   rm   r   Zres_sigtemplateZcompiled_ovldsr7   r7   r8   get_call_type  s    zCallableTypeRef.get_call_typec                 C   s   t | j }|dfS )NT)listr   keys)r>   Zsigsr7   r7   r8   get_call_signatures  s    z#CallableTypeRef.get_call_signaturesc                 C   s
   | j | S rC   )r   )r>   rl   r7   r7   r8   get_impl_key  s    zCallableTypeRef.get_impl_key)r4   r5   r6   r   r   r  r  __classcell__r7   r7   r   r8   r     s   r   c                   @   s   e Zd Zdd ZdS )CallableTypeModelc                 C   s   t j| || d S rC   )r   r[   r   )r>   ZdmmZfe_typer7   r7   r8   r     s    zCallableTypeModel.__init__N)r4   r5   r6   r   r7   r7   r7   r8   r    s   r  c                 C   s   |   S rC   )rO   )r?   rK   r   Zpyvalr7   r7   r8   constant_callable_typeref"  s    r  c                 C   s   t | trdd }|S d S )Nc                 S   s   dS )N   >[= r7   rR   r7   r7   r8   r   .  s    zoverload_np_exp.<locals>.impr   rR   r   r7   r7   r8   overload_np_exp*  s    
r
  c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestLowLevelExtendingz4
    Test the low-level two-tier extension API.
    c                 C   sV   t }tdd|}| | d t}tdd|}| |d d | |dd d S )NTnopythonrI         2@      @)r   r   assertPreciseEqualr   r>   pyfunccfuncr7   r7   r8   
test_func1=  s    z TestLowLevelExtending.test_func1c                 C   sF   t }t|d}| | d t}t|tjf}| |dd d S )Nr7   rI   r  r  )r   r   r  entry_pointr   r   float64r>   r  crr7   r7   r8   test_func1_isolatedF  s    
z)TestLowLevelExtending.test_func1_isolatedc                 C   s   |  tt | t d S rC   )assertIs
type_func1ri   assertIsNotNoner>   r7   r7   r8   !test_type_callable_keeps_functionN  s    z7TestLowLevelExtending.test_type_callable_keeps_functionc                 C   s&   t }t|dtj}| | d d S )Nr7   g      E@)rM   r   r   r  r  r  r  r7   r7   r8   test_cast_mydummyR  s    z'TestLowLevelExtending.test_cast_mydummyc                 C   sX   t t}tj}tj}|  |  t|||dd}| t	dd |j
 D  dS )zFmake sure make_function is passed to typer class as a literal
        r7   Nc                 s   s   | ]}t |tjV  qd S rC   )r;   r   r   )r   r   r7   r7   r8   r   b  s   z=TestLowLevelExtending.test_mk_func_literal.<locals>.<genexpr>)r   Zrun_frontendr   r   Ztyping_contextZtarget_contextrefreshr   
assertTrueanytypemapvalues)r>   Ztest_ir	typingctxZ	targetctxZ
typing_resr7   r7   r8   test_mk_func_literalW  s    

z*TestLowLevelExtending.test_mk_func_literalN)	r4   r5   r6   __doc__r  r  r  r  r&  r7   r7   r7   r8   r  5  s   	r  c                   @   s`   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdS )TestPandasLikeze
    Test implementing a pandas-like Index object.
    Also stresses most of the high-level API.
    c                 C   s0   t td}tddt}| ||d d S )N   Tr  )r0   r}   r   r   r   r  )r>   r   r  r7   r7   r8   test_index_leno  s    zTestPandasLike.test_index_lenc                 C   sh   t tdddg}tddt}| ||dd ||tdd }| |t  | t	|ddg d S )NrI      Tr  r/   )
r0   r}   rf   r   r   r  sliceassertIsInstanceassertEqualr   r>   r   r  iir7   r7   r8   test_index_getitemt  s    z!TestPandasLike.test_index_getitemc                 C   sV   t tdddg}tddt}||}| |t  | |jtt	|j dS )z7
        Check Numpy ufunc on an Index object.
        rI   r+  r,  Tr  N)
r0   r}   rf   r   r   r.  r  r   r   r   r0  r7   r7   r8   test_index_ufunc|  s
    zTestPandasLike.test_index_ufuncc                 C   s<   t tdddg}tddt}||}| ||j d S )NrI   r+  r,  Tr  )r0   r}   rf   r   r   r  r   )r>   r   r  r   r7   r7   r8   test_index_get_data  s    z"TestPandasLike.test_index_get_datac                 C   s`   t ddt}dddgdfdddgdfg dffD ]*\}}tt|}||}| || q0d S )NTr  r+  rI      F)r   r   r0   r}   rf   r/  )r>   r  r$  expectedr   gotr7   r7   r8   test_index_is_monotonic  s    z&TestPandasLike.test_index_is_monotonicc                 C   sL   t tdddg}ttdddg|}tddt}| ||d d S 	Nro      r)        ?      @      @Tr  )r0   r}   rf   r1   r  r   r   r  )r>   r   sr  r7   r7   r8   test_series_len  s    zTestPandasLike.test_series_lenc                 C   s`   t tdddg}ttdddg|}tddt}||}| |t  | |j	|j	 d S r9  )
r0   r}   rf   r1   r  r   r   r.  r  r   )r>   r   r>  r  r7  r7   r7   r8   test_series_get_index  s    z$TestPandasLike.test_series_get_indexc                 C   s   t tdddg}ttdddg|}tddt}||}| |t | |jt  | 	|jj
|j
 | |jtt|j d	S )
z8
        Check Numpy ufunc on an Series object.
        rI   r+  r,  r/   ro   r)  Tr  N)r0   r}   rf   r1   int64r   r   r.  r   r  r   r  _valuesr   r   r>   r   r>  r  ssr7   r7   r8   test_series_ufunc  s    z TestPandasLike.test_series_ufuncc                 C   sz   t tdddg}tdddg}tddt}|||}| |t | |jt  | 	|jj
|j
 | 	|j| d S )	NrI   r+  r,  r;  r<  r=  Tr  )r0   r}   rf   r  r   r   r.  r1   r   r  r   rB  )r>   r   dr  r7  r7   r7   r8   test_series_constructor  s    
z&TestPandasLike.test_series_constructorc                 C   s   t tdddg}ttdddg|}tddt}||d	d
}| |t | |jt  | 	|jj
|j
 | |jtd	d
dg d S )NrI   r+  r,  r;  r<  r=  Tr  g?g      @)r0   r}   rf   r1   r  r   r   r.  r   r  r   r  rB  rC  r7   r7   r8   test_series_clip  s    zTestPandasLike.test_series_clipN)r4   r5   r6   r'  r*  r2  r3  r4  r8  r?  r@  rE  rG  rH  r7   r7   r7   r8   r(  i  s   

r(  c                   @   s   e Zd 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d Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*S )+TestHighLevelExtendingz+
    Test the high-level combined API.
    c              	      s   t }tdd|  fdd}|dddd |ddd |tdddgtd	d
dgtdddg tj$} tg tg tg  W 5 Q R X 	dt
|j dS )z>
        Test implementing a function with @overload.
        Tr  c                     s$   t | |} | |}|| d S rC   )r~   r  )rm   kwargsr6  r7  r  r>   r7   r8   check  s    

z0TestHighLevelExtending.test_where.<locals>.checkr)  r+  )rc   rz   r{   Fr/   ro   r:  r5  r   N)r   r   r}   Zbool_rf   assertRaisesr	   r   rA  assertInstr	exception)r>   r  rL  raisesr7   rK  r8   
test_where  s     ( z!TestHighLevelExtending.test_wherec                 C   s8   t ddt}| |t d | |ddgd dS )zN
        Test re-implementing len() for a custom type with @overload.
        Tr  r   r:  r5  ro   N)r   r   r  r2   r>   r  r7   r7   r8   test_len  s    zTestHighLevelExtending.test_lenc              	   C   s@   t ddt}t " |t  | tj d W 5 Q R X dS )zP
        Test re-implementing print() for a custom type with @overload.
        Tr  zhello!
N)r   r   r   r2   r/  sysstdoutgetvaluerS  r7   r7   r8   
test_print  s    
z!TestHighLevelExtending.test_printc                 C   sT   t }tdd|}| |ddd | |t t d | |t t d dS 	zW
        Test re-implementing operator.add() for a custom type with @overload.
        Tr  r/   ro   r)  rI   T   N)r   r   r  MyDummy2r2   r  r7   r7   r8   test_add_operator  s
    z(TestHighLevelExtending.test_add_operatorc                 C   sT   t }tdd|}| |ddd | |t t d | |t t d dS 	zY
        Test re-implementing '+' for a custom type via @overload(operator.add).
        Tr  r/   ro   r)  rI   rZ  N)r   r   r  r[  r2   r  r7   r7   r8   test_add_binop	  s
    z%TestHighLevelExtending.test_add_binopc                 C   sT   t }tdd|}| |ddd | |t t d | |t t d dS rY  )r   r   r  r[  r2   r  r7   r7   r8   test_iadd_operator  s
    z)TestHighLevelExtending.test_iadd_operatorc                 C   sT   t }tdd|}| |ddd | |t t d | |t t d dS r]  )r   r   r  r[  r2   r  r7   r7   r8   test_iadd_binop%  s
    z&TestHighLevelExtending.test_iadd_binopc                 C   s   t }tdd|}t }d }t <}z||d W n& tk
rX } z|}W 5 d }~X Y nX W 5 Q R X |d k	rp|| | d d S )NTr  A  zdel hello! 321
)r   r   r2   r   r   r/  rW  r>   r  r  rR   eoutexcr7   r7   r8   test_delitem3  s     z#TestHighLevelExtending.test_delitemc                 C   s*   t }tdd|}| |t dd d S )NTr  ra  i  )r   r   r  r2   r  r7   r7   r8   test_getitemC  s    z#TestHighLevelExtending.test_getitemc                 C   s   t }tdd|}t }d }t >}z||dd W n& tk
rZ } z|}W 5 d }~X Y nX W 5 Q R X |d k	rr|| | d d S )NTr  ra  r   z321 123
)r   r   r2   r   r   r/  rW  rb  r7   r7   r8   test_setitemH  s     z#TestHighLevelExtending.test_setitemc           	   	   C   sx   t ddt}d}||}t|}tj|| t ddt}| t}|  W 5 Q R X t|j	}d}| 
|| dS )zW
        Test overloading whose return value cannot be represented in CPython.
        Tr  
   zcannot convert native ModuleN)r   r   r}   testingZassert_equalr   rM  	TypeErrorrO  rP  rN  )	r>   Zok_cfuncnr7  expectZ	bad_cfuncrQ  errmsgZ	expectmsgr7   r7   r8   test_no_cpython_wrapperX  s    
z.TestHighLevelExtending.test_no_cpython_wrapperc              	   C   s   d'dd}d}d(dd}|  tj}||dd	d
d W 5 Q R X t|j}| || | d| | d| | d| d)dd}|  tj}||dd	d
d W 5 Q R X t|j}| || | d| | d| | d| d*dd}|  tj}||dd	d
d W 5 Q R X t|j}| || | d| | d|k | d| | d| ddlm}m	}	 |  tj}||dd	d
d W 5 Q R X t|j}| || | d| | d|k | d| |  tj}||	dd	d
d W 5 Q R X t|j}| || | d| | d|k | d| | d| d+dd}
|  tj}||
dd	d
d W 5 Q R X t|j}| || | d| | d|k | d| | d| d,dd }|  tj}||dd	d
d W 5 Q R X t|j}| || | d| | d|k | d!| d-d"d#}|  tj}||dd	d
d W 5 Q R X t|j}| || | d| | d$| d%d& }|  tj}||dd	d
d W 5 Q R X t|j}| || | d| | d| dS ).z}
        Tests that an overload which has a differing typing and implementing
        signature raises an exception.
        Nc                    s:   d	ddt d
 fdd	}tddfdd}|S )Nc                 S   s   d S rC   r7   r   brG   kwr7   r7   r8   
myoverloadr  s    zjTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>.myoverloadc                    s    S rC   r7   rp  )implr7   r8   _myoverload_implu  s    zpTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>._myoverload_implTr  c                    s    | |||d d S )Nrr  r7   )r   rq  rG   rF  rs  r7   r8   fooy  s    zcTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>.foo)N)Nr   r   )rt  ru  rx  r7   )rt  rs  r8   gen_olq  s    
zVTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_olz-Typing and implementation arguments differ in   c                 S   s   | dkrdS dS d S Nri  r/   r7   rp  r7   r7   r8   impl1  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl1r/   ro   r)  r:  zkeyword argument default valuesz<Parameter "kw=12">z<Parameter "kw=None">c                 S   s   | dkrdS dS d S r|  r7   )r   rq  rG   kwargr7   r7   r8   impl2  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl2zkeyword argument namesz<Parameter "kwarg=None">c                 S   s   t dkrdS dS d S r|  r   )zrq  rG   rr  r7   r7   r8   impl3  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl3zargument nameskeywordz<Parameter "a">z<Parameter "z">)impl4impl5zFirst difference: 'z'c                 S   s   | dkrdS dS d S r|  r7   )r   rq  rG   rF  rc  rr  r7   r7   r8   impl6  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl6z<Parameter "d">z<Parameter "e">c                 S   s   | dkrdS dS d S r|  r7   )r   rq  rr  r7   r7   r8   impl7  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl7z<Parameter "c">c                 S   s   | dkrdS dS d S r|  r7   )r   rq  rG   rr  Zextra_kwargr7   r7   r8   impl8  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl8z<Parameter "extra_kwarg=None">c                 S   s   | dkrdS dS d S r|  r7   )r   rq  rG   r7   r7   r8   impl9  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl9)N)r{  )N)N)N)N)NN)
rM  r	   r   rO  rP  rN  assertFalseoverload_usecasesr  r  )r>   rz  sentinelr~  rc  msgr  r  r  r  r  r  r  r  r7   r7   r8   /test_typing_vs_impl_signature_mismatch_handlingk  s    















zFTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handlingc              	      s   ddd ddl m} t | tdd fdd	}| tj}|dd
 W 5 Q R X t|j}| 	d| | 	d| dS )z
        Tests that an overload which has a differing typing and implementing
        signature raises an exception and uses VAR_POSITIONAL (*args) in typing
        Nc                 S   s   d S rC   r7   r   rr  r7   r7   r8   rs    s    ziTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positional.<locals>.myoverloadr/   )var_positional_implTr  c                    s    | |dddS )N	      rv  r7   r   rq  rw  r7   r8   rx  
  s    zbTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positional.<locals>.foor5  z)VAR_POSITIONAL (e.g. *args) argument kindz-offending argument name is '*star_args_token')N)
r  r  r   r   rM  r	   r   rO  rP  rN  )r>   r  rx  rc  r  r7   rw  r8   >test_typing_vs_impl_signature_mismatch_handling_var_positional  s    

zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positionalc              	   C   s   ddd}dd }||ddd |  tj}||dd W 5 Q R X t|j}| d	| | d
| ddd}|  tj}||dd W 5 Q R X t|j}| d	| | d
| dS )zJ
        Tests that an overload which uses **kwargs (VAR_KEYWORD)
        Tc                    s4   ddd t  |d|  tdd fdd}|S )	Nc                 S   s   d S rC   r7   r  r7   r7   r8   rs    s    zvTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_ol.<locals>.myoverloadstrictTr  c                    s    | ddS )Nr  rv  r7   r  rw  r7   r8   rx    s    zoTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_ol.<locals>.foo)Nry  )rt  r  rx  r7   rw  r8   rz    s
    
zbTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_olc                 [   s   ddd}|S )Nri  c                 S   s   | S rC   r7   r  r7   r7   r8   rt  '  s    zmTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol1.<locals>.impl)ri  r7   )r   r   rt  r7   r7   r8   ol1&  s    
z_TestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol1Fr/   ro   z1use of VAR_KEYWORD (e.g. **kwargs) is unsupportedz"offending argument name is '**kws'r   c                 S   s   dd }|S )Nc                 [   s   | S rC   r7   )r   r   r7   r7   r8   rt  5  s    zmTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol2.<locals>.implr7   )r   rr  rt  r7   r7   r8   ol24  s    z_TestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol2N)T)r   )rM  r	   r   rO  rP  rN  )r>   rz  r  rc  r  r  r7   r7   r8   ;test_typing_vs_impl_signature_mismatch_handling_var_keyword  s    



zRTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keywordc                 C   s@   t tjdd	dd}tdd }td}| ||d d S )
Nrx  ri  c                 S   s   ddd}|S )Nri  c                 S   s   |S rC   r7   )r   a_kwargr7   r7   r8   rt  D  s    zQTestHighLevelExtending.test_overload_method_kwargs.<locals>.fooimpl.<locals>.impl)ri  r7   )r   r  rt  r7   r7   r8   fooimplB  s    
zCTestHighLevelExtending.test_overload_method_kwargs.<locals>.fooimplc                 S   s   |   |  d| j ddfS )N      )r  rx  Ar7   r7   r8   barI  s    z?TestHighLevelExtending.test_overload_method_kwargs.<locals>.barr5  )ri  r  r  )ri  )r   r   r   r   r}   r   r/  )r>   r  r  Zr7   r7   r8   test_overload_method_kwargs@  s    


z2TestHighLevelExtending.test_overload_method_kwargsc                 C   sF   t tjddd }tdd }td}|| | ||d d S )Nlitfooc                 S   s(   t |tjr$t |tjs$dd }|S d S )Nc                 S   s   |S rC   r7   )r   rF   r7   r7   r8   rt  Z  s    zXTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.litfoo.<locals>.impl)r;   r   r   Literal)r   rF   rt  r7   r7   r8   r  S  s    zJTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.litfooc                 S   s
   |  dS N  )r  r  r7   r7   r8   r  _  s    zGTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.barr/   r  )r   r   r   r   r}   Zzerosr/  )r>   r  r  r  r7   r7   r8   #test_overload_method_literal_unpackQ  s    



z:TestHighLevelExtending.test_overload_method_literal_unpackc                 C   s   t dd }| | d d S )Nc                   S   s
   t tS rC   )r}   exprB   r7   r7   r7   r8   testk  s    z8TestHighLevelExtending.test_overload_ufunc.<locals>.testr  )r   r/  )r>   r  r7   r7   r8   test_overload_ufuncg  s    
z*TestHighLevelExtending.test_overload_ufuncc                 C   s   t tddd }tdd }t }| ||ddd | ||ddd	d
 | ||ddd	dd tdd }| ||d | ||dddd | ||dddd | ||dddd d S )Nmethod_starargc                 W   s   dd }|S )Nc                 W   s
   |||fS rC   r7   )rR   rF   val2rm   r7   r7   r8   gett  s    z\TestHighLevelExtending.test_overload_method_stararg.<locals>._ov_method_stararg.<locals>.getr7   )rR   rF   r  rm   r  r7   r7   r8   _ov_method_starargr  s    zOTestHighLevelExtending.test_overload_method_stararg.<locals>._ov_method_starargc                 W   s
   | j | S rC   r  )rR   rm   r7   r7   r8   rx  y  s    z@TestHighLevelExtending.test_overload_method_stararg.<locals>.foor/   ro   r/   ro   r7   r)  r/   ro   r)  r:  r/   ro   r)  r:  c                 S   s(   |  dd|  ddd|  ddddfS )Nr/   ro   r)  r:  r  r  r7   r7   r8   r    s    
z@TestHighLevelExtending.test_overload_method_stararg.<locals>.bar)r  r  r  r  )r/   ro   )r  r  )r/   ro   )r  r)  )r:  r5  )r/   ro   )r  r   r9   r   r2   r/  )r>   r  rx  rR   r  r7   r7   r8   test_overload_method_starargq  s4    


    z3TestHighLevelExtending.test_overload_method_starargc              	      s   G dd dt j t ddd }t fdd}d}| ||t| td	d
 }| tj	}|| W 5 Q R X | 
dt|j d S )Nc                   @   s   e Zd ZdS )zATestHighLevelExtending.test_overload_classmethod.<locals>.MyArrayNr3   r7   r7   r7   r8   MyArray  s   r  array_allocc                 S   s   dd }|S )Nc                 S   s   t |}|S rC   r}   r   )clsnitemsr   r7   r7   r8   rt    s    
zVTestHighLevelExtending.test_overload_classmethod.<locals>.ol_array_alloc.<locals>.implr7   )r  r  rt  r7   r7   r8   ol_array_alloc  s    zHTestHighLevelExtending.test_overload_classmethod.<locals>.ol_array_allocc                    s
     | S rC   )r  r  r  r7   r8   rx    s    z=TestHighLevelExtending.test_overload_classmethod.<locals>.foor   c                 S   s   t j| S rC   )r   r   r  r  r7   r7   r8   no_classmethod_in_base  s    zPTestHighLevelExtending.test_overload_classmethod.<locals>.no_classmethod_in_basez"Unknown attribute 'array_alloc' of)r   r   r)   r   r  r}   r   rM  r	   r   rN  rO  rP  )r>   r  rx  r  r  rQ  r7   r  r8   test_overload_classmethod  s    

z0TestHighLevelExtending.test_overload_classmethodc                 C   s\   t tdd }t tdd }tdd }d}d|d	  d
|d  f}| || | d S )Nc                 S   s   t | tjrdd }|S d S )Nc                 S   s   d|  S )N     @E@r7   rb   r7   r7   r8   rt    s    zeTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld1.<locals>.impl)r;   r   r   rc   rt  r7   r7   r8   callable_type_call_ovld1  s    zWTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld1c                 S   s   t | tjrdd }|S d S )Nc                 S   s   d|  S )N42.5r7   rb   r7   r7   r8   rt    s    zeTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld2.<locals>.impl)r;   r   ZUnicodeTyper  r7   r7   r8   callable_type_call_ovld2  s    zWTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld2c                 S   s   t | t |fS rC   )r   r  r7   r7   r8   rx    s    zBTestHighLevelExtending.test_overload_callable_typeref.<locals>.foo)r:  4r  r   r  r/   )r   r   r   r  )r>   r  r  rx  rm   r6  r7   r7   r8   test_overload_callable_typeref  s    


z5TestHighLevelExtending.test_overload_callable_typerefN)r4   r5   r6   r'  rR  rT  rX  r\  r^  r_  r`  rf  rg  rh  ro  r  r  r  r  r  r  r  r  r  r7   r7   r7   r8   rI    s,   	 ,
+ rI  c                 C   sD   | j | jd  }||kr td| j| jd  }||kr@tdd S )Nr   zcache not used)Z_cache_hitsZ
signaturesr   Z_cache_misses)r  Z
expect_hitZexpect_misseshitZmissr7   r7   r8   _assert_cache_stats  s    r  c                   @   s    e Zd ZdZdd Zdd ZdS )TestOverloadMethodCachingFc              	   C   s2   t | jj| _td| j |   W 5 Q R X d S )N	CACHE_DIR)r   r   r4   
_cache_dirr   run_caching_overload_methodr  r7   r7   r8   test_caching_overload_method  s    z6TestOverloadMethodCaching.test_caching_overload_methodc                 C   s   t dddt}| |t d t|dd |tf}dd | D }| t	|d zt
d}W n tk
r   t
}Y nX | }|jt|| jfd	}|  |t  |  | |jd |jdd
}| |d d S )NTr  cacher   r   r/   c                 S   s"   g | ]}| d rd|kr|qS )Zdeclarer   )
startswith)r   lnr7   r7   r8   
<listcomp>  s   
 zITestOverloadMethodCaching.run_caching_overload_method.<locals>.<listcomp>spawn)targetrm   )timeout)r   r   r  r2   r  Zinspect_llvmrD   
splitlinesr/  r   multiprocessingZget_contextAttributeErrorQueueProcessr  r  startputjoinexitcoder  )r>   r  ZllvmirZdeclsctxqpr   r7   r7   r8   r    s.    
 z5TestOverloadMethodCaching.run_caching_overload_methodN)r4   r5   r6   _numba_parallel_test_r  r  r7   r7   r7   r8   r    s   r  c              	   C   sP   t d|< |  }tdddt}||}| | t|dd W 5 Q R X dS )zH
    Used by TestOverloadMethodCaching.test_caching_overload_method
    r  Tr  r/   r   N)r   r  r   r   r  r  )r  	cache_dirr   r  r   r7   r7   r8   r    s    
r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestIntrinsicc              	      s   t dd t dd  tddfdd}tdd fd	d
}| | d | t}|  W 5 Q R X | d|jj dS )z
        Verify that returning a None from codegen function is handled
        automatically for void functions, otherwise raise exception.
        c                 S   s   t t j}dd }||fS )Nc                 S   s   d S rC   r7   r?   rK   r+   rm   r7   r7   r8   codegen   s    zBTestIntrinsic.test_void_return.<locals>.void_func.<locals>.codegenr   voidrf   r%  r   rl   r  r7   r7   r8   	void_func  s    z1TestIntrinsic.test_void_return.<locals>.void_funcc                 S   s   t t j}dd }||fS )Nc                 S   s   d S rC   r7   r  r7   r7   r8   r  *  s    zFTestIntrinsic.test_void_return.<locals>.non_void_func.<locals>.codegen)r   rf   r  r7   r7   r8   non_void_func&  s    z5TestIntrinsic.test_void_return.<locals>.non_void_funcTr  c                      s    d dS Nr/   r   r7   r7   )r  r7   r8   call_void_func/  s    z6TestIntrinsic.test_void_return.<locals>.call_void_funcc                      s    d dS r  r7   r7   )r  r7   r8   call_non_void_func4  s    z:TestIntrinsic.test_void_return.<locals>.call_non_void_funcr   znon-void function returns NoneN)r$   r   r/  rM  r   rN  rP  r  )r>   r  r  rc  r7   )r  r  r8   test_void_return  s    
	
zTestIntrinsic.test_void_returnc              	      s   ddl m}m}m}m} fdddd tddfd	d
}dd }|d|||}|| tdd fdd}tjdtj	d}	t
 }
||	 |
  }W 5 Q R X |
  ttt|	}|| dS )zV
        Usecase test: custom reinterpret cast to turn int values to pointers
        r   )	CFUNCTYPEPOINTERc_floatc_intc                    s&   t  tjstt fdd}|S )Nc                    s8    | tj t|tjr4 tj}dd }||fS d S )Nc                 S   s"   |\}|j }| |}|||S rC   )rk   get_value_typeZinttoptr)r?   rK   r+   rm   srcZrtypellrtyper7   r7   r8   r  Q  s    
z_TestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_caster.<locals>.unsafe_cast.<locals>.codegen)r.  r
   Contextr;   r   r   Zuintp)r%  r  rl   r  )result_typer>   r7   r8   unsafe_castJ  s
    
zNTestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_caster.<locals>.unsafe_cast)r;   r   CPointerr   r$   )r  r  r  )r  r8   unsafe_casterG  s    z9TestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_casterc                 S   s   t dd S )Nznot callable from pythonr`   r  r7   r7   r8   unsafe_get_ctypes_pointer]  s    zETestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_get_ctypes_pointerFr  c                    s0   t | tjr,t| j  fdd}|S d S )Nc                    s    | j jdS )Nr  )ctypesr   )r   r  r7   r8   
array_imple  s    zdTestIntrinsic.test_ll_pointer_cast.<locals>.array_impl_unsafe_get_ctypes_pointer.<locals>.array_impl)r;   r   r   r  r   )Zarrtyper  )r  r  r8   $array_impl_unsafe_get_ctypes_pointer`  s    zPTestIntrinsic.test_ll_pointer_cast.<locals>.array_impl_unsafe_get_ctypes_pointerc                 S   s   t |D ]}t| |  qd S rC   )r   r   )ptrrl  r   r7   r7   r8   my_c_fun_rawk  s    z8TestIntrinsic.test_ll_pointer_cast.<locals>.my_c_fun_rawNTr  c                    s   | } || j  d S rC   )r   )r   r  )my_c_funr   r7   r8   rx  t  s    z/TestIntrinsic.test_ll_pointer_cast.<locals>.foori  )r   )r  r  r  r  r  r   r   r}   r   Zfloat32r   rW  r  closer   maprO  r/  )r>   r  r  r  r  r  r  Z	prototyperx  r   bufr7  rm  r7   )r  r>   r  r   r8   test_ll_pointer_cast@  s"    

z"TestIntrinsic.test_ll_pointer_castc                    s   t dd  tdd fdd}| |dd tj}t|}t|}|d7 }| |t| t|}| |t| | |d|d t }| |t| t|}| 	 | | |t| dS )	z9
        Test serialization of intrinsic objects
        c                 S   s   dd }||}||fS )Nc                 S   s   |d S r   r7   r  r7   r7   r8   r    s    zCTestIntrinsic.test_serialization.<locals>.identity.<locals>.codegenr7   )r?   rc   r  rl   r7   r7   r8   identity  s    z2TestIntrinsic.test_serialization.<locals>.identityTr  c                    s    | S rC   r7   rb   r  r7   r8   rx    s    z-TestIntrinsic.test_serialization.<locals>.foor/   N)
r$   r   r/  r%   _memor   pickledumpsloadsr  )r>   rx  memo	memo_sizeZserialized_fooZfoo_rebuiltZserialized_identityZidentity_rebuiltr7   r  r8   test_serialization  s$    




z TestIntrinsic.test_serializationc                 C   s   dd }t j}t|}t d|}| |j| t|}|d7 }| |t| ~| |t| t j	  |d8 }| |t| t
|}| |j| t
|}| |j|j dS )z3
        Test deserialization of intrinsic
        c                 S   s   dd }|||fS )Nc                 S   s   |d S r   r7   r  r7   r7   r8   r    s    zATestIntrinsic.test_deserialization.<locals>.defn.<locals>.codegenr7   )r?   rc   r  r7   r7   r8   defn  s    z0TestIntrinsic.test_deserialization.<locals>.defnrx  r/   N)r%   r  r   r  Z_defnr  r  r/  Z_recentclearr  ZassertIsNot)r>   r  r  r  originalZpickledZrebuiltsecondr7   r7   r8   test_deserialization  s"    




z"TestIntrinsic.test_deserializationc                 C   s`   t tddd}| d|j | d|j | d|j | dti|j | d|j d S )Nr   c                 S   s   t t j}dd }||fS )void_func docstringc                 S   s   d S rC   r7   r  r7   r7   r8   r    s    z@TestIntrinsic.test_docstring.<locals>.void_func.<locals>.codegenr  r  r7   r7   r8   r    s    z/TestIntrinsic.test_docstring.<locals>.void_funcznumba.tests.test_extendingr  r   r  )	r$   intr/  r5   r4   r6   ZassertDictEqual__annotations__r'  )r>   r  r7   r7   r8   test_docstring  s    
zTestIntrinsic.test_docstringN)r4   r5   r6   r  r  r  r  r  r7   r7   r7   r8   r    s
   *B.(r  c                   @   s   e Zd Zdd Zdd ZdS )TestRegisterJitablec                    sJ   t dd   fdd}tdd|}|dd}|dd}| || d S )	Nc                 S   s   | | S rC   r7   rc   r{   r7   r7   r8   rx    s    z.TestRegisterJitable.test_no_flags.<locals>.fooc                    s
    | |S rC   r7   r  r  r7   r8   r    s    z.TestRegisterJitable.test_no_flags.<locals>.barTr  r/   ro   )r&   r   r/  )r>   r  cbarrm  r7  r7   r  r8   test_no_flags  s    


z!TestRegisterJitable.test_no_flagsc              	      s   t dddd   fdd}| |d dd	d
g tdd|}| tj}|d
 W 5 Q R X d}| |t|j	 d S )NF)_nrtc                 S   s
   t | S rC   r  rl  r7   r7   r8   rx    s    z2TestRegisterJitable.test_flags_no_nrt.<locals>.fooc                    s    | S rC   r7   r#  r  r7   r8   r    s    z2TestRegisterJitable.test_flags_no_nrt.<locals>.barr)  r   r/   ro   Tr  COnly accept returning of array passed into the function as argument)
r&   r/  tolistr   rM  r	   r   rN  rO  rP  )r>   r  r   rQ  r  r7   r  r8   test_flags_no_nrt  s    
z%TestRegisterJitable.test_flags_no_nrtN)r4   r5   r6   r!  r&  r7   r7   r7   r8   r    s   r  c                   @   sD   e Zd Zeedkddd Zdd Zeedkddd ZdS )	TestImportCythonFunctionNz&Only run if SciPy >= 0.19 is installedc                    sL   t dd}ttjtj}|| tdd fdd}| |dd d S )	Nscipy.special.cython_specialj0Tr  c                    s    | S rC   r7   rb   Z_j0r7   r8   r     r   z@TestImportCythonFunction.test_getting_function.<locals>.<lambda>r   r/   )r'   r  r  Zc_doubler   r/  )r>   addrZfunctyper)  r7   r*  r8   test_getting_function  s     z.TestImportCythonFunction.test_getting_functionc              	   C   sD   |  t}tdd W 5 Q R X d}t|t|j}| | d S )NZ
fakemoduleZfakefunctionzNo module named '?fakemodule'?)rM  ImportErrorr'   rematchrO  rP  r  )r>   rQ  r  r/  r7   r7   r8   test_missing_module  s
    z,TestImportCythonFunction.test_missing_modulec              	   C   s:   |  t}tdd W 5 Q R X d}| |t|j d S )Nr(  rx  zINo function 'foo' found in __pyx_capi__ of 'scipy.special.cython_special')rM  r   r'   r/  rO  rP  )r>   rQ  r  r7   r7   r8   test_missing_function#  s     z.TestImportCythonFunction.test_missing_function)	r4   r5   r6   unittestZskipIfscr,  r0  r1  r7   r7   r7   r8   r'    s
   
	r'  method_jit_option_check_nrtr"  TZjit_optionsc                 C   s   dd }|S )Nc                 S   s
   t dS Nri  r  r  r7   r7   r8   r   4  s    z+ov_method_jit_option_check_nrt.<locals>.impr7   r	  r7   r7   r8   ov_method_jit_option_check_nrt0  s    r7  method_jit_option_check_no_nrtFc                 C   s   dd }|S )Nc                 S   s
   t dS r6  r  r  r7   r7   r8   r   >  s    z.ov_method_jit_option_check_no_nrt.<locals>.impr7   r	  r7   r7   r8   !ov_method_jit_option_check_no_nrt:  s    r9  attr_jit_option_check_nrtc                 C   s   dd }|S )Nc                 S   s
   t dS r6  r  r  r7   r7   r8   r   H  s    z)ov_attr_jit_option_check_nrt.<locals>.impr7   r	  r7   r7   r8   ov_attr_jit_option_check_nrtD  s    r;  attr_jit_option_check_no_nrtc                 C   s   dd }|S )Nc                 S   s
   t dS r6  r  r  r7   r7   r8   r   R  s    z,ov_attr_jit_option_check_no_nrt.<locals>.impr7   r	  r7   r7   r8   ov_attr_jit_option_check_no_nrtN  s    r=  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestJitOptionsNoNRTc              	   O   s<   d}|  tj}||| W 5 Q R X | |t|j d S )Nr$  )rM  r	   r   rN  rO  rP  )r>   funcrm   rJ  r  rQ  r7   r7   r8   check_error_no_nrt[  s
    z&TestJitOptionsNoNRT.check_error_no_nrtc                    sX   dd  t  d|iddd }t fdd}|rJ| | td	 n
| | d S )
Nc                   S   s
   t dS r6  r  r7   r7   r7   r8   dummyf  s    z8TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.dummyr"  r5  c                  S   s   dd } | S )Nc                   S   s
   t dS r6  r  r7   r7   r7   r8   rA  k  s    zJTestJitOptionsNoNRT.no_nrt_overload_check.<locals>.ov_dummy.<locals>.dummyr7   rA  r7   r7   r8   ov_dummyi  s    z;TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.ov_dummyc                      s     S rC   r7   r7   rB  r7   r8   rx  p  s    z6TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.foori  )r   r   r  r}   r   r@  )r>   flagrC  rx  r7   rB  r8   no_nrt_overload_checke  s    
z)TestJitOptionsNoNRT.no_nrt_overload_checkc                 C   s   |  d |  d d S )NTF)rE  r  r7   r7   r8   test_overload_no_nrty  s    
z(TestJitOptionsNoNRT.test_overload_no_nrtc                 C   s>   t dd }| |ttd t dd }| |t d S )Nc                 S   s   |   S rC   )r4  rb   r7   r7   r8   udt~  s    z<TestJitOptionsNoNRT.test_overload_method_no_nrt.<locals>.udtri  c                 S   s   |   S rC   )r8  rb   r7   r7   r8   rG    s    r   r  rB   r}   r   r@  r>   rG  r7   r7   r8   test_overload_method_no_nrt}  s    

z/TestJitOptionsNoNRT.test_overload_method_no_nrtc                 C   s>   t dd }| |ttd t dd }| |t d S )Nc                 S   s   | j S rC   )r:  rb   r7   r7   r8   rG    s    z?TestJitOptionsNoNRT.test_overload_attribute_no_nrt.<locals>.udtri  c                 S   s   | j S rC   )r<  rb   r7   r7   r8   rG    s    rH  rI  r7   r7   r8   test_overload_attribute_no_nrt  s    

z2TestJitOptionsNoNRT.test_overload_attribute_no_nrtN)r4   r5   r6   r@  rE  rF  rJ  rK  r7   r7   r7   r8   r>  X  s
   
r>  c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )TestBoxingCallingJITc                    s0   t    td}|\| _| _| _|  | _d S )Nr^   )r   setUpr]   rU   rT   rW   dyn_type)r>   manyr   r7   r8   rM    s    
zTestBoxingCallingJIT.setUpc                    sl   dd t  fddt| jfdd}t| jdd }td	d
 }|| j}| |   d S )Nr  r   c                    s    fdd}t ||}||fS )Nc                    s   |\}| || S rC   r   r   r?   rK   rl   rm   rF   magic_offsetr7   r8   rt    s    zKTestBoxingCallingJIT.test_unboxer_basic.<locals>.my_intrinsic.<locals>.implr+   r%  rF   rt  rl   rR  r7   r8   my_intrinsic  s    
z=TestBoxingCallingJIT.test_unboxer_basic.<locals>.my_intrinsicc                    sL   fdd}|j tj g}ttjtj}|j|||\}}t||dS )Nc                    s    | S rC   r7   rb   rV  r7   r8   bridge  s    zHTestBoxingCallingJIT.test_unboxer_basic.<locals>.unboxer.<locals>.bridgeis_error	r?   rJ   r   intpr+   Zvoidptrrw   call_jit_coder#   rQ   rR   rG   rX  rm   rl   rZ  r   magic_tokenrV  r7   r8   unboxer  s
    z8TestBoxingCallingJIT.test_unboxer_basic.<locals>.unboxerc                 S   s   |j |tj}|j|S rC   rK   Zptrtointr   Zintp_trw   long_from_ssize_trQ   rF   rG   r   r7   r7   r8   boxer  s    z6TestBoxingCallingJIT.test_unboxer_basic.<locals>.boxerc                 S   s   | S rC   r7   rb   r7   r7   r8   passthru  s    z9TestBoxingCallingJIT.test_unboxer_basic.<locals>.passthrur$   r"   rU   r!   r   rN  r/  )r>   ra  re  rf  rd  r7   rS  r`  rV  r8   test_unboxer_basic  s    	


z'TestBoxingCallingJIT.test_unboxer_basicc              	   C   sf   t | jdd }t| jdd }tdd }| t}|| j W 5 Q R X | dt|j	 d S )Nc                 S   sH   dd }|j tjdg}ttjtj}|j|||\}}t||dS )Nc                 S   s   | dkrt d| S )Nr   cannot be x > 0r   rb   r7   r7   r8   rX    s    zHTestBoxingCallingJIT.test_unboxer_raise.<locals>.unboxer.<locals>.bridger/   rY  r[  r^  r7   r7   r8   ra    s
    z8TestBoxingCallingJIT.test_unboxer_raise.<locals>.unboxerc                 S   s   |j |tj}|j|S rC   rb  rd  r7   r7   r8   re    s    z6TestBoxingCallingJIT.test_unboxer_raise.<locals>.boxerc                 S   s   | S rC   r7   rb   r7   r7   r8   rf    s    z9TestBoxingCallingJIT.test_unboxer_raise.<locals>.passthrurj  
r"   rU   r!   r   rM  r   rN  rN  rO  rP  r>   ra  re  rf  rQ  r7   r7   r8   test_unboxer_raise  s    


 z'TestBoxingCallingJIT.test_unboxer_raisec                    sl   dd t  fddt| jdd }t| jfdd}td	d
 }|| j}| |   d S )Nr  i8  c                    s    fdd}t ||}||fS )Nc                    s   |\}| || S rC   rP  rQ  rR  r7   r8   rt    s    zCTestBoxingCallingJIT.test_boxer.<locals>.my_intrinsic.<locals>.implrT  rU  rR  r7   r8   rV    s    
z5TestBoxingCallingJIT.test_boxer.<locals>.my_intrinsicc                 S   s   t |j S rC   rN   rP   r7   r7   r8   ra    s    z0TestBoxingCallingJIT.test_boxer.<locals>.unboxerc                    sL   fdd}|j tj g}ttjtj}|j|||\}}|j|S )Nc                    s    | S rC   r7   rb   rW  r7   r8   rX    s    z>TestBoxingCallingJIT.test_boxer.<locals>.boxer.<locals>.bridge)r?   rJ   r   r\  r+   rw   r]  rc  )rQ   rF   rG   rX  rm   rl   rZ  r   r_  r7   r8   re    s
    z.TestBoxingCallingJIT.test_boxer.<locals>.boxerc                 S   s   | S rC   r7   rb   r7   r7   r8   rf    s    z1TestBoxingCallingJIT.test_boxer.<locals>.passthrurg  )r>   ra  re  rf  rr7   rh  r8   
test_boxer  s    	



zTestBoxingCallingJIT.test_boxerc              	   C   sf   t | jdd }t| jdd }tdd }| t}|| j W 5 Q R X | dt|j	 d S )Nc                 S   s   t |j S rC   rN   rP   r7   r7   r8   ra    s    z6TestBoxingCallingJIT.test_boxer_raise.<locals>.unboxerc           
   	   S   s   dd }|j tjdg}ttjtj}|j|||\}}tj|j	|jj
dd}|j	|j	|  |j|}	|j	|	| W 5 Q R X |j	|S )Nc                 S   s   | dkrt d| S )Nr   cannot do x > 0rk  rb   r7   r7   r8   rX    s    zDTestBoxingCallingJIT.test_boxer_raise.<locals>.boxer.<locals>.bridger/   T)zfill)r?   rJ   r   r\  r+   rw   r]  r   Zalloca_oncerK   ZpyobjZif_thennot_rc  storeload)
rQ   rF   rG   rX  rm   rl   rZ  r   retvalrR   r7   r7   r8   re    s    z4TestBoxingCallingJIT.test_boxer_raise.<locals>.boxerc                 S   s   | S rC   r7   rb   r7   r7   r8   rf  $  s    z7TestBoxingCallingJIT.test_boxer_raise.<locals>.passthrurq  rl  rm  r7   r7   r8   test_boxer_raise  s    


 z%TestBoxingCallingJIT.test_boxer_raise)	r4   r5   r6   rM  ri  rn  rp  rw  r  r7   r7   r   r8   rL    s
   *%rL  c                 C   s   d S rC   r7   rb   r7   r7   r8   with_objmode_cache_ov_example/  s    rx  c                   @   sX   e Zd ZdZdZdd Zdd Zdd Zed	d
 Z	edd Z
edd Zdd ZdS )TestCachingOverloadObjmodezTTest caching of the use of overload implementations that use
    `with objmode`
    Fc                 C   s   t dtj d S )Nerror)warningssimplefilterr	   ZNumbaWarningr  r7   r7   r8   rM  <  s    z TestCachingOverloadObjmode.setUpc                 C   s   t   d S rC   )r{  resetwarningsr  r7   r7   r8   tearDown?  s    z#TestCachingOverloadObjmode.tearDownc              	      s   t | jj}td| dd fdd tt fdd}tdd	d
d }d}|d}| || tdd	|j}|d}| || W 5 Q R X d S )Nr  c                 S   s   t | |  }t j|S rC   )r}   r   ZlinalgZnorm)rc   r   r7   r7   r8   realworkF  s    zJTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.realworkc                    s    | S rC   r7   rb   )r  r7   r8   python_codeK  s    zMTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.python_codec                    s    fdd}|S )Nc              	      s"   t dd  | }W 5 Q R X |S Nr  )r{   r   r  r  r7   r8   rt  Q  s    zqTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>._ov_with_objmode_cache_ov_example.<locals>.implr7   r  r  r7   r8   !_ov_with_objmode_cache_ov_exampleO  s    zcTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>._ov_with_objmode_cache_ov_exampleTr  c                 S   s   t | S rC   )rx  rb   r7   r7   r8   testcaseX  s    zJTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.testcaser   )	r   r   r4   r   r   rx  r   r/  py_func)r>   r  r  r  rm  r7  Ztestcase_cachedr7   )r  r  r8   test_caching_overload_objmodeB  s    
z8TestCachingOverloadObjmode.test_caching_overload_objmodec                    s\   dd dd  t  fdd}tdd fd	d
}| }| }||krXtd|S )Nc                 S   s   t | | S rC   r}   sumr  r7   r7   r8   do_thisf  s    zGTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.do_thisc                 S   s   t | | S rC   r  r  r7   r7   r8   do_somethingi  s    zLTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.do_somethingc                    s    fdd}|S )Nc              	      s$   t dd  | |}W 5 Q R X |S r  r  )r   rq  r{   r  r7   r8   _do_something_impln  s    zqTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.overload_do_something.<locals>._do_something_implr7   )r   rq  r  r  r7   r8   overload_do_somethingl  s    zUTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.overload_do_somethingTr  c                     s   t d} t d} | |S )Nr  r  r  )r  r7   r8   test_cachingt  s    

zLTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.test_cachingzincorrect result)r   r   r  r   )r  r  r  r7  rm  r7   )r  r  r8   check_objmode_cache_ndarrayd  s    z6TestCachingOverloadObjmode.check_objmode_cache_ndarrayc                 C   s   |    d S rC   )r  )r  r7   r7   r8   *populate_objmode_cache_ndarray_check_cache  s    zETestCachingOverloadObjmode.populate_objmode_cache_ndarray_check_cachec                 C   s<   |   }t|jjdkr tdt|jjdkr8tdd S )Nr   zunexpected cache misszunexpected missing cache hit)r  r   statsZcache_missesr   Z
cache_hits)r  Zdispr7   r7   r8   'check_objmode_cache_ndarray_check_cache  s
    zBTestCachingOverloadObjmode.check_objmode_cache_ndarray_check_cachec              	   C   sN   t | jj}td| t| j| t| j|}W 5 Q R X | |d d d S )Nr  r  r   )r   r   r4   r   r   r  r  r/  )r>   r  r   r7   r7   r8    test_check_objmode_cache_ndarray  s      z;TestCachingOverloadObjmode.test_check_objmode_cache_ndarrayN)r4   r5   r6   r'  r  rM  r~  r  classmethodr  r  r  r  r7   r7   r7   r8   ry  5  s   "


ry  c                   @   s   e Zd Zdd Zdd ZdS )TestMiscc                 C   sn   dd }|  t| | tt| |  tt| |  ttdd| |  ttdd| d S )Nc                 S   s   d S rC   r7   rb   r7   r7   r8   rx    s    z$TestMisc.test_is_jitted.<locals>.fooT)parallelzvoid(float64[:])z(m))r  r(   r!  r   r   r   )r>   rx  r7   r7   r8   test_is_jitted  s    zTestMisc.test_is_jittedc                 C   s@   t dd }t dd }| | |  | | |  d S )Nc                   S   s   t jdddjS )Nr     )r   
fill_valuer}   fullr   r7   r7   r7   r8   standard_order  s    z:TestMisc.test_overload_arg_binding.<locals>.standard_orderc                   S   s   t jdddjS )Nr  r   )r  r   r  r7   r7   r7   r8   reversed_order  s    z:TestMisc.test_overload_arg_binding.<locals>.reversed_order)r   r  r  )r>   r  r  r7   r7   r8   test_overload_arg_binding  s    

z"TestMisc.test_overload_arg_bindingN)r4   r5   r6   r  r  r7   r7   r7   r8   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestOverloadPreferLiteralc                    s   dd dd  dd }t dd| t  | tfd	d
}|d\}}}| |d | |d | |d t fdd}|d\}}}| |d | |d | |d d S )Nc                 S   s   d S rC   r7   rb   r7   r7   r8   
prefer_lit  s    z;TestOverloadPreferLiteral.test_overload.<locals>.prefer_litc                 S   s   d S rC   r7   rb   r7   r7   r8   non_lit  s    z8TestOverloadPreferLiteral.test_overload.<locals>.non_litc                 S   s>   t | tjr.| jdkr"dd }|S tdndd }|S d S )Nr/   c                 S   s   dS r  r7   rb   r7   r7   r8   rt    s    zATestOverloadPreferLiteral.test_overload.<locals>.ov.<locals>.implliteral valuec                 S   s   | d S Nd   r7   rb   r7   r7   r8   rt    s    r;   r   IntegerLiteralliteral_valuer	   r   r  r7   r7   r8   ov  s    
z3TestOverloadPreferLiteral.test_overload.<locals>.ovTZprefer_literalc                    s    d d | fS Nr/   ro   r7   rb   r  r7   r8   check_prefer_lit  s    zATestOverloadPreferLiteral.test_overload.<locals>.check_prefer_litr)  r     ,  c                    s    d d | fS r  r7   rb   r  r7   r8   check_non_lit  s    z>TestOverloadPreferLiteral.test_overload.<locals>.check_non_litr  )r   r   r/  r>   r  r  r   rq  rG   r  r7   r  r  r8   test_overload  s"    z'TestOverloadPreferLiteral.test_overloadc                 C   s   dd }t tddd| t tddd| tdd	 }|t d
\}}}| |d | |d | |d tdd }|t d
\}}}| |d | |d | |d d S )Nc                 S   s>   t |tjr.|jdkr"dd }|S tdndd }|S d S )Nr/   c                 S   s   dS r  r7   r>   rc   r7   r7   r8   rt    s    zHTestOverloadPreferLiteral.test_overload_method.<locals>.ov.<locals>.implr  c                 S   s   |d S r  r7   r  r7   r7   r8   rt    s    r  )r>   rc   rt  r7   r7   r8   r    s    
z:TestOverloadPreferLiteral.test_overload_method.<locals>.ovmethod_prefer_literalTr  method_non_literalFc                 S   s   |  d|  d|  |fS r  )r  rA  rc   r7   r7   r8   r    s    zHTestOverloadPreferLiteral.test_overload_method.<locals>.check_prefer_litr)  r  r  r  c                 S   s   |  d|  d|  |fS r  )r  r  r7   r7   r8   r    s    zETestOverloadPreferLiteral.test_overload_method.<locals>.check_non_litr  r  r  r7   r7   r8   test_overload_method  s6      

z.TestOverloadPreferLiteral.test_overload_methodN)r4   r5   r6   r  r  r7   r7   r7   r8   r    s   *r  c                   @   s   e Zd Zdd ZdS )TestIntrinsicPreferLiteralc                    s   dd }t dd|t dd| tfdd}|d\}}}| |d	 | |d
 | |d t fdd}|d\}}}| |d | |d
 | |d d S )Nc                 S   sR   t tj|}t|tjr>|jdkr2dd }||fS tdndd }||fS d S )Nr/   c                 S   s    |j d }| |}t|dS )Nr   r  )rm   r  r   Constant)r?   rK   r+   rm   atyper  r7   r7   r8   r  !  s    

zJTestIntrinsicPreferLiteral.test_intrinsic.<locals>.intrin.<locals>.codegenr  c                 S   s,   |j }| |}t|d}||d |S )Nr  r   )rk   r  r   r  mul)r?   rK   r+   rm   r  r  Zint_100r7   r7   r8   r  )  s    
)r+   r   r\  r;   r  r  r	   r   )r?   rc   rl   r  r7   r7   r8   intrin  s    
z9TestIntrinsicPreferLiteral.test_intrinsic.<locals>.intrinTr  Fc                    s    d d | fS r  r7   rb   r  r7   r8   r  3  s    zCTestIntrinsicPreferLiteral.test_intrinsic.<locals>.check_prefer_litr)  r  r  r  c                    s    d d | fS r  r7   rb   r  r7   r8   r  <  s    z@TestIntrinsicPreferLiteral.test_intrinsic.<locals>.check_non_litr  )r$   r   r/  )r>   r  r  r   rq  rG   r  r7   r  r8   test_intrinsic  s    z)TestIntrinsicPreferLiteral.test_intrinsicN)r4   r5   r6   r  r7   r7   r7   r8   r    s   r  c                   @   s   e Zd Zdd ZdS )TestNumbaInternalOverloadsc                    s   d  fdd fdd}t dd d tjjj }|  |j}|	 D ].\}}|j
D ]}t|d	d
rb||j|j qbqTd S )Nr   c              	      s   |  dsttj| }t|r|j }|D ]}|r.| }| | r.| dkrTd}d| d}i }zt	|i | W n( t
k
r    dkrtd Y  d S X || }t|  S q.d S )N_seedz
seed(seed)zdef z:
	passro   z%... skipped as cannot parse signature)r  r   r}   randominspect	isbuiltinr'  r  stripexecSyntaxErrorr   r  r+   )rc   thingZdocstrlslZ	fake_implfn)DEBUGr7   r8   sig_from_np_randomW  s(    





z[TestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.sig_from_np_randomc                    s   dkrt d|   dd }d }zt| }W nF tk
rv   t| dd }rrttj|d }rr|| krr|}Y nX |d k	rt|}t|j	 }t|j	 }t
|d t| |D ]\}	}
|	|
kr|j|	 }|j|jkr dkrt d  qqdt|kr$ dkrt d	  qq| jr:| jd
s|| |||} dkrz dkrdt d |rrt |  qnt|q dkr| jst d nt d  qq dkrt d d S )Nro   z
Checking: c           
      S   s   g }|  dt | d d}|| |d|  |d|  t|d }t|}|tjd d}|d	| d
|  dd| }	|	S )Nz from module 'r5   z' has mismatched sig.z    - expected: z    -      got: r/   r    zfrom :
)	r   r   r  getsourcelinesgetfilereplacenumba__path__r  )
r?  overload_funcfunc_sigol_sigr  r>  linenoZ
tmpsrcfilesrcfilemsgstrr7   r7   r8   create_messagex  s    

zhTestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.checker.<locals>.create_messager4   Fz.... skipped as positional only arguments found*z... skipped as contains *argsr  r   z... INVALIDz$... skipped as no __module__ presentz... skipped as Numba internalz... OK)r   r  r+   r   r   r}   r  r   
parametersr  zipr   kindPOSITIONAL_ONLYrO  r5   r  )r?  r  r  r  fnameZ
maybe_funcr  rc   r{   r   rq  r  r  r  r  r7   r8   checkert  s^    




 





zPTestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.checkerc                   S   s   d S rC   r7   r7   r7   r7   r8   r     r   zQTestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.<lambda>r7   _overload_funcF)r   compiler  corer
   r?   r  r   _registriesitemsZ	functionsr   rv   r  )r>   r  Ztyctxregskvitemr7   r  r8   $test_signatures_match_overloaded_apiH  s    K
z?TestNumbaInternalOverloads.test_signatures_match_overloaded_apiN)r4   r5   r6   r  r7   r7   r7   r8   r  F  s   r  __main__)N)r  rp   r   rU  r  r  r  r{  r.  numpyr}   Zllvmliter   r  r   r   r   r   r   Z
numba.corer   r	   r
   r   r   Znumba.core.typed_passesr   Znumba.core.registryr   Znumba.core.compilerr   Znumba.core.imputilsr   Znumba.tests.supportr   r   r   r   r   r   Znumba.core.errorsr   r2  Znumba.extendingr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Znumba.core.typing.templatesr*   r+   r,   r-   r.   Zpdlike_usecaser0   r1   Zscipy.special.cython_specialspecialZcython_specialr3  r-  rX   r2   rY   r9   rD   rB   rZ   rH   r<   rL   rM   r[   rS   r]   r   r[  Zmydummy_type_2r_   rd   ri   r  re   rn   rg   rs   rt   rx   r|   r~   r   r   r   r   r   r   r   delitemr   getitemr   setitemr   r   r   iaddr   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   Callabler   r  r  r  r
  r  r(  rI  r  r  r  r  r  r'  r7  r9  r;  r=  r>  rL  rx  ry  r  r  r  r  r4   mainr7   r7   r7   r8   <module>   sJ   P






	





1

	

	
	



"


4a    	( Y#   
  
  
  
@ h_- 
