U
    iâËdMœ  ã                   @   s–  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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 d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZmZ d dl m!Z" d dl#Z#e"d Z$zd dl%Z%W n e&k
�r   dZ%Y nX zd dl'Z'W n e&k
�r.   dZ'Y nX e (¡ dkZ)dd„ Z*dd„ Z+dd„ Z,dDdd„Z-dEdd„Z.dFdd„Z/dGdd„Z0dHd d!„Z1G d"d#„ d#eƒZ2G d$d%„ d%e2ƒZ3G d&d'„ d'e2ƒZ4G d(d)„ d)e4ƒZ5G d*d+„ d+eƒZ6G d,d-„ d-eƒZ7G d.d/„ d/eƒZ8G d0d1„ d1e#jƒZ9G d2d3„ d3e#jƒZ:edId5d6„ƒZ;edJd7d8„ƒZ<ed9d:„ ƒZ=ee=fd;d<„ƒZ>d=d>„ Z?G d?d@„ d@ee#jƒZ@G dAdB„ dBe#jƒZAeBdCk�r’e# C¡  dS )Ké    N)Úchain)ÚStringIO)ÚnjitÚjitÚgenerated_jitÚtypeofÚ	vectorize)ÚtypesÚerrors)Ú_dispatcher)Úcompile_isolated)ÚTestCaseÚcaptured_stdout)Úas_dtype)Ú
Dispatcher)Úneeds_lapackÚSerialMixin)Ú_TIMEOUTg      N@Úarmv7lc                 C   s   | S ©N© ©Úxr   r   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_dispatcher.pyÚdummy'   s    r   c                 C   s   | | S r   r   ©r   Úyr   r   r   Úadd+   s    r   c                 C   s   | | | S r   r   ©r   r   Úzr   r   r   Úaddsub/   s    r    é   é   c                 C   s   | | | S r   r   r   r   r   r   Úaddsub_defaults3   s    r#   c                 G   s
   | ||fS r   r   r   r   r   r   Ústar_defaults7   s    r$   é   c                 C   s"   t | tjƒrdd„ }ndd„ }|S )Nc                 S   s   | | S r   r   r   r   r   r   Úimpl=   s    zgenerated_usecase.<locals>.implc                 S   s   | | S r   r   r   r   r   r   r&   @   s    ©Ú
isinstancer	   ÚComplex©r   r   r&   r   r   r   Úgenerated_usecase;   s    
r+   c                 C   s$   t | tjƒrdd„ }n
ddd„}|S )Nc                 S   s   | S r   r   r   r   r   r   r&   G   s    z#bad_generated_usecase.<locals>.implé   c                 S   s   | | S r   r   r   r   r   r   r&   J   s    )r,   r'   r*   r   r   r   Úbad_generated_usecaseE   s    

r-   c                    sn   t |tjjtjjfƒr0tjdd„ | |fD ƒŽ ‰ n,t |tjtjfƒrLt	|ƒ‰ nt
dt|ƒ ƒ‚d‡ fdd„	}|S )Nc                 s   s   | ]}t  |jj¡V  qd S r   )ÚnpÚdtypeÚname)Ú.0Zaryr   r   r   Ú	<genexpr>Q   s   ÿz*dtype_generated_usecase.<locals>.<genexpr>zUnhandled Type %sc                    s   t j| jˆ d�S ©N©r/   )r.   ÚonesÚshape)ÚaÚbr/   ©Z	out_dtyper   r   Ú_fnX   s    z$dtype_generated_usecase.<locals>._fn)N)r(   r	   ÚmiscZNoneTypeZOmittedr.   Zresult_typeZDTypeZNumberClassr   Ú	TypeErrorÚtype)r7   r8   r/   r:   r   r9   r   Údtype_generated_usecaseO   s    
ÿ

r>   c                   @   s   e Zd Zedd�Zdd„ ZdS )ÚBaseTestT©Znopythonc                    s(   ‡ ‡‡fdd„}t f ˆjŽˆƒ‰ ˆ |fS )Nc                     s$   ˆ| |Ž}ˆ | |Ž}ˆ  ||¡ d S r   )ÚassertPreciseEqual)ÚargsÚkwargsÚexpectedÚresult©ÚfÚpyfuncÚselfr   r   Úcheckc   s    

z$BaseTest.compile_func.<locals>.check)r   Újit_args)rI   rH   rJ   r   rF   r   Úcompile_funcb   s    zBaseTest.compile_funcN)Ú__name__Ú
__module__Ú__qualname__ÚdictrK   rL   r   r   r   r   r?   ^   s   
r?   c                   @   sÐ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zee ed¡dd„ ƒƒZe ed¡d d!„ ƒZee ed¡d"d#„ ƒƒZd$d%„ Zd&d'„ Zd(S ))ÚTestDispatcherc                 C   sL   t dd„ ƒ}t dd„ ƒ}|  ||kd¡ |  ||kd¡ |  |d kd¡ d S )Nc                 S   s   | S r   r   r   r   r   r   Úfoon   s    z)TestDispatcher.test_equality.<locals>.fooc                 S   s   | S r   r   r   r   r   r   Úbarr   s    z)TestDispatcher.test_equality.<locals>.barTF©r   ÚassertEqual)rI   rR   rS   r   r   r   Útest_equalitym   s    

zTestDispatcher.test_equalityc                 C   s8   t dd„ ƒ}|dƒ |j ¡ \}|  |jj|jj¡ d S )Nc                 S   s   | S r   r   r   r   r   r   rR   ~   s    z+TestDispatcher.test_dyn_pyfunc.<locals>.fooé   )r   Ú	overloadsÚvaluesrU   Úentry_pointrN   Úpy_func)rI   rR   Úcrr   r   r   Útest_dyn_pyfunc}   s
    
