U
    iâËdŠë  ã                   @   s  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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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZBmCZC zd dlDmE  mFZG W n eHk
�r�   dZGY nX G dd„ deIƒZJG dd„ dejKƒZLeLdƒZMeJƒ ZNe) OeJ¡dd„ ƒZPe,eLejQƒdd„ ƒZRdd„ ZSe1eLƒe0jTƒ e3eLƒdd„ ƒZUdd„ ZVeVdƒ\ZWZXZYe3eWƒdd„ ƒZZd³d d!„Z[d"d#„ Z\e*e[ƒe\ƒZ]e+e[ƒe+e[ej^ƒd$d%„ ƒƒZ_e+e[ej`ƒd&d'„ ƒZae>G d(d)„ d)e<ƒƒZbe+d*eLƒd+d,„ ƒZcd-d.„ Zdd/d0„ Zed1d2„ Zfe-edƒd3d4„ ƒZge-edƒd5d6„ ƒZhe-eiƒd7d8„ ƒZje-ejkƒd9d:„ ƒZle-ejmƒd;d<„ ƒZne-ejoƒd=d>„ ƒZpe-ejqƒd?d@„ ƒZrdAdB„ ZsdCdD„ Zte-ejuƒdEdF„ ƒZvdGdH„ ZwdIdJ„ ZxdKdL„ ZydMdN„ ZzdOdP„ Z{e/eLdQƒdRdS„ ƒZ|dTdU„ Z}dVdW„ Z~dXdY„ ZdZd[„ Z€d\d]„ Z�d^d_„ Z‚d`da„ Zƒdbdc„ Z„ddde„ Z…dfdg„ Z†dhdi„ Z‡djdk„ Zˆdldm„ Z‰e-e‰ƒdndo„ ƒZŠdpdq„ Z‹drds„ ZŒdtdu„ Z�e?e�ƒG dvdw„ dwe@ƒƒZŽdxdy„ Z�G dzd{„ d{eIƒZ�G d|d}„ d}ej‘ƒZ’e1e’ƒG d~d„ de0jTƒƒZ“e?e�e’e�ƒƒ ee’ƒd€d�„ ƒZ”e-e	j•ƒd‚dƒ„ ƒZ–G d„d…„ d…eƒZ—G d†d‡„ d‡eƒZ˜G dˆd‰„ d‰eƒZ™dŠd‹„ Zše$G dŒd�„ d�eƒƒZ›dŽd�„ ZœG d�d‘„ d‘eƒZ�G d’d“„ d“e'jƒZžG d”d•„ d•e'jƒZŸe/eLd–d—d˜id™�dšd›„ ƒZ e/eLdœd—d�id™�dždŸ„ ƒZ¡e.eLd d—d˜id™�d¡d¢„ ƒZ¢e.eLd£d—d�id™�d¤d¥„ ƒZ£G d¦d§„ d§eƒZ¤G d¨d©„ d©eƒZ¥dªd«„ Z¦e$G d¬d­„ d­eƒƒZ§G d®d¯„ d¯eƒZ¨G d°d±„ d±eƒZ©eªd²k�re' «¡  dS )´é    N)Ú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__© r6   r6   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_extending.pyr1   H   s   r1   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.typeconvr9   Úsafe)ÚselfÚcontextÚtotyr9   r6   r6   r7   Úcan_convert_toM   s    zMyDummyType.can_convert_toN)r3   r4   r5   r@   r6   r6   r6   r7   r8   L   s   r8   Úmydummyc                 C   s   t S ©N)Úmydummy_type©ÚvalÚcr6   r6   r7   Útypeof_mydummyX   s    rG   c                 C   s   |   |d¡S )z2
    Implicit conversion from MyDummy to int.
    é*   )Úget_constant)r>   ÚbuilderZfromtyr?   rE   r6   r6   r7   Úmydummy_to_number]   s    rK   c                   C   s   t S rB   )rA   r6   r6   r6   r7   Ú	get_dummye   s    rL   c                 C   s   t |j ¡ ƒS rB   ©r"   r>   Úget_dummy_value©ÚtypÚobjrF   r6   r6   r7   Úunbox_indexl   s    rR   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>.DynTypeNr2   r6   r6   r6   r7   ÚDynTypev   s   rS   c                   @   s   e Zd ZdS )z,base_dummy_type_factory.<locals>.DynTypeTypeNr2   r6   r6   r6   r7   ÚDynTypeTypey   s   rT   c                    s   ˆ S rB   r6   rD   ©Údyn_type_typer6   r7   rG   ~   s    z/base_dummy_type_factory.<locals>.typeof_mydummy)Úobjectr   ÚOpaquer   Úregisterr   r   ÚOpaqueModel)ÚnamerS   rT   rG   r6   rU   r7   Úbase_dummy_type_factoryu   s    r\   Úmydummy2c                 C   s   t |j ¡ ƒS rB   rM   rO   r6   r6   r7   Úunbox_index2‰   s    r^   c                 C   s   t ‚d S rB   ©ÚNotImplementedError©Úxr6   r6   r7   Úfunc1“   s    rc   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 rB   )r   ÚnoneÚint32r:   ÚFloatra   r6   r6   r7   Útyper˜   s    ztype_func1_.<locals>.typer)Nr6   )r>   rg   r6   r6   r7   Útype_func1_—   s    
rh   c                 C   s   |   |jd¡S ©NrH   )rI   Úreturn_type)r>   rJ   ÚsigÚargsr6   r6   r7   Úfunc1_nullary¦   s    rm   c                 C   s   dd„ }|   ||||¡S )Nc                 S   s   t  d|  ¡S )Né   )ÚmathÚsqrtra   r6   r6   r7   Ú
func1_impl®   s    zfunc1_unary.<locals>.func1_impl)Zcompile_internal)r>   rJ   rk   rl   rq   r6   r6   r7   Úfunc1_unary¬   s    rr   c                   @   s   e Zd ZdZeejeƒgZdS )Ú
PrintDummyÚ
print_itemN)	r3   r4   r5   Úkeyr*   r   rd   rC   Zcasesr6   r6   r6   r7   rs   ¸   s   rs   rt   c                 C   s<   |\}|   |¡}| | d¡¡}| |¡ | |¡ |  ¡ S )Nzhello!)Zget_python_apiZunserializeZserialize_objectZprint_objectZdecrefrN   )r>   rJ   rk   rl   rb   ÚpyapiZstrobjr6   r6   r7   Úprint_dummy¾   s    