zTestDispatcher.test_dyn_pyfuncc                 C   s   t dd„ ƒ}|ƒ  d S )Nc                   S   s   dS ©NrW   r   r   r   r   r   rR   ˆ   s    z,TestDispatcher.test_no_argument.<locals>.foo©r   ©rI   rR   r   r   r   Útest_no_argument‡   s    
zTestDispatcher.test_no_argumentc              	   C   sÒ   t dd�tƒ}|  |ddƒtddƒ¡ |  |ddƒtddƒ¡ |  |ddƒtddƒ¡ |  |ddƒtddƒ¡ t d	dd�tƒ}|  |ddƒtddƒ¡ |  |ddƒtd
dƒ¡ |  t¡� |ddƒ W 5 Q R X d S )NTr@   é{   iÈ  gš™™™™™(@gÍÌÌÌÌÌF@y        ÍÌÌÌÌÌF@l    F: z(i4, i4)é   é-   )r   r   rA   ÚassertRaisesr<   )rI   Zc_addr   r   r   Útest_coerce_input_types�   s    z&TestDispatcher.test_coerce_input_typesc                 C   sº   t dd„ ƒ}d}d}|  |||ƒ|| ¡ |  t|jƒd¡ |  |||ƒ|| ¡ |  t|jƒd¡ |  |||ƒ|| ¡ |  t|jƒd¡ |  |ddƒ|| ¡ |  t|jƒdd¡ d	S )
z8Test compiling new version in an ambiguous case
        c                 S   s   | | S r   r   ©r7   r8   r   r   r   rR   ¤   s    z6TestDispatcher.test_ambiguous_new_version.<locals>.foorW   ç      ø?r!   r"   é   zdidn't compile a new versionN)r   ZassertAlmostEqualrU   ÚlenrX   )rI   rR   ÚINTZFLTr   r   r   Útest_ambiguous_new_version¡   s    
z)TestDispatcher.test_ambiguous_new_versionc                    sh   g ‰ t dd„ ƒ‰‡ ‡‡fdd„‰‡fdd„tdƒD ƒ}|D ]}| ¡  q:|D ]}| ¡  qLˆ ˆ ¡ dS )	zz
        Test that (lazy) compiling from several threads at once doesn't
        produce errors (see issue #908).
        c                 S   s   | d S r^   r   r   r   r   r   rR   ½   s    z%TestDispatcher.test_lock.<locals>.fooc               
      sF   zˆ  ˆdƒd¡ W n, tk
r@ }  zˆ  | ¡ W 5 d } ~ X Y nX d S ©NrW   r!   )rU   Ú	ExceptionÚappend)Úe)r
   rR   rI   r   r   ÚwrapperÁ   s    z)TestDispatcher.test_lock.<locals>.wrapperc                    s   g | ]}t jˆ d �‘qS ))Útarget)Ú	threadingÚThread©r1   Úi©rq   r   r   Ú
<listcomp>Ç   s     z,TestDispatcher.test_lock.<locals>.<listcomp>é   N)r   ÚrangeÚstartÚjoinZassertFalse)rI   ÚthreadsÚtr   )r
   rR   rI   rq   r   Ú	test_lock¶   s    


zTestDispatcher.test_lockc              	   C   sb  t dƒtƒ}|  |ddƒd¡ |  t|jƒd|j¡ t ddgƒtƒ}|  |ddƒd¡ |  |ddƒd¡ |  |t d¡dƒd	¡ |  t	¡�}|d
d
ƒ W 5 Q R X |  
dt|jƒ¡ |  t|jƒd|j¡ t ddgƒtƒ}|  |t d¡t d¡ƒd¡ |  |ddƒd¡ t dddgƒtƒ}|  t	¡�}|ddƒ W 5 Q R X |  t|jƒd¡ |  dt|jƒ¡ d S )Nz(int64,int64)rh   ç      @r"   rW   z(float64,float64)r!   g      @ç      @ù              ð?zNo matching definitionz(float32,float32)g      `>ç      ð?g     ð?z(float32,float64)z(float64,float32)ç       @z†Ambiguous overloading for <function add [^>]*> \(float64, float64\):\n\(float32, float64\) -> float64\n\(float64, float32\) -> float64Zint64)r   r   rA   rU   rj   rX   r.   Úint32re   r<   ÚassertInÚstrÚ	exceptionÚfloat32ÚassertRegexpMatchesZassertNotIn©rI   rG   Úcmr   r   r   Útest_explicit_signaturesÎ   s6    þþþz'TestDispatcher.test_explicit_signaturesc              	   C   sü   d}|   t¡�}tdƒtƒ W 5 Q R X |  |d t|jƒ¡ |   t¡�}tdƒtƒ W 5 Q R X |  |d t|jƒ¡ |   t¡�}tdƒtƒ W 5 Q R X |  |d t|jƒ¡ tddd	�tƒ |   t¡�}tddd	�tƒ W 5 Q R X |  |d t|jƒ¡ d S )
NzKSignature mismatch: %d argument types given, but function takes 2 argumentsz()r   z(intc,)rW   z(intc,intc,intc)r"   T©Zforceobj)re   r<   r   r   r†   r‡   rˆ   )rI   ÚtmplrŒ   r   r   r   Útest_signature_mismatchô   s    z&TestDispatcher.test_signature_mismatchc              	   C   sB   t dƒtƒ}|  t¡�}|ddƒ W 5 Q R X |  t|jƒd¡ d S )Nz(intc,intc)r‚   zBNo matching definition for argument type(s) complex128, complex128)r   r   re   r<   rU   r‡   rˆ   r‹   r   r   r   Útest_matching_error_message  s    ÿz*TestDispatcher.test_matching_error_messagec              	   C   sf   t dd„ ƒ}| d¡ | ¡  |  t¡�}| d¡ W 5 Q R X |  t|jƒd¡ |  t|j	ƒd¡ d S )Nc                 S   s   | S r   r   ©r7   r   r   r   rR     s    z5TestDispatcher.test_disabled_compilation.<locals>.fooú
(float32,)ú(int32,)úcompilation disabledrW   )
r   ÚcompileZdisable_compilere   ÚRuntimeErrorrU   r‡   rˆ   rj   Ú
signatures©rI   rR   Úraisesr   r   r   Útest_disabled_compilation  s    

z(TestDispatcher.test_disabled_compilationc              	   C   s\   t ddgƒdd„ ƒ}|  t¡�}| d¡ W 5 Q R X |  t|jƒd¡ |  t|jƒd¡ d S )Nr“   r”   c                 S   s   | S r   r   r’   r   r   r   rR     s    zBTestDispatcher.test_disabled_compilation_through_list.<locals>.fooz(complex64,)r•   r!   )	r   re   r—   r–   rU   r‡   rˆ   rj   r˜   r™   r   r   r   Ú&test_disabled_compilation_through_list  s    

z5TestDispatcher.test_disabled_compilation_through_listc              	      sX   t dgƒdd„ ƒ‰ t ‡ fdd„ƒ}|  t¡�}|ƒ  W 5 Q R X d}|  t|jƒ|¡ d S )Nz(intp,)c                 S   s   | S r   r   r’   r   r   r   rR   %  s    zATestDispatcher.test_disabled_compilation_nested_call.<locals>.fooc                      s   ˆ dƒ ˆ t  d¡ƒ d S r^   )r.   r5   r   ©rR   r   r   rS   )  s    zATestDispatcher.test_disabled_compilation_nested_call.<locals>.barzANo matching definition for argument type(s) array(float64, 1d, C))r   re   r<   rU   r‡   rˆ   )rI   rS   rš   Úmr   r�   r   Ú%test_disabled_compilation_nested_call$  s    
z4TestDispatcher.test_disabled_compilation_nested_callc              	      sÒ   t dd„ ƒ‰ d}|  t¡�}t g ¡ W 5 Q R X |  |t|jƒ¡ |  ˆ g ƒg ¡ t dd�ˆ j	ƒ}|  t¡�}|g ƒ W 5 Q R X |  |t|jƒ¡ t ‡ fdd„ƒ}|  |ƒ g ¡ |j
 ¡ \}|  t|jƒd¡ d	S )
zÝ
        Failure in computing the fingerprint cannot affect a nopython=False
        function.  On the other hand, with nopython=True, a ValueError should
        be raised to report the failure with fingerprint.
        c                 S   s   | S r   r   r   r   r   r   rR   9  s    z4TestDispatcher.test_fingerprint_failure.<locals>.fooz(cannot compute fingerprint of empty listTr@   c                     s$   t ƒ  g } tdƒD ]}ˆ | ƒ} q| S )Né
   )Úobjectrz   )r   rv   r�   r   r   rS   K  s
    
z4TestDispatcher.test_fingerprint_failure.<locals>.barrW   N)r   re   Ú
ValueErrorr   Zcompute_fingerprintr†   r‡   rˆ   rU   r[   rX   rY   rj   Zlifted)rI   Úerrmsgrš   Z
strict_foorS   r\   r   r�   r   Útest_fingerprint_failure3  s     
z'TestDispatcher.test_fingerprint_failurec           	      C   sþ   t dd�dd„ ƒ}|  |dƒd¡ tj}tj ¡  t|ƒ}t |¡}|  |d t|ƒ¡ t 	|¡}|  |d t|ƒ¡ |  
||¡ t|ƒ}~~|  |d t|ƒ¡ t 	|¡}|  |t|ƒ¡ t |¡}~tj ¡  |  |t|ƒ¡ t 	|¡ |  
|ƒ d¡ dS )z:
        Test serialization of Dispatcher objects
        Tr@   c                 S   s   | d S r^   r   r   r   r   r   rR   \  s    z.TestDispatcher.test_serialization.<locals>.foorW   r!   N)r   rU   r   Z_memoZ_recentÚclearrj   ÚpickleÚdumpsÚloadsZassertIsÚidÚweakrefÚref)	rI   rR   ÚmemoZ	memo_sizeZserialized_fooZfoo_rebuiltZid_origZnew_foor«   r   r   r   Útest_serializationX  s.    







z!TestDispatcher.test_serializationzUnaligned loads unsupportedc           	         sØ   dd„ ‰ t dd�ˆ ƒ‰d‰tt ˆ¡ƒ‰tj}t ¡ j|ƒ j }tjˆ| d |d�}|d d…  tj¡ 	ˆˆ¡}|dd …  tj¡ 	ˆˆ¡}|j
}|j
}‡ ‡‡‡fd	d
„}|d|ƒ |d|ƒ |d|ƒ |d|ƒ d S )Nc                 S   s   t j | d¡S r^   ©r.   ZlinalgZmatrix_powerr’   r   r   r   rR   ‰  s    z:TestDispatcher.test_misaligned_array_dispatch.<locals>.fooTr@   é@   rW   r4   éÿÿÿÿc                    sJ   t jˆt jd� ˆˆ¡|d d …d d …f< ˆ |ƒ}ˆ|ƒ}t j ||¡ d S r3   ©r.   ÚarangeÚ
complex128ÚreshapeÚtestingÚassert_allclose©r0   r7   rD   Úgot©rR   ÚjitfooÚnÚrr   r   rJ   �  s    (z<TestDispatcher.test_misaligned_array_dispatch.<locals>.checkÚC_contig_alignedÚF_contig_alignedÚC_contig_misalignedÚF_contig_misaligned©r   Úintr.   ÚsqrtÚint8r³   Úitemsizer²   Úviewr´   ÚT©	rI   ÚdtÚcountÚtmpr½   r¿   r¾   rÀ   rJ   r   r¹   r   Útest_misaligned_array_dispatch…  s     


z-TestDispatcher.test_misaligned_array_dispatchc           	         sê   dd„ ‰ t dd�ˆ ƒ‰d‰tt ˆ¡ƒ‰tj}t ¡ j|ƒ j }tjˆ| d |d�}|d d…  tj¡ 	ˆˆ¡}|dd …  tj¡ 	ˆˆ¡}|j
}|j
}d‡ ‡‡‡fd
d„	}|d|dd� |d|dd� |d|dd� |d|dd� d S )Nc                 S   s
   t  | ¡S r   )r.   Úsumr’   r   r   r   rR   ±  s    z?TestDispatcher.test_immutability_in_array_dispatch.<locals>.fooTr@   r¯   rW   r4   r°   Fc                    sV   t jˆt jd� ˆˆ¡|d d …d d …f< |r4d|j_ˆ |ƒ}ˆ|ƒ}t j ||¡ d S )Nr4   F)r.   r²   r³   r´   ÚflagsZ	writeablerµ   r¶   )r0   r7   Údisable_write_bitrD   r¸   r¹   r   r   rJ   Å  s    (zATestDispatcher.test_immutability_in_array_dispatch.<locals>.checkr½   )rÏ   r¾   r¿   rÀ   )FrÁ   rÈ   r   r¹   r   Ú#test_immutability_in_array_dispatch­  s(    
ÿÿz2TestDispatcher.test_immutability_in_array_dispatchc           
         s  dd„ ‰ t dd�ˆ ƒ‰‡fdd„}d‰d‰tj}t ¡ j|ƒ j }tjˆ| d	 |d