rw   c                 C   s   t ‚d S rB   r_   ©Úcondrb   Úyr6   r6   r7   ÚwhereÌ   s    r{   c                 C   s   t  | ||¡S )z8
    Wrap np.where() to allow for keyword arguments
    )Únpr{   rx   r6   r6   r7   Únp_whereÐ   s    r}   c                 C   s   t | ||d�S )N)rz   rb   )r{   rx   r6   r6   r7   Ú
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Útyr6   r6   r7   Ú	<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)
ry   rb   rz   r…   ÚresÚcfZxfZyfÚrfÚir6   r6   r7   Ú
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)ry   rb   rz   r…   rŠ   ÚidxrF   r6   r6   r7   rŽ   ú   s    
N)r:   r   ÚArrayÚdtyper   ÚTypingErrorÚall©ry   rb   rz   rŽ   r6   r6   r7   Ú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
            r6   )r|   r‡   )ry   rb   rz   ZscalÚarrr6   r6   r7   rŽ     s    
z*overload_where_scalars.<locals>.where_implN)r:   r   r�   r   r’   r”   r6   r6   r7   Úoverload_where_scalars  s
    

r—   c                 C   s   t | tƒrdd„ }|S d S )Nc                 S   s   dS )Né   r6   ©Úargr6   r6   r7   Úlen_impl+  s    z$overload_len_dummy.<locals>.len_impl©r:   r8   )rš   r›   r6   r6   r7   Ú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 ri   r6   ©Úarg1Úarg2r6   r6   r7   Údummy_add_impl7  s    z*overload_add_dummy.<locals>.dummy_add_impl©r:   r8   ÚMyDummyType2)rŸ   r    r¡   r6   r6   r7   Úoverload_add_dummy1  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©rQ   r�   r6   r6   r7   Údummy_delitem_implA  s    z2overload_dummy_delitem.<locals>.dummy_delitem_impl©r:   r8   r   ÚInteger)rQ   r�   r©   r6   r6   r7   Ú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é{   r6   r¨   r6   r6   r7   Údummy_getitem_implK  s    z2overload_dummy_getitem.<locals>.dummy_getitem_implrª   )rQ   r�   r®   r6   r6   r7   Úoverload_dummy_getitemG  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 rB   r¦   ©rQ   r�   rE   r6   r6   r7   Údummy_setitem_impl[  s    z2overload_dummy_setitem.<locals>.dummy_setitem_impl)r“   r:   r8   r   r«   )rQ   r�   rE   r±   r6   r6   r7   Úoverload_dummy_setitemQ  s    

ýÿr²   c                 C   s   t  | |¡S rB   ©ÚoperatorÚaddrž   r6   r6   r7   Úcall_add_operatora  s    r¶   c                 C   s   | | S rB   r6   rž   r6   r6   r7   Úcall_add_binope  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 ri   r6   rž   r6   r6   r7   Údummy_iadd_implo  s    z,overload_iadd_dummy.<locals>.dummy_iadd_implr¢   )rŸ   r    r¸   r6   r6   r7   Úoverload_iadd_dummyi  s     ÿr¹   c                 C   s   t  | |¡S rB   r³   rž   r6   r6   r7   Úcall_iadd_operatoru  s    rº   c                 C   s   | |7 } | S rB   r6   rž   r6   r6   r7   Úcall_iadd_binopy  s    r»   c                 C   s
   | |= d S rB   r6   r¨   r6   r6   r7   Úcall_delitem  s    r¼   c                 C   s   | | S rB   r6   r¨   r6   r6   r7   Úcall_getitemƒ  s    r½   c                 C   s   || |< d S rB   r6   r°   r6   r6   r7   Úcall_setitem‡  s    r¾   Úlengthc                 C   s   dd„ }|S )Nc                 S   s   t | ƒS rB   ©Úlenr™   r6   r6   r7   Úimp�  s    z#overload_method_length.<locals>.impr6   )rš   rÂ   r6   r6   r7   Úoverload_method_length‹  s    rÃ   c                 C   s   |   ¡ S rB   )r¿   ra   r6   r6   r7   Úcache_overload_method_usecase“  s    rÄ   c                   C   s   t ƒ S rB   ©rc   r6   r6   r6   r7   Úcall_func1_nullary—  s    rÆ   c                 C   s   t | ƒS rB   rÅ   ra   r6   r6   r7   Úcall_func1_unary›  s    rÇ   c                 C   s   t | ƒS rB   rÀ   ra   r6   r6   r7   Úlen_usecaseŸ  s    rÈ   c                 C   s   t | ƒ d S rB   r¦   ra   r6   r6   r7   Úprint_usecase£  s    rÉ   c                 C   s   | | S rB   r6   )rb   ru   r6   r6   r7   Úgetitem_usecase§  s    rÊ   c                 C   s   t  t  | ¡¡S rB   )r|   ÚcosÚsinra   r6   r6   r7   Únpyufunc_usecase«  s    rÍ   c                 C   s   | j S rB   )Ú_datara   r6   r6   r7   Úget_data_usecase¯  s    rÏ   c                 C   s   | j S rB   )Ú_indexra   r6   r6   r7   Úget_index_usecase³  s    rÑ   c                 C   s   | j S rB   )Zis_monotonic_increasingra   r6   r6   r7   Úis_monotonic_usecase·  s    rÒ   c                 C   s
   t | |ƒS rB   )r0   )ÚdataÚindexr6   r6   r7   Úmake_series_usecase»  s    rÕ   c                 C   s   |   ||¡S rB   )Zclip)rb   ÚloÚhir6   r6   r7   Úclip_usecase¿  s    rØ   c                   C   s   t S rB   ©r|   r6   r6   r6   r7   Úreturn_non_boxableÆ  s    rÚ   c                  C   s   dd„ } | S )Nc                   S   s   t S rB   rÙ   r6   r6   r6   r7   rÂ   Ì  s    z(overload_return_non_boxable.<locals>.impr6   )rÂ   r6   r6   r7   Úoverload_return_non_boxableÊ  s    rÛ   c                 C   s   t ƒ }| | ¡S rB   )rÚ   Úarange)ÚszÚmodr6   r6   r7   Únon_boxable_ok_usecaseÒ  s    rß   c                   C   s   t ƒ S rB   )rÚ   r6   r6   r6   r7   Únon_boxable_bad_usecase×  s    rà   c                 C   s   d S rB   r6   )Úfr6   r6   r7   Ú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*   rd   )r=   rl   Úkwsr6   r6   r7   Úgenericá  s    zMkFuncTyping.genericN)r3   r4   r5   rè   r6   r6   r6   r7   rã   ß  s   rã   c                   C   s   t dd„ ƒ d S )Nc                 S   s   | S rB   r6   ©Úar6   r6   r7   Ú<lambda>ç  ó    z#mk_func_test_impl.<locals>.<lambda>)râ   r6   r6   r6   r7   Úmk_func_test_implæ  s    rí   c                   @   s   e Zd ZdS )ÚMyClassNr2   r6   r6   r6   r7   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__r6   r7   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>   rl   rç   Zres_sigÚtemplateZcompiled_ovldsr6   r6   r7   Úget_call_typeû  s    zCallableTypeRef.get_call_typec                 C   s   t | j ¡ ƒ}|dfS )NT)Úlistrñ   Úkeys)r=   Zsigsr6   r6   r7   Úget_call_signatures  s    z#CallableTypeRef.get_call_signaturesc                 C   s
   | j | S rB   )rñ   )r=   rk   r6   r6   r7   Úget_impl_key  s    zCallableTypeRef.get_impl_key)r3   r4   r5   rô   rþ   r  r  Ú__classcell__r6   r6   rö   r7   rï   ò  s   rï   c                   @   s   e Zd Zdd„ ZdS )ÚCallableTypeModelc                 C   s   t j | ||¡ d S rB   )r   rZ   rô   )r=   ZdmmZfe_typer6   r6   r7   rô     s    zCallableTypeModel.__init__N)r3   r4   r5   rô   r6   r6   r6   r7   r    s   r  c                 C   s   |   ¡ S rB   )rN   )r>   rJ   r‚   Zpyvalr6   r6   r7   Úconstant_callable_typeref  s    r  c                 C   s   t | tƒrdd„ }|S d S )Nc                 S   s   dS )Nì   ï>[= r6   ©rQ   r6   r6   r7   rÂ   +  s    zoverload_np_exp.<locals>.imprœ   ©rQ   rÂ   r6   r6   r7   Ú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©ÚnopythonrH   ç      2@ç      @)rÆ   r   ÚassertPreciseEqualrÇ   ©r=   ÚpyfuncÚcfuncr6   r6   r7   Ú