�}|d d…  tj¡ ˆˆˆˆˆˆ¡}||ddƒ |d	d …  tj¡ ˆˆˆˆˆˆ¡}||ddƒ |j}||ddƒ |j}||ddƒ ‡ ‡‡‡fdd„}	|	d|ƒ |	d|ƒ |	d|ƒ |	d|ƒ d S )Nc              
   S   s&   t j | ddddd d …d d …f d¡S ©Nr   rW   r®   r’   r   r   r   rR   Ú  s    zITestDispatcher.test_misaligned_high_dimension_array_dispatch.<locals>.fooTr@   c                    sD   ˆ   | jj|¡ |dkr(ˆ   | jjd¡ |dkr@ˆ   | jjd¡ d S )NÚCTÚF)rU   rÎ   ÚalignedÚc_contiguousÚf_contiguous)ZarrZlayoutrÔ   ©rI   r   r   Úcheck_propertiesß  s
    zVTestDispatcher.test_misaligned_high_dimension_array_dispatch.<locals>.check_propertiesiÙ  r"   rW   r4   r°   rÒ   FrÓ   c                    sR   t jˆt jd� ˆˆˆˆˆˆ¡|d d …d d …f< ˆ |ƒ}ˆ|ƒ}t j ||¡ d S r3   r±   r·   r¹   r   r   rJ   û  s         ÿzKTestDispatcher.test_misaligned_high_dimension_array_dispatch.<locals>.checkrÀ   r½   r¾   r¿   )	r   r.   rÄ   r³   rÅ   r²   rÆ   r´   rÇ   )
rI   rØ   rÉ   rÊ   rË   r½   r¿   r¾   rÀ   rJ   r   )rR   rº   r»   r¼   rI   r   Ú-test_misaligned_high_dimension_array_dispatchÖ  sF         ÿ     ÿ	


z<TestDispatcher.test_misaligned_high_dimension_array_dispatchc                 C   sä   dd„ }t dd�|ƒ}|t d¡ƒ |t d¡ƒ |t d¡ƒ |  t|jƒd¡ tjftjftjfg}|  |j|¡ t tjfgdd�|ƒ}|t d¡ƒ |t d¡ƒ |t d¡ƒ |  t|jƒd	¡ tjfg}|  |j|¡ d S )
Nc                 S   s   | S r   r   r   r   r   r   rR     s    z@TestDispatcher.test_dispatch_recompiles_for_scalars.<locals>.fooTr@   y      ð?       @r    Fr"   rW   )	r   r.   r³   r…   Zbool_rU   rj   r˜   r	   )rI   rR   rº   Zexpected_sigsr   r   r   Ú$test_dispatch_recompiles_for_scalars	  s    
z3TestDispatcher.test_dispatch_recompiles_for_scalarsc              	   C   s¨   t dd�dd„ ƒ}|  t¡�}t |ƒ W 5 Q R X t|jƒ}|  d|¡ |  d|¡ |  d|¡ |  t¡�}t tƒ W 5 Q R X t|jƒ}|  d|¡ |  ttƒ› |¡ d S )	NTr@   c                 S   s   | S r   r   r   r   r   r   rR   (  s    zITestDispatcher.test_dispatcher_raises_for_invalid_decoration.<locals>.fooz8A jit decorator was called on an already jitted functionrR   z.py_funcz&The decorated object is not a function)r   re   r<   r‡   rˆ   r†   r?   r=   )rI   rR   rš   Úerr_msgr   r   r   Ú-test_dispatcher_raises_for_invalid_decoration%  s     

 ÿ
z<TestDispatcher.test_dispatcher_raises_for_invalid_decorationN)rM   rN   rO   rV   r]   ra   rf   rl   r   r�   r�   r‘   r›   rœ   rŸ   r¤   r­   r   ÚunittestÚskipIfÚ
_is_armv7lrÌ   rÐ   rÙ   rÚ   rÜ   r   r   r   r   rQ   k   s0   
&
%-
&

(
1rQ   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestSignatureHandlingz<
    Test support for various parameter passing styles.
    c              	   C   sè   |   t¡\}}|dddd� |dddƒ |dddd� |  t|jƒd¡ |  t¡�}|ddddd	� W 5 Q R X |  d
t|j	ƒ¡ |  t¡�}|ƒ  W 5 Q R X |  dt|j	ƒ¡ |  t¡�}|dddd� W 5 Q R X |  dt|j	ƒ¡ dS )z?
        Test passing named arguments to a dispatcher.
        r"   r    ri   ©r   r   r   rW   r,   é   ©r   r   ú%too many arguments: expected 3, got 4z'not enough arguments: expected 3, got 0©r   zmissing argument 'z'N)
rL   r    rU   rj   rX   re   r<   r†   r‡   rˆ   ©rI   rG   rJ   rŒ   r   r   r   Útest_named_args@  s$    ÿÿz%TestSignatureHandling.test_named_argsc              	   C   s  |   t¡\}}|dddd� |dddƒ |dddd� |ddd� |ddƒ |ddd� |dƒ |dd� |  t¡�}|ddd	d
d� W 5 Q R X |  dt|jƒ¡ |  t¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ |  t¡�}|d	d
d� W 5 Q R X |  dt|jƒ¡ dS )z?
        Test omitting arguments with a default value.
        r"   r    ri   rá   r   ©r   r   r   r,   râ   rã   rä   z0not enough arguments: expected at least 1, got 0zmissing argument 'x'N)rL   r#   re   r<   r†   r‡   rˆ   ræ   r   r   r   Útest_default_argsW  s,    

ÿÿz'TestSignatureHandling.test_default_argsc              	   C   s  |   t¡\}}|dƒ |ddƒ |dddƒ |ddddƒ |dddddƒ |dd� |ddd� |ddd� |  t¡�}|dddd� W 5 Q R X |  d	t|jƒ¡ |  t¡�}|dddd
� W 5 Q R X |  d	t|jƒ¡ |  t¡�}|ddd� W 5 Q R X |  d	t|jƒ¡ dS )zJ
        Test a compiled function with starargs in the signature.
        ri   r%   r,   râ   é   r   r   rå   z!some keyword arguments unexpectedrè   N)rL   r$   re   r<   r†   r‡   rˆ   ræ   r   r   r   Útest_star_argsr  s$    

z$TestSignatureHandling.test_star_argsN)rM   rN   rO   Ú__doc__rç   ré   rë   r   r   r   r   rà   ;  s   rà   c                   @   s   e Zd ZdZedd�ZdS )ÚTestSignatureHandlingObjectModez<
    Sams as TestSignatureHandling, but in object mode.
    TrŽ   N)rM   rN   rO   rì   rP   rK   r   r   r   r   rí   Š  s   rí   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestGeneratedDispatcherz#
    Tests for @generated_jit.
    c                 C   s~   t dd�tƒ}|  |dƒd¡ |  |dd�d¡ |  |ddd�d¡ |  |dƒd	¡ |  |dd
ƒd¡ |  |ddd�d¡ d S )NTr@   rê   r"   r   ri   r   r‚   y      @      ð?é*   y      E@      ð?râ   y      @      ð?)r   r+   rU   )rI   rG   r   r   r   Útest_generated—  s    z&TestGeneratedDispatcher.test_generatedc                 C   s„   t dd�tƒ}tjdtjd�}tjdtjd�}|  |||ƒjtj¡ |  |||t d¡d�jtj¡ |  |||tjd�jtj¡ d S )NTr@   )r    r4   r…   )	r   r>   r.   r5   r‰   Zfloat64rU   r/   r…   )rI   rG   r7   r8   r   r   r   Útest_generated_dtype   s     z,TestGeneratedDispatcher.test_generated_dtypec              	   C   sr   t dd�tƒ}|  t¡�}|dƒ W 5 Q R X |  dt|jƒ¡ |  t¡�}|dƒ W 5 Q R X |  dt|jƒ¡ dS )zz
        Check error reporting when implementation signature doesn't match
        generating function signature.
        Tr@   r‚   zGshould be compatible with signature '(x, y=5)', but has signature '(x)'rW   zLshould be compatible with signature '(x, y=5)', but has signature '(x, y=6)'N)r   r-   re   r<   r†   r‡   rˆ   )rI   rG   rš   r   r   r   Útest_signature_errors¨  s    þþz-TestGeneratedDispatcher.test_signature_errorsN)rM   rN   rO   rì   rð   rñ   rò   r   r   r   r   rî   ’  s   	rî   c                   @   sŽ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zdd„ Z	dd„ Z
dd„ Ze edkd¡e edkd¡dd„ ƒƒZdd„ Zdd„ ZdS )ÚTestDispatcherMethodsc                    s˜   d‰ t ‡ fdd„ƒ}|  |dƒd¡ |  |dƒd¡ |  t|jƒd¡ d‰ |  |dƒd¡ | ¡  |  t|jƒd¡ |  |dƒd¡ |  |dƒd¡ d S )	NrW   c                    s   | ˆ  S r   r   r   ©Úclosurer   r   rR   Á  s    z1TestDispatcherMethods.test_recompile.<locals>.foor!   rh   r€   r"   r�   )r   rA   rU   rj   r˜   Ú	recompiler`   r   rô   r   Útest_recompile¾  s    z$TestDispatcherMethods.test_recompilec                    sx   d‰ t dƒ‡ fdd„ƒ}|  |dƒd¡ |  |dƒd¡ d‰ |  |dƒd¡ | ¡  |  |dƒd¡ |  |dƒd¡ d S )NrW   zint32(int32)c                    s   | ˆ  S r   r   r   rô   r   r   rR   Ô  s    z<TestDispatcherMethods.test_recompile_signatures.<locals>.foor!   rh   r"   )r   rA   rö   r`   r   rô   r   Útest_recompile_signaturesÐ  s    z/TestDispatcherMethods.test_recompile_signaturesc                 C   sx   t dd„ ƒ}|ddƒ |ddƒ |ddƒ | ¡ }|  t|ƒd¡ | ¡ D ](}|  d|¡ |  d|¡ |  d|¡ qJd S )	Nc                 S   s   | | S r   r   ©Úexplicit_arg1Úexplicit_arg2r   r   r   rR   â  s    z4TestDispatcherMethods.test_inspect_llvm.<locals>.foorW   rƒ   r"   rR   rú   rû   )r   Zinspect_llvmrU   rj   rY   r†   )rI   rR   ZllvmsZllvm_bcr   r   r   Útest_inspect_llvmà  s    



z'TestDispatcherMethods.test_inspect_llvmc                 C   sb   t dd„ ƒ}|ddƒ |ddƒ |ddƒ | ¡ }|  t|ƒd¡ | ¡ D ]}|  d|k¡ qJd S )Nc                 S   s   | | S r   r   rù   r   r   r   rR   ú  s    z3TestDispatcherMethods.test_inspect_asm.<locals>.foorW   rƒ   r"   rR   )r   Zinspect_asmrU   rj   rY   Ú
assertTrue)rI   rR   ZasmsÚasmr   r   r   Útest_inspect_asmø  s    



z&TestDispatcherMethods.test_inspect_asmÚ c                 C   s^   |rd  t|ƒ|¡}t dd¡d }t|ƒ}d  |||¡}|  t|ƒ|¡ |  t|jƒ¡ d S )Nz{}{}Ú.rW   r   z^digraph "CFG for \'_ZN{}{}{})	Úformatrj   rM   ÚsplitrŠ   r‡   rý   ÚcallableÚdisplay)rI   Úcfgrq   Úmodule_nameZ
module_lenÚprefixr   r   r   Ú_check_cfg_display  s    þz(TestDispatcherMethods._check_cfg_displayc           
   	   C   sâ   t dd„ ƒ}t d¡}t d¡}t d¡}||ƒ ||ƒ ||ƒ | ¡ }|  t|ƒd¡ | ¡ \}}}|  t|||gƒttdd„ |||gƒƒ¡ | 	¡ D ]}	|  
|	¡ qš|  tt| 	¡ ƒƒd¡ |j|jd	 d
�}	|  
|	¡ d S )Nc                 S   s   |   ¡ S r   ©rÍ   ©Z	the_arrayr   r   r   rR     s    z3TestDispatcherMethods.test_inspect_cfg.<locals>.foorW   ©rW   rW   ©rW   rW   rW   r"   c                 S   s
   t | ƒfS r   )r   r   r   r   r   Ú<lambda>2  ó    z8TestDispatcherMethods.test_inspect_cfg.<locals>.<lambda>r   ©Ú	signature)r   r.   r5   Úinspect_cfgrU   rj   ÚkeysÚsetÚmaprY   r	  Úlistr˜   )
rI   rR   Úa1Úa2Úa3ZcfgsÚs1Ús2Zs3r  r   r   r   Útest_inspect_cfg  s&    



ÿz&TestDispatcherMethods.test_inspect_cfgc                 C   sh   t dd„ ƒ}t d¡}t d¡}t d¡}||ƒ ||ƒ ||ƒ |j|jd dd�}| j|d	d
� d S )Nc                 S   s   |   ¡ S r   r
  r  r   r   r   rR   @  s    zGTestDispatcherMethods.test_inspect_cfg_with_python_wrapper.<locals>.foorW   r  r  r   Úpython)r  Zshow_wrapperÚcpythonrw   )r   r.   r5   r  r˜   r	  )rI   rR   r  r  r  r  r   r   r   Ú$test_inspect_cfg_with_python_wrapper<  s    



ÿz:TestDispatcherMethods.test_inspect_cfg_with_python_wrapperc              	   C   sf   t dd„ ƒ}|ddƒ | tƒ ¡ t|j|jd  jƒ}tƒ �}| ¡  W 5 Q R X || ¡ ksbt	‚d S )Nc                 S   s   | | S r   r   rg   r   r   r   rR   R  s    z5TestDispatcherMethods.test_inspect_types.<locals>.foorW   r!   r   )
r   Úinspect_typesr   r‡   rX   r˜   Ztype_annotationr   ÚgetvalueÚAssertionError)rI   rR   rD   Úoutr   r   r   Útest_inspect_typesQ  s    

z(TestDispatcherMethods.test_inspect_typesc              	   C   sž   t dd„ ƒ}|dƒ |dƒ tƒ �}| ¡  W 5 Q R X tƒ �}|j|jd d� W 5 Q R X tƒ �}|j|jd d� W 5 Q R X |  | ¡ | ¡ | ¡  ¡ d S )Nc                 S   s   | d S r^   r   r’   r   r   r   rR   a  s    zDTestDispatcherMethods.test_inspect_types_with_signature.<locals>.foorW   rƒ   r   r  )r   r   r   r˜   rU   r!  )rI   rR   ÚtotalÚfirstÚsecondr   r   r   Ú!test_inspect_types_with_signature`  s    
z7TestDispatcherMethods.test_inspect_types_with_signatureNz#please install the 'jinja2' packagez%please install the 'pygments' packagec              	   C   s°   t dd„ ƒ}|ddƒ tƒ � |jdd�}W 5 Q R X |j ¡ D ]4\}}d}|d D ]}d	|d krRd}qR|  |¡ q>|  t¡�}|jtƒ dd
� W 5 Q R X |  	dt
|jƒ¡ d S )Nc                 S   s   | | S r   r   rg   r   r   r   rR   v  s    z<TestDispatcherMethods.test_inspect_types_pretty.<locals>.foorW   r!   T)ÚprettyFZpygments_linesÚspan)Úfiler)  z$`file` must be None if `pretty=True`)r   r   r   ÚannÚitemsrý   re   r¢   r   r†   r‡   rˆ   )rI   rR   r,  ÚkÚvZ
span_foundÚlinerš   r   r   r   Útest_inspect_types_prettys  s     