test_func1:  s    z TestLowLevelExtending.test_func1c                 C   sF   t }t|dƒ}|  | ¡ d¡ t}t|tjfƒ}|  | d¡d¡ d S )Nr6   rH   r  r  )rÆ   r   r  Úentry_pointrÇ   r   Úfloat64©r=   r  Úcrr6   r6   r7   Útest_func1_isolatedC  s    
z)TestLowLevelExtending.test_func1_isolatedc                 C   s   |   tt¡ |  t¡ d S rB   )ÚassertIsÚ
type_func1rh   ÚassertIsNotNone©r=   r6   r6   r7   Ú!test_type_callable_keeps_functionK  s    z7TestLowLevelExtending.test_type_callable_keeps_functionc                 C   s&   t }t|dtjƒ}|  | ¡ d¡ d S )Nr6   g      E@)rL   r   r   r  r  r  r  r6   r6   r7   Útest_cast_mydummyO  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
        r6   Nc                 s   s   | ]}t |tjƒV  qd S rB   )r:   r   rå   )r�   rê   r6   r6   r7   rƒ   _  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_resr6   r6   r7   Útest_mk_func_literalT  s    

ÿþÿz*TestLowLevelExtending.test_mk_func_literalN)	r3   r4   r5   Ú__doc__r  r  r  r  r%  r6   r6   r6   r7   r
  2  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  )r/   r|   rÜ   r   rÈ   r  )r=   r�   r  r6   r6   r7   Útest_index_lenl  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 )NrH   é   éûÿÿÿTr  r.   )
r/   r|   re   r   rÊ   r  ÚsliceÚassertIsInstanceÚassertEqualrÿ   ©r=   r�   r  Úiir6   r6   r7   Útest_index_getitemq  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.
        rH   r*  r+  Tr  N)
r/   r|   re   r   rÍ   r-  r  rÎ   rË   rÌ   r/  r6   r6   r7   Útest_index_ufuncy  s
    zTestPandasLike.test_index_ufuncc                 C   s<   t t dddg¡ƒ}tdd�tƒ}||ƒ}|  ||j¡ d S )NrH   r*  r+  Tr  )r/   r|   re   r   rÏ   r  rÎ   )r=   r�   r  rÓ   r6   r6   r7   Ú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*  rH   é   F)r   rÒ   r/   r|   re   r.  )r=   r  r#  Úexpectedr�   Úgotr6   r6   r7   Ú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 ©	Nrn   é   r(  ç      ø?ç      @ç      @Tr  )r/   r|   re   r0   r  r   rÈ   r  )r=   r�   Úsr  r6   r6   r7   Ú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 r8  )
r/   r|   re   r0   r  r   rÑ   r-  r  rÎ   )r=   r�   r=  r  r6  r6   r6   r7   Ú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.
        rH   r*  r+  r.   rn   r(  Tr  N)r/   r|   re   r0   Úint64r   rÍ   r-  rÐ   r  rÎ   r  Ú_valuesrË   rÌ   ©r=   r�   r=  r  Ússr6   r6   r7   Ú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 )	NrH   r*  r+  r:  r;  r<  Tr  )r/   r|   re   r  r   rÕ   r-  r0   rÐ   r  rÎ   rA  )r=   r�   Údr  r6  r6   r6   r7   Ú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 )NrH   r*  r+  r:  r;  r<  Tr  gš™™™™™ù?g      @)r/   r|   re   r0   r  r   rØ   r-  rÐ   r  rÎ   r  rA  rB  r6   r6   r7   Útest_series_clip¼  s    zTestPandasLike.test_series_clipN)r3   r4   r5   r&  r)  r1  r2  r3  r7  r>  r?  rD  rF  rG  r6   r6   r6   r7   r'  f  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 rB   )r}   r  )rl   Úkwargsr5  r6  ©r  r=   r6   r7   ÚcheckÓ  s    