ÿz/TestDispatcherMethods.test_inspect_types_prettyc                    sR   t dd„ ƒ‰ ˆ dƒ ˆ dƒ tt ‡ fdd„ˆ jD ƒ¡ƒ}ˆ  ¡ }|  ||¡ d S )Nc                 S   s   | d S r^   r   r’   r   r   r   rR   �  s    z;TestDispatcherMethods.test_get_annotation_info.<locals>.foorW   gÍÌÌÌÌÌô?c                 3   s   | ]}ˆ   |¡ ¡ V  qd S r   )Úget_annotation_infor-  ru   r�   r   r   r2   —  s   ÿzATestDispatcherMethods.test_get_annotation_info.<locals>.<genexpr>)r   rP   r   Úfrom_iterabler˜   r2  rU   )rI   rD   rE   r   r�   r   Útest_get_annotation_info�  s    
ÿ
z.TestDispatcherMethods.test_get_annotation_infoc           
      C   s²   dd„ }t |ƒ}t dgg¡}tjddgddggdd�}tjddgddggd	d�}||d
dƒ}||d
dƒ}|  d||ddƒ¡ ||d
dƒ}||d
dƒ}	|  ||¡ |  ||	¡ dS )aO  
        This test an issue with the dispatcher when an array that is both
        C and F contiguous is supplied as the first signature.
        The dispatcher checks for F contiguous first but the compiler checks
        for C contiguous first. This results in an C contiguous code inserted
        as F contiguous function.
        c                 S   s   | ||f S r   r   )ÚArv   Újr   r   r   rH   ¤  s    zKTestDispatcherMethods.test_issue_with_array_layout_conflict.<locals>.pyfuncrƒ   g        r„   g      @rÒ   )ÚorderrÓ   rW   r   N)r   r.   ÚarrayrU   )
rI   rH   ZcfuncZary_c_and_fZary_cZary_fZexp_cZexp_fZgot_cZgot_fr   r   r   Ú%test_issue_with_array_layout_conflictœ  s    z;TestDispatcherMethods.test_issue_with_array_layout_conflict)r   )rM   rN   rO   r÷   rø   rü   rÿ   r	  r  r  r$  r(  rÝ   rÞ   Újinja2Úpygmentsr1  r4  r9  r   r   r   r   ró   ¼  s   
"ró   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú TestDispatcherFunctionBoundariesc                    s¨   t dd�dd„ ƒ‰ t dd�dd„ ƒ‰t dd�‡ ‡fdd„ƒ}d	d
t d¡g}dd„ |D ƒ}t||ƒD ]\}}|  ||ƒ|¡ qdt||ƒD ]\}}|  ˆˆ |ƒ|¡ qˆd S )NTr@   c                 S   s   | d S r^   r   r   r   r   r   Úadd1»  s    zJTestDispatcherFunctionBoundaries.test_pass_dispatcher_as_arg.<locals>.add1c                 S   s   | |ƒS r   r   )Úfnr   r   r   r   rS   ¿  s    zITestDispatcherFunctionBoundaries.test_pass_dispatcher_as_arg.<locals>.barc                    s
   ˆˆ | ƒS r   r   r   ©r=  rS   r   r   rR   Ã  s    zITestDispatcherFunctionBoundaries.test_pass_dispatcher_as_arg.<locals>.foorW   g333333&@r    c                 S   s   g | ]}|d  ‘qS )rW   r   )r1   r   r   r   r   rx   É  s     zPTestDispatcherFunctionBoundaries.test_pass_dispatcher_as_arg.<locals>.<listcomp>)r   r.   r²   ÚziprA   )rI   rR   ÚinputsZexpected_resultsÚargÚexpectr   r?  r   Útest_pass_dispatcher_as_arg¹  s    