z0TestHighLevelExtending.test_where.<locals>.checkr(  r*  )rb   ry   rz   Fr.   rn   r9  r4  r   N)r~   r   r|   Zbool_re   ÚassertRaisesr   r’   r@  ÚassertInÚstrÚ	exception)r=   r  rK  Úraisesr6   rJ  r7   Ú
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˜   r9  r4  rn   N)r   rÈ   r  r1   ©r=   r  r6   r6   r7   Ú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   r1   r.  ÚsysÚstdoutÚgetvaluerR  r6   r6   r7   Ú
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.   rn   r(  rH   éT   N)r¶   r   r  ÚMyDummy2r1   r  r6   r6   r7   Ú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.   rn   r(  rH   rY  N)r·   r   r  rZ  r1   r  r6   r6   r7   Ú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 rX  )rº   r   r  rZ  r1   r  r6   r6   r7   Ú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  rZ  r1   r  r6   r6   r7   Ú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   r1   r   rú   r.  rV  ©r=   r  r  rQ   ÚeÚoutÚexcr6   r6   r7   Útest_delitem0  s     z#TestHighLevelExtending.test_delitemc                 C   s*   t }tdd�|ƒ}|  |tƒ dƒd¡ d S )NTr  r`  i¼  )r½   r   r  r1   r  r6   r6   r7   Útest_getitem@  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  r`  r­   z321 123
)r¾   r   r1   r   rú   r.  rV  ra  r6   r6   r7   Útest_setitemE  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à   rL  Ú	TypeErrorrN  rO  rM  )	r=   Zok_cfuncÚnr6  ÚexpectZ	bad_cfuncrP  ÚerrmsgZ	expectmsgr6   r6   r7   Útest_no_cpython_wrapperU  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 rB   r6   ©rê   ÚbrF   Úkwr6   r6   r7   Ú
myoverloado  s    zjTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>.myoverloadc                    s   ˆ S rB   r6   ro  )Úimplr6   r7   Ú_myoverload_implr  s    zpTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>._myoverload_implTr  c                    s   ˆ | |||d� d S )N©rq  r6   )rê   rp  rF   rE  ©rr  r6   r7   Úfoov  s    zcTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>.foo)N)N©r   r   )rs  rt  rw  r6   )rs  rr  r7   Úgen_oln  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 ©Nrh  r.   éÿÿÿÿr6   ro  r6   r6   r7   Úimpl1  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl1r.   rn   r(  r9  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{  r6   )rê   rp  rF   Úkwargr6   r6   r7   Ú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é   )Úzrp  rF   rq  r6   r6   r7   Ú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{  r6   )rê   rp  rF   rE  rb  rq  r6   r6   r7   Ú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{  r6   )rê   rp  rq  r6   r6   r7   Ú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{  r6   )rê   rp  rF   rq  Zextra_kwargr6   r6   r7   Ú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{  r6   )rê   rp  rF   r6   r6   r7   Úimpl9í  s    zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl9)N)rz  )N)N)N)N)NN)
rL  r   r’   rN  rO  rM  ÚassertFalseÚoverload_usecasesrƒ  r„  )r=   ry  Úsentinelr}  rb  Úmsgr  r�  rƒ  r„  r…  r†  r‡  rˆ  r6   r6   r7   Ú/test_typing_vs_impl_signature_mismatch_handlingh  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 rB   r6   ©rê   rq  r6   r6   r7   rr     s    ziTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positional.<locals>.myoverloadr.   )Úvar_positional_implTr  c                    s   ˆ | |ddd�S )Né	   é   ru  r6   ©rê   rp  rv  r6   r7   rw    s    zbTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positional.<locals>.foor4  z)VAR_POSITIONAL (e.g. *args) argument kindz-offending argument name is '*star_args_token')N)
rŠ  r�  r   r   rL  r   r’   rN  rO  rM  )r=   r�  rw  rb  rŒ  r6   rv  r7   Ú>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 rB   r6   rŽ  r6   r6   r7   rr    s    zvTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_ol.<locals>.myoverload©ÚstrictTr  c                    s   ˆ | dd�S )Nr‘  ru  r6   r’  rv  r6   r7   rw    s    zoTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_ol.<locals>.foo)Nrx  )rs  r•  rw  r6   rv  r7   ry    s
    
zbTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_olc                 [   s   ddd„}|S )Nrh  c                 S   s   | S rB   r6   rŽ  r6   r6   r7   rs  $  s    zmTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol1.<locals>.impl)rh  r6   )rê   rç   rs  r6   r6   r7   Úol1#  s    
z_TestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol1Fr.   rn   z1use of VAR_KEYWORD (e.g. **kwargs) is unsupportedz"offending argument name is '**kws'r   c                 S   s   dd„ }|S )Nc                 [   s   | S rB   r6   )rê   rç   r6   r6   r7   rs  2  s    zmTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol2.<locals>.implr6   )rê   rq  rs  r6   r6   r7   Úol21  s    z_TestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol2N)T)r   )rL  r   r’   rN  rO  rM  )r=   ry  r–  rb  rŒ  r—  r6   r6   r7   Ú;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 )
Nrw  rh  c                 S   s   ddd„}|S )Nrh  c                 S   s   |S rB   r6   )r–   Úa_kwargr6   r6   r7   rs  A  s    zQTestHighLevelExtending.test_overload_method_kwargs.<locals>.fooimpl.<locals>.impl)rh  r6   )r–   r™  rs  r6   r6   r7   Úfooimpl?  s    
zCTestHighLevelExtending.test_overload_method_kwargs.<locals>.fooimplc                 S   s   |   ¡ |   d¡| j dd�fS )Né   é   )r™  ©rw  ©ÚAr6   r6   r7   ÚbarF  s    z?TestHighLevelExtending.test_overload_method_kwargs.<locals>.barr4  )rh  r›  rœ  )rh  )r   r   r�   r   r|   rÜ   r.  )r=   rš  r   ÚZr6   r6   r7   Ú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 rB   r6   )r–   rE   r6   r6   r7   rs  W  s    zXTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.litfoo.<locals>.impl)r:   r   r«   ÚLiteral)r–   rE   rs  r6   r6   r7   r£  P  s    zJTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.litfooc                 S   s
   |   d¡S ©NéþÊ  )r£  rž  r6   r6   r7   r   \  s    zGTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.barr.   r¦  )r   r   r�   r   r|   Zzerosr.  )r=   r£  r   rŸ  r6   r6   r7   Ú#test_overload_method_literal_unpackN  s    