z<TestDispatcherFunctionBoundaries.test_pass_dispatcher_as_argc                 C   s¶   t dd�dd„ ƒ}|ddddgt d	d
„ ƒd�}|  |d¡ |tttdƒtdƒd d d… ƒƒt dd
„ ƒd�}|  |d¡ |tttdƒtdƒd d d… ƒƒt dd
„ ƒd�}|  |d¡ d S )NTr@   c                 S   s4   | d }| dd … D ]}|||ƒ}|dk r|}q|S rÑ   r   )ÚseqÚcmpfnrË   ZeachZcmpvalr   r   r   ÚmaximumÓ  s    
zPTestDispatcherFunctionBoundaries.test_dispatcher_as_arg_usecase.<locals>.maximumrW   r!   r"   ri   c                 S   s   | | S r   r   r   r   r   r   r  Ü  r  zQTestDispatcherFunctionBoundaries.test_dispatcher_as_arg_usecase.<locals>.<lambda>)rF  r%   r°   c                 S   s   | d |d  S ©Nr   r   r   r   r   r   r  ß  r  )ri   r   c                 S   s   | d |d  S r^   r   r   r   r   r   r  â  r  )r   ri   )r   rU   r  r@  rz   )rI   rG  r¸   r   r   r   Útest_dispatcher_as_arg_usecaseÒ  s    
 
ÿ 
ÿz?TestDispatcherFunctionBoundaries.test_dispatcher_as_arg_usecasec                 C   s2   t dd�dd„ ƒ}t dd„ ƒ}|  ||ƒ|¡ d S )NTr@   c                 S   s   | S r   r   )r>  r   r   r   rR   æ  s    zRTestDispatcherFunctionBoundaries.test_dispatcher_can_return_to_python.<locals>.fooc                 S   s   | S r   r   r   r   r   r   r  ê  r  zWTestDispatcherFunctionBoundaries.test_dispatcher_can_return_to_python.<locals>.<lambda>rT   )rI   rR   r>  r   r   r   Ú$test_dispatcher_can_return_to_pythonå  s    
zETestDispatcherFunctionBoundaries.test_dispatcher_can_return_to_pythonc                    s„   t dd�dd„ ƒ‰ t dd�‡ fdd„ƒ}t dd�‡ fdd„ƒ}t dd�d	d
„ ƒ}|  |ˆ ||fdƒd¡ |  |ˆ ˆ ˆ gdƒd¡ d S )NTr@   c                 S   s   | d S r^   r   r   r   r   r   Úoneï  s    zMTestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg.<locals>.onec                    s   ˆ ˆ | ƒƒS r   r   r   ©rK  r   r   Útwoó  s    zMTestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg.<locals>.twoc                    s   ˆ ˆ ˆ | ƒƒƒS r   r   r   rL  r   r   Úthree÷  s    zOTestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg.<locals>.threec                 S   s"   | d |ƒ| d |ƒ| d |ƒfS )Nr   rW   r!   r   )Úfnsr   r   r   r   Úchooseû  s    zPTestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg.<locals>.chooserW   )r!   r"   ri   )r!   r!   r!   rT   )rI   rM  rN  rP  r   rL  r   Útest_dispatcher_in_sequence_argî  s    

z@TestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_argN)rM   rN   rO   rD  rI  rJ  rQ  r   r   r   r   r<  ¸  s   	r<  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestBoxingDefaultErrorc              	   C   sP   dd„ }t |t d¡fƒ}|  t¡�}| d ¡ W 5 Q R X |  t|jƒd¡ d S )Nc                 S   s   d S r   r   r   r   r   r   rR   	  s    z<TestBoxingDefaultError.test_unbox_runtime_error.<locals>.fooZ
dummy_typezcan't unbox dummy_type type)	r   r	   ZDummyre   r<   rZ   rU   r‡   rˆ   )rI   rR   Úcresrš   r   r   r   Útest_unbox_runtime_error  s
    z/TestBoxingDefaultError.test_unbox_runtime_errorc              	   C   sJ   dd„ }t |dƒ}|  t¡�}| ¡  W 5 Q R X d}|  t|jƒ|¡ d S )Nc                   S   s   t S r   )rÝ   r   r   r   r   rR     s    z:TestBoxingDefaultError.test_box_runtime_error.<locals>.foor   z/cannot convert native Module.* to Python object)r   re   r<   rZ   rŠ   r‡   rˆ   )rI   rR   rS  rš   Úpatr   r   r   Útest_box_runtime_error  s    
z-TestBoxingDefaultError.test_box_runtime_errorN)rM   rN   rO   rT  rV  r   r   r   r   rR    s   rR  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestNoRetryFailedSignaturez?Test that failed-to-compile signatures are not recompiled.
    c              	   C   s²   |j }|  t|jƒd¡ |  tj¡� |dƒ W 5 Q R X |  t|jƒd¡ |  tj¡� |dƒ W 5 Q R X |  t|jƒd¡ |  tj¡� |dƒ W 5 Q R X |  t|jƒd¡ d S )Nr   rW   rƒ   r!   )Z	_compilerrU   rj   Z_failed_cachere   r
   ÚTypingError)rI   ÚfuncZfcomr   r   r   Úrun_test"  s    z#TestNoRetryFailedSignature.run_testc                 C   s    t dd�dd„ ƒ}|  |¡ d S )NTr@   c                 S   s   | d S rH  r   r   r   r   r   rR   3  s    z8TestNoRetryFailedSignature.test_direct_call.<locals>.foo©r   rZ  r`   r   r   r   Útest_direct_call2  s    