z:TestHighLevelExtending.test_overload_method_literal_unpackc                 C   s   t dd„ ƒ}|  |ƒ d¡ d S )Nc                   S   s
   t  t¡S rB   )r|   ÚexprA   r6   r6   r6   r7   Útesth  s    z8TestHighLevelExtending.test_overload_ufunc.<locals>.testr  )r   r.  )r=   r©  r6   r6   r7   Útest_overload_ufuncd  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 rB   r6   )rQ   rE   Úval2rl   r6   r6   r7   Úgetq  s    z\TestHighLevelExtending.test_overload_method_stararg.<locals>._ov_method_stararg.<locals>.getr6   )rQ   rE   r¬  rl   r­  r6   r6   r7   Ú_ov_method_starargo  s    zOTestHighLevelExtending.test_overload_method_stararg.<locals>._ov_method_starargc                 W   s
   | j |Ž S rB   ©r«  )rQ   rl   r6   r6   r7   rw  v  s    z@TestHighLevelExtending.test_overload_method_stararg.<locals>.foor.   rn   ©r.   rn   r6   r(  ©r.   rn   ©r(  r9  ©r.   rn   ©r(  r9  c                 S   s(   |   dd¡|   ddd¡|   dddd¡fS )Nr.   rn   r(  r9  r¯  r  r6   r6   r7   r   €  s    
ýz@TestHighLevelExtending.test_overload_method_stararg.<locals>.bar)r°  r±  r³  r²  )r.   rn   )r²  r´  )r.   rn   )r´  ©r(  )r9  r4  )r.   rn   )rµ  ©r   r8   r   r1   r.  )r=   r®  rw  rQ   r   r6   r6   r7   Útest_overload_method_starargn  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>.MyArrayNr2   r6   r6   r6   r7   ÚMyArray›  s   r¸  Úarray_allocc                 S   s   dd„ }|S )Nc                 S   s   t  |¡}|S rB   ©r|   rÜ   )ÚclsÚnitemsr–   r6   r6   r7   rs     s    
zVTestHighLevelExtending.test_overload_classmethod.<locals>.ol_array_alloc.<locals>.implr6   )r»  r¼  rs  r6   r6   r7   Úol_array_allocž  s    zHTestHighLevelExtending.test_overload_classmethod.<locals>.ol_array_allocc                    s
   ˆ   | ¡S rB   )r¹  ©r¼  ©r¸  r6   r7   rw  ¥  s    z=TestHighLevelExtending.test_overload_classmethod.<locals>.foor˜   c                 S   s   t j | ¡S rB   )r   r�   r¹  r¾  r6   r6   r7   Ú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Ü   rL  r   r’   rM  rN  rO  )r=   r½  rw  r¼  rÀ  rP  r6   r¿  r7   Ú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@r6   ra   r6   r6   r7   rs  ¾  s    zeTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld1.<locals>.impl)r:   r   r«   ©rb   rs  r6   r6   r7   Ú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.5r6   ra   r6   r6   r7   rs  Å  s    zeTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld2.<locals>.impl)r:   r   ZUnicodeTyperÃ  r6   r6   r7   Úcallable_type_call_ovld2Â  s    zWTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld2c                 S   s   t | ƒt |ƒfS rB   )rî   r’  r6   r6   r7   rw  Ê  s    zBTestHighLevelExtending.test_overload_callable_typeref.<locals>.foo)r9  Ú4rÂ  r   rÅ  r.   )r   rï   r   r  )r=   rÄ  rÆ  rw  rl   r5  r6   r6   r7   Útest_overload_callable_typeref¹  s    


z5TestHighLevelExtending.test_overload_callable_typerefN)r3   r4   r5   r&  rQ  rS  rW  r[  r]  r^  r_  re  rf  rg  rn  r�  r“  r˜  r¢  r§  rª  r·  rÁ  rÈ  r6   r6   r6   r7   rH  Ç  s,   	 ,
+ rH  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missr6   r6   r7   Ú_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÷   r3   Ú
_cache_dirr   Úrun_caching_overload_methodr  r6   r6   r7   Ú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�   Úlnr6   r6   r7   Ú
<listcomp>í  s   
 þzITestOverloadMethodCaching.run_caching_overload_method.<locals>.<listcomp>Úspawn)Útargetrl   )Útimeout)r   rÄ   r  r1   rÊ  Zinspect_llvmrC   Ú
splitlinesr.  rÁ   ÚmultiprocessingZget_contextÚAttributeErrorÚQueueÚProcessrÎ  rÍ  ÚstartÚputÚjoinÚexitcoder­  )r=   r  ZllvmirZdeclsÚctxÚqÚprŠ   r6   r6   r7   rÎ  ç  s.    þ
 ÿz5TestOverloadMethodCaching.run_caching_overload_methodN)r3   r4   r5   Ú_numba_parallel_test_rÏ  rÎ  r6   r6   r6   r7   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Š   r6   r6   r7   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 rB   r6   ©r>   rJ   r*   rl   r6   r6   r7   Úcodegen  s    zBTestIntrinsic.test_void_return.<locals>.void_func.<locals>.codegen©r   Úvoidre   ©r$  rê   rk   rè  r6   r6   r7   Ú	void_func  s    z1TestIntrinsic.test_void_return.<locals>.void_funcc                 S   s   t  t j¡}dd„ }||fS )Nc                 S   s   d S rB   r6   rç  r6   r6   r7   rè  '  s    zFTestIntrinsic.test_void_return.<locals>.non_void_func.<locals>.codegen)r   re   rë  r6   r6   r7   Únon_void_func#  s    z5TestIntrinsic.test_void_return.<locals>.non_void_funcTr  c                      s   ˆ dƒ dS ©Nr.   r   r6   r6   )rì  r6   r7   Úcall_void_func,  s    z6TestIntrinsic.test_void_return.<locals>.call_void_funcc                      s   ˆ dƒ dS rî  r6   r6   )rí  r6   r7   Úcall_non_void_func1  s    z:TestIntrinsic.test_void_return.<locals>.call_non_void_funcr   znon-void function returns NoneN)r#   r   r.  rL  r   rM  rO  rŒ  )r=   rï  rð  rb  r6   )rí  rì  r7   Ú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 rB   )rj   Zget_value_typeZinttoptr)r>   rJ   r*   rl   ÚsrcZrtypeZllrtyper6   r6   r7   rè  N  s    
z_TestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_caster.<locals>.unsafe_cast.<locals>.codegen)r-  r	   ÚContextr:   r   r«   Zuintp)r$  rö  rk   rè  )Úresult_typer=   r6   r7   Úunsafe_castG  s
    
zNTestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_caster.<locals>.unsafe_cast)r:   r   ÚCPointerræ   r#   )rø  rù  r  )rø  r7   Úunsafe_casterD  s    z9TestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_casterc                 S   s   t dƒ‚d S )Nznot callable from pythonr_   ©rö  r6   r6   r7   Úunsafe_get_ctypes_pointerZ  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ù  r6   r7   Ú
array_implb  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ÿ  r7   Ú$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 rB   )rˆ   r§   )Úptrrk  r�   r6   r6   r7   Úmy_c_fun_rawh  s    z8TestIntrinsic.test_ll_pointer_cast.<locals>.my_c_fun_rawNTr  c                    s   ˆ| ƒ}ˆ || j ƒ d S rB   )r‰   )r–   r  )Úmy_c_funrý  r6   r7   rw  q  s    z/TestIntrinsic.test_ll_pointer_cast.<locals>.foorh  )r‘   )rþ  rò  ró  rô  rõ  r   r   r|   rÜ   Zfloat32r   rV  rØ  Úcloserÿ   ÚmaprN  r.  )r=   rò  ró  rô  rõ  r  r  Z	prototyperw  r–   Úbufr6  rl  r6   )r  r=   rû  rý  r7   Ú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ä   r6   rç  r6   r6   r7   rè  †  s    zCTestIntrinsic.test_serialization.<locals>.identity.<locals>.codegenr6   )r>   rb   rè  rk   r6   r6   r7   Úidentity„  s    z2TestIntrinsic.test_serialization.<locals>.identityTr  c                    s   ˆ | ƒS rB   r6   ra   ©r	  r6   r7   rw  �  s    z-TestIntrinsic.test_serialization.<locals>.foor.   N)
r#   r   r.  r$   Ú_memorÁ   ÚpickleÚdumpsÚloadsr  )r=   rw  ÚmemoÚ	memo_sizeZserialized_fooZfoo_rebuiltZserialized_identityZidentity_rebuiltr6   r
  r7   Ú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ä   r6   rç  r6   r6   r7   rè  ³  s    zATestIntrinsic.test_deserialization.<locals>.defn.<locals>.codegenr6   )r>   rb   rè  r6   r6   r7   Údefn²  s    z0TestIntrinsic.test_deserialization.<locals>.defnrw  r.   N)r$   r  rÁ   r  Z_defnr  r  r.  Z_recentÚclearr  ZassertIsNot)r=   r  r  r  ÚoriginalZpickledZrebuiltÚsecondr6   r6   r7   Ú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 rB   r6   rç  r6   r6   r7   rè  Ü  s    z@TestIntrinsic.test_docstring.<locals>.void_func.<locals>.codegenré  rë  r6   r6   r7   rì  ×  s    z/TestIntrinsic.test_docstring.<locals>.void_funcznumba.tests.test_extendingrì  rê   r  )	r#   Úintr.  r4   r3   r5   ZassertDictEqualÚ__annotations__r&  )r=   rì  r6   r6   r7   Útest_docstringÕ  s    
ÿzTestIntrinsic.test_docstringN)r3   r4   r5   rñ  r  r  r  r  r6   r6   r6   r7   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 rB   r6   ©rb   rz   r6   r6   r7   rw  ì  s    z.TestRegisterJitable.test_no_flags.<locals>.fooc                    s
   ˆ | |ƒS rB   r6   r  r�  r6   r7   r   ð  s    z.TestRegisterJitable.test_no_flags.<locals>.barTr  r.   rn   )r%   r   r.  )r=   r   Úcbarrl  r6  r6   r�  r7   Ú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 rB   rº  ©rk  r6   r6   r7   rw  ú  s    z2TestRegisterJitable.test_flags_no_nrt.<locals>.fooc                    s   ˆ | ƒS rB   r6   r   r�  r6   r7   r   þ  s    z2TestRegisterJitable.test_flags_no_nrt.<locals>.barr(  r   r.   rn   Tr  úCOnly accept returning of array passed into the function as argument)
r%   r.  Útolistr   rL  r   r’   rM  rN  rO  )r=   r   r  rP  rŒ  r6   r�  r7   Útest_flags_no_nrtù  s    
ÿz%TestRegisterJitable.test_flags_no_nrtN)r3   r4   r5   r  r#  r6   r6   r6   r7   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 rB   r6   ra   ©Z_j0r6   r7   rë     rì   z@TestImportCythonFunction.test_getting_function.<locals>.<lambda>r   r.   )r&   rþ  rò  Zc_doubler   r.  )r=   ÚaddrZfunctyper&  r6   r'  r7   Ú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'?)rL  ÚImportErrorr&   ÚreÚmatchrN  rO  r  )r=   rP  rŒ  r,  r6   r6   r7   Ú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%  rw  zINo function 'foo' found in __pyx_capi__ of 'scipy.special.cython_special')rL  r†   r&   r.  rN  rO  )r=   rP  rŒ  r6   r6   r7   Útest_missing_function   s     ÿÿz.TestImportCythonFunction.test_missing_function)	r3   r4   r5   ÚunittestZskipIfÚscr)  r-  r.  r6   r6   r6   r7   r$    s
   
	r$  Úmethod_jit_option_check_nrtr  T©Zjit_optionsc                 C   s   dd„ }|S )Nc                 S   s
   t  d¡S ©Nrh  rº  r  r6   r6   r7   rÂ   1  s    z+ov_method_jit_option_check_nrt.<locals>.impr6   r  r6   r6   r7   Úov_method_jit_option_check_nrt-  s    r4  Úmethod_jit_option_check_no_nrtFc                 C   s   dd„ }|S )Nc                 S   s
   t  d¡S r3  rº  r  r6   r6   r7   rÂ   ;  s    z.ov_method_jit_option_check_no_nrt.<locals>.impr6   r  r6   r6   r7   Ú!ov_method_jit_option_check_no_nrt7  s    r6  Úattr_jit_option_check_nrtc                 C   s   dd„ }|S )Nc                 S   s
   t  d¡S r3  rº  r  r6   r6   r7   rÂ   E  s    z)ov_attr_jit_option_check_nrt.<locals>.impr6   r  r6   r6   r7   Úov_attr_jit_option_check_nrtA  s    r8  Úattr_jit_option_check_no_nrtc                 C   s   dd„ }|S )Nc                 S   s
   t  d¡S r3  rº  r  r6   r6   r7   rÂ   O  s    z,ov_attr_jit_option_check_no_nrt.<locals>.impr6   r  r6   r6   r7   Úov_attr_jit_option_check_no_nrtK  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!  )rL  r   r’   rM  rN  rO  )r=   Úfuncrl   rI  rŒ  rP  r6   r6   r7   Úcheck_error_no_nrtX  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 r3  rº  r6   r6   r6   r7   Údummyc  s    z8TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.dummyr  r2  c                  S   s   dd„ } | S )Nc                   S   s
   t  d¡S r3  rº  r6   r6   r6   r7   r>  h  s    zJTestJitOptionsNoNRT.no_nrt_overload_check.<locals>.ov_dummy.<locals>.dummyr6   ©r>  r6   r6   r7   Úov_dummyf  s    z;TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.ov_dummyc                      s   ˆ ƒ S rB   r6   r6   r?  r6   r7   rw  m  s    z6TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.foorh  )r   r   r  r|   rÜ   r=  )r=   Úflagr@  rw  r6   r?  r7   Úno_nrt_overload_checkb  s    