z+TestNoRetryFailedSignature.test_direct_callc                    sN   t dd�dd„ ƒ‰ t dd�‡ fdd„ƒ‰t dd�‡ ‡fdd„ƒ}|  |¡ d S )	NTr@   c                 S   s   | d S rH  r   r   r   r   r   rS   :  s    z8TestNoRetryFailedSignature.test_nested_call.<locals>.barc                    s   ˆ | ƒ d S r   r   r   )rS   r   r   Úfoobar>  s    z;TestNoRetryFailedSignature.test_nested_call.<locals>.foobarc                    s   ˆ | ƒˆ| ƒ S r   r   r   ©rS   r]  r   r   rR   B  s    z8TestNoRetryFailedSignature.test_nested_call.<locals>.foor[  r`   r   r^  r   Útest_nested_call9  s    
z+TestNoRetryFailedSignature.test_nested_callc                    s<   ‡ fdd„}|ddƒ}|ddƒ}ˆ   |d¡ ˆ   |d¡ d S )Nc              	      s¤   d}ddi‰t ‡‡fdd„ƒ}tdd�dd	„ ƒ}|f‡ fd
d„	‰ ˆ |f| ƒ}t d¡}ˆr’ˆ tj¡�}||dƒ W 5 Q R X ˆ dt|j	ƒ¡ n
||dƒ ˆd S )Nr    Úcr   c                    s&   ˆ d  d7  < ˆrt  d¡‚dd„ S )Nr`  rW   Úinvoke_failedc                 S   s   | S r   r   r   r   r   r   r  W  r  z]TestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.trigger.<locals>.<lambda>)r
   rX  r   )ÚcounterÚ
would_failr   r   ÚtriggerQ  s    
zKTestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.triggerTr@   c                 S   s   d S r   r   ©r#  r   r   r   r   ÚidentY  s    zITestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.identc                    sD   | d | d d…  ‰}t dd�‡ ‡fdd„ƒ}|r<ˆ||ƒS |S d S )Nr°   Tr@   c                    s"   ˆ | |ƒ | d  ˆ|ƒ7  < d S rH  r   re  ©ÚinnerZtab_headr   r   Úassign`  s    
z`TestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.chain_assign.<locals>.assignr_   )Úfsrh  Ztab_tailri  )Úchain_assignrg  r   rk  ]  s    
zPTestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.chain_assignr!   rW   ra  )
r   r   r.   r5   re   r
   rX  r†   r‡   rˆ   )Úfieldrc  r.  rd  rf  r   r#  rš   r×   )rk  rb  rc  r   rJ   I  s    


z:TestNoRetryFailedSignature.test_error_count.<locals>.checkr7   Fr`  TrW   )rU   )rI   rJ   Zct_okZct_badr   r×   r   Útest_error_countH  s
    -

z+TestNoRetryFailedSignature.test_error_countN)rM   rN   rO   rì   rZ  r\  r_  rm  r   r   r   r   rW    s
   rW  rW   c                 C   s   | | S r   r   r   r   r   r   Úadd_y1~  s    rn  c                 C   s   | |r
dnd S rm   r   r   r   r   r   Ú	add_ynoneƒ  s    ro  c                 C   s   | | S r   r   r   r   r   r   Úmultˆ  s    rp  c                 C   s   | || | ƒ S r   r   )r   rY  r   r   r   Úadd_func�  s    rq  c                 C   s   | |ƒ|   |¡kst‚d S r   )r[   r"  )Úf1rB  r   r   r   Ú_checker’  s    rs  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú$TestMultiprocessingDefaultParametersc                 C   sh   zt  d¡}W n tk
r&   t }Y nX dD ]6}|jt||fd�}| ¡  | t¡ |  |j	d¡ q,d S )NÚspawn)rW   r!   r"   )rr   rB   r   )
ÚmultiprocessingZget_contextÚAttributeErrorÚProcessrs  r{   r|   Ú_TEST_TIMEOUTrU   Úexitcode)rI   ÚfcÚctxr7   Úpr   r   r   Úrun_fc_multiproc—  s    

z5TestMultiprocessingDefaultParameters.run_fc_multiprocc                 C   s   |   t¡ dS )z Tests issue #4888N)r~  rn  r×   r   r   r   Útest_int_def_param¨  s    z7TestMultiprocessingDefaultParameters.test_int_def_paramc                 C   s   |   t¡ dS )z" Tests None as a default parameterN©r~  rq  r×   r   r   r   Útest_none_def_param­  s    z8TestMultiprocessingDefaultParameters.test_none_def_paramc                 C   s   |   t¡ dS )z( Tests a function as a default parameterNr€  r×   r   r   r   Útest_function_def_param²  s    z<TestMultiprocessingDefaultParameters.test_function_def_paramN)rM   rN   rO   r~  r  r�  r‚  r   r   r   r   rt  –  s   rt  c                   @   s   e Zd ZdZdd„ ZdS )ÚTestVectorizeDifferentTargetszDTest that vectorize can be reapplied if the target is different
    c                 C   s<   t dd„ ƒ}tg d dd�}||ƒ tg d dd�}||ƒ d S )Nc                 S   s   | | S r   r   r   r   r   r   r   ½  s    z?TestVectorizeDifferentTargets.test_cpu_vs_parallel.<locals>.addÚcpu)Úidentityrr   Úparallel)r   r   )rI   r   Zcustom_vectorizeZcustom_vectorize_2r   r   r   Útest_cpu_vs_parallel¼  s    
z2TestVectorizeDifferentTargets.test_cpu_vs_parallelN)rM   rN   rO   rì   r‡  r   r   r   r   rƒ  ¸  s   rƒ  Ú__main__)r!   r"   )r!   )r%   )r%   )N)rW   )N)Drv  Úplatformrs   r¦   rª   Ú	itertoolsr   Úior   Únumpyr.   Znumbar   r   r   r   r   Z
numba.corer	   r
   r   Znumba.core.compilerr   Znumba.tests.supportr   r   Znumba.np.numpy_supportr   Znumba.core.dispatcherr   r   r   Znumba.testing.mainr   Z_RUNNER_TIMEOUTrÝ   ry  r:  ÚImportErrorr;  Úmachinerß   r   r   r    r#   r$   r+   r-   r>   r?   rQ   rà   rí   rî   ró   r<  rR  rW  rn  ro  rp  rq  rs  rt  rƒ  rM   Úmainr   r   r   r   Ú<module>   sz   








   SO* }M`
"