z)TestJitOptionsNoNRT.no_nrt_overload_checkc                 C   s   |   d¡ |   d¡ d S )NTF)rB  r  r6   r6   r7   Útest_overload_no_nrtv  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 rB   )r1  ra   r6   r6   r7   Úudt{  s    z<TestJitOptionsNoNRT.test_overload_method_no_nrt.<locals>.udtrh  c                 S   s   |   ¡ S rB   )r5  ra   r6   r6   r7   rD  �  s    ©r   r  rA   r|   rÜ   r=  ©r=   rD  r6   r6   r7   Útest_overload_method_no_nrtz  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 rB   )r7  ra   r6   r6   r7   rD  ˆ  s    z?TestJitOptionsNoNRT.test_overload_attribute_no_nrt.<locals>.udtrh  c                 S   s   | j S rB   )r9  ra   r6   r6   r7   rD  Ž  s    rE  rF  r6   r6   r7   Útest_overload_attribute_no_nrt‡  s    

z2TestJitOptionsNoNRT.test_overload_attribute_no_nrtN)r3   r4   r5   r=  rB  rC  rG  rH  r6   r6   r6   r7   r;  U  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\   rT   rS   rV   Údyn_type)r=   Úmanyrö   r6   r7   rJ  –  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 rB   ©rµ   rø   ©r>   rJ   rk   rl   rE   ©Úmagic_offsetr6   r7   rs  ¥  s    zKTestBoxingCallingJIT.test_unboxer_basic.<locals>.my_intrinsic.<locals>.impl©r*   ©r$  rE   rs  rk   rO  r6   r7   Ú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 rB   r6   ra   ©rS  r6   r7   Úbridge¯  s    zHTestBoxingCallingJIT.test_unboxer_basic.<locals>.unboxer.<locals>.bridge©Úis_error©	r>   rI   r   Úintpr*   Zvoidptrrv   Úcall_jit_coder"   ©rP   rQ   rF   rU  rl   rk   rW  rŠ   ©Úmagic_tokenrS  r6   r7   Úunboxer¬  s
    z8TestBoxingCallingJIT.test_unboxer_basic.<locals>.unboxerc                 S   s   |j  |tj¡}|j |¡S rB   ©rJ   Zptrtointr   Zintp_trv   Úlong_from_ssize_t©rP   rE   rF   rŠ   r6   r6   r7   Úboxer¹  s    z6TestBoxingCallingJIT.test_unboxer_basic.<locals>.boxerc                 S   s   | S rB   r6   ra   r6   r6   r7   Úpassthru¿  s    z9TestBoxingCallingJIT.test_unboxer_basic.<locals>.passthru©r#   r!   rT   r    r   rK  r.  )r=   r^  rb  rc  rc  r6   ©rP  r]  rS  r7   Ú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†   ra   r6   r6   r7   rU  Ë  s    zHTestBoxingCallingJIT.test_unboxer_raise.<locals>.unboxer.<locals>.bridger.   rV  rX  r[  r6   r6   r7   r^  È  s
    z8TestBoxingCallingJIT.test_unboxer_raise.<locals>.unboxerc                 S   s   |j  |tj¡}|j |¡S rB   r_  ra  r6   r6   r7   rb  Õ  s    z6TestBoxingCallingJIT.test_unboxer_raise.<locals>.boxerc                 S   s   | S rB   r6   ra   r6   r6   r7   rc  Û  s    z9TestBoxingCallingJIT.test_unboxer_raise.<locals>.passthrurg  ©
r!   rT   r    r   rL  r†   rK  rM  rN  rO  ©r=   r^  rb  rc  rP  r6   r6   r7   Ú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 rB   rM  rN  rO  r6   r7   rs  í  s    zCTestBoxingCallingJIT.test_boxer.<locals>.my_intrinsic.<locals>.implrQ  rR  rO  r6   r7   rS  ê  s    
z5TestBoxingCallingJIT.test_boxer.<locals>.my_intrinsicc                 S   s   t |j ¡ ƒS rB   rM   rO   r6   r6   r7   r^  ô  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 rB   r6   ra   rT  r6   r7   rU  û  s    z>TestBoxingCallingJIT.test_boxer.<locals>.boxer.<locals>.bridge)r>   rI   r   rY  r*   rv   rZ  r`  )rP   rE   rF   rU  rl   rk   rW  rŠ   r\  r6   r7   rb  ø  s
    z.TestBoxingCallingJIT.test_boxer.<locals>.boxerc                 S   s   | S rB   r6   ra   r6   r6   r7   rc    s    z1TestBoxingCallingJIT.test_boxer.<locals>.passthrurd  )r=   r^  rb  rc  Úrr6   re  r7   Ú
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 rB   rM   rO   r6   r6   r7   r^    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 > 0rh  ra   r6   r6   r7   rU    s    zDTestBoxingCallingJIT.test_boxer_raise.<locals>.boxer.<locals>.bridger.   T)Úzfill)r>   rI   r   rY  r*   rv   rZ  r   Zalloca_oncerJ   ZpyobjZif_thenÚnot_r`  ÚstoreÚload)
rP   rE   rF   rU  rl   rk   rW  rŠ   ÚretvalrQ   r6   r6   r7   rb    s    z4TestBoxingCallingJIT.test_boxer_raise.<locals>.boxerc                 S   s   | S rB   r6   ra   r6   r6   r7   rc  !  s    z7TestBoxingCallingJIT.test_boxer_raise.<locals>.passthrurn  ri  rj  r6   r6   r7   Útest_boxer_raise
  s    


 ÿz%TestBoxingCallingJIT.test_boxer_raise)	r3   r4   r5   rJ  rf  rk  rm  rt  r  r6   r6   rö   r7   rI  •  s
   *%rI  c                 C   s   d S rB   r6   ra   r6   r6   r7   Úwith_objmode_cache_ov_example,  s    ru  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  r6   r6   r7   rJ  9  s    z TestCachingOverloadObjmode.setUpc                 C   s   t  ¡  d S rB   )rx  Úresetwarningsr  r6   r6   r7   Ú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 rB   )r|   rÜ   ZlinalgZnorm)rb   r–   r6   r6   r7   ÚrealworkC  s    zJTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.realworkc                    s   ˆ | ƒS rB   r6   ra   )r|  r6   r7   Úpython_codeH  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  )rz   ©r   r  ©r}  r6   r7   rs  N  s    zqTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>._ov_with_objmode_cache_ov_example.<locals>.implr6   rÃ  r€  r6   r7   Ú!_ov_with_objmode_cache_ov_exampleL  s    zcTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>._ov_with_objmode_cache_ov_exampleT©rÑ  c                 S   s   t | ƒS rB   )ru  ra   r6   r6   r7   ÚtestcaseU  s    zJTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.testcaser­   )	r   r÷   r3   r   r   ru  r   r.  Úpy_func)r=   rå  r�  rƒ  rl  r6  Ztestcase_cachedr6   )r}  r|  r7   Útest_caching_overload_objmode?  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 rB   ©r|   Úsumr’  r6   r6   r7   Údo_thisc  s    zGTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.do_thisc                 S   s   t  | | ¡S rB   r†  r’  r6   r6   r7   Údo_somethingf  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ê   rp  rz   ©rˆ  r6   r7   Ú_do_something_implk  s    zqTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.overload_do_something.<locals>._do_something_implr6   )rê   rp  r‹  rŠ  r6   r7   Úoverload_do_somethingi  s    zUTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.overload_do_somethingTr‚  c                     s   t  d¡} t  d¡}ˆ | |ƒS )Nr›  rº  r’  )r‰  r6   r7   Útest_cachingq  s    

zLTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.test_cachingzincorrect result)r   r   r„  ræ   )r»  rŒ  r�  r6  rl  r6   )r‰  rˆ  r7   Úcheck_objmode_cache_ndarraya  s    z6TestCachingOverloadObjmode.check_objmode_cache_ndarrayc                 C   s   |   ¡  d S rB   )rŽ  )r»  r6   r6   r7   Ú*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dispr6   r6   r7   Ú'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÷   r3   r   r   r�  r‘  r.  )r=   rå  rŠ   r6   r6   r7   Ú test_check_objmode_cache_ndarray‹  s     ÿ ÿz;TestCachingOverloadObjmode.test_check_objmode_cache_ndarrayN)r3   r4   r5   r&  rä  rJ  r{  r…  ÚclassmethodrŽ  r�  r‘  r’  r6   r6   r6   r7   rv  2  s   "


rv  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 rB   r6   ra   r6   r6   r7   rw  �  s    z$TestMisc.test_is_jitted.<locals>.fooT)Úparallelzvoid(float64[:])z(m))r‰  r'   r   r   r   r   )r=   rw  r6   r6   r7   Ú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…   r6   r6   r6   r7   Ú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™  r6   r6   r6   r7   Úreversed_order¯  s    z:TestMisc.test_overload_arg_binding.<locals>.reversed_order)r   r  r„  )r=   r›  rœ  r6   r6   r7   Útest_overload_arg_binding¨  s    

z"TestMisc.test_overload_arg_bindingN)r3   r4   r5   r–  r�  r6   r6   r6   r7   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 rB   r6   ra   r6   r6   r7   Ú
prefer_lit¹  s    z;TestOverloadPreferLiteral.test_overload.<locals>.prefer_litc                 S   s   d S rB   r6   ra   r6   r6   r7   Ú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¥  r6   ra   r6   r6   r7   rs  Ã  s    zATestOverloadPreferLiteral.test_overload.<locals>.ov.<locals>.implúliteral valuec                 S   s   | d S ©Néd   r6   ra   r6   r6   r7   rs  É  s    ©r:   r   ZIntegerLiteralZliteral_valuer   r’   rÃ  r6   r6   r7   Úov¿  s    
z3TestOverloadPreferLiteral.test_overload.<locals>.ovT©Zprefer_literalc                    s   ˆ dƒˆ dƒˆ | ƒfS ©Nr.   rn   r6   ra   )rŸ  r6   r7   Úcheck_prefer_litÐ  s    zATestOverloadPreferLiteral.test_overload.<locals>.check_prefer_litr(  r¦  éÈ   é,  c                    s   ˆ dƒˆ dƒˆ | ƒfS r§  r6   ra   )r   r6   r7   Úcheck_non_litÙ  s    z>TestOverloadPreferLiteral.test_overload.<locals>.check_non_litr£  )r   r   r.  ©r=   r¥  r¨  rê   rp  rF   r«  r6   )r   rŸ  r7   Ú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¥  r6   ©r=   rb   r6   r6   r7   rs  ç  s    zHTestOverloadPreferLiteral.test_overload_method.<locals>.ov.<locals>.implr¡  c                 S   s   |d S r¢  r6   r®  r6   r6   r7   rs  í  s    r¤  )r=   rb   rs  r6   r6   r7   r¥  ã  s    
z:TestOverloadPreferLiteral.test_overload_method.<locals>.ovÚmethod_prefer_literalTr¦  Úmethod_non_literalFc                 S   s   |   d¡|   d¡|   |¡fS r§  )r¯  ©r>  rb   r6   r6   r7   r¨  û  s    ýzHTestOverloadPreferLiteral.test_overload_method.<locals>.check_prefer_litr(  r¦  r©  rª  c                 S   s   |   d¡|   d¡|   |¡fS r§  )r°  r±  r6   r6   r7   r«    s    ýzETestOverloadPreferLiteral.test_overload_method.<locals>.check_non_litr£  r¶  r¬  r6   r6   r7   Útest_overload_methodâ  s6     þý þý

z.TestOverloadPreferLiteral.test_overload_methodN)r3   r4   r5   r­  r²  r6   r6   r6   r7   rž  ·  s   *rž  Ú__main__)N)¬ro   r´   rT  r  rÙ  rþ  rx  r+  Únumpyr|   Znumbar   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   r/  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_usecaser/   r0   Zscipy.special.cython_specialÚspecialZcython_specialr0  r*  rW   r1   rX   r8   rC   rA   rY   rG   r;   rK   rL   rZ   rR   r\   r£   rZ  Zmydummy_type_2r^   rc   rh   r  rd   rm   rf   rr   rs   rw   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'  rH  rÊ  rË  rÎ  ræ  r  r$  r4  r6  r8  r:  r;  rI  ru  rv  r”  rž  r3   Úmainr6   r6   r6   r7   Ú<module>   s>   P






	





1

	

	
	



"


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