U
    iâËdw=  ã                   @   s˜   d dl Zd dl Z d dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZ 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)ÚTypingErrorÚUnsupportedError)Úir)ÚTestCaseÚIRPreservingTestPipelinec                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestClosurec                    sF   d‰ ‡ fdd„}t d|Ž|ƒ}|  |dƒd¡ d‰ |  |dƒd¡ d S )	Né
   c                    s   | ˆ  S ©N© ©Úx©ÚYr   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_closure.pyÚadd_Y   s    z3TestClosure.run_jit_closure_variable.<locals>.add_Yúi4(i4)é   é   é   )r   ©r   ÚassertEqual)ÚselfÚjitargsr   Úc_add_Yr   r   r   Úrun_jit_closure_variable   s    z$TestClosure.run_jit_closure_variablec                 C   s   | j dd� d S ©NT©Zforceobj©r   ©r   r   r   r   Útest_jit_closure_variable   s    z%TestClosure.test_jit_closure_variablec                 C   s   | j dd� d S ©NT©Znopythonr   r    r   r   r   Útest_jit_closure_variable_npm   s    z)TestClosure.test_jit_closure_variable_npmc                    sx   d‰ ‡ fdd„}t d	|Ž|ƒ}|  |dƒd¡ d‰ t d
|Ž|ƒ}|  |dƒd¡ d‰ |  |dƒd¡ |  |dƒd¡ d S )Nr
   c                    s   | ˆ  S r   r   r   r   r   r   r   %   s    z0TestClosure.run_rejitting_closure.<locals>.add_Yr   r   r   r   é   )r   )r   r   )r   r   r   r   Z	c_add_Y_2r   r   r   Úrun_rejitting_closure"   s    z!TestClosure.run_rejitting_closurec                 C   s   | j dd� d S r   ©r&   r    r   r   r   Útest_rejitting_closure4   s    z"TestClosure.test_rejitting_closurec                 C   s   | j dd� d S r"   r'   r    r   r   r   Útest_rejitting_closure_npm7   s    z&TestClosure.test_rejitting_closure_npmc                    s8   d‰ d‰‡ ‡fdd„}t d|Ž|ƒ}|  |dƒd¡ d S )	Nr
   é   c                    s   | ˆ  ˆ S r   r   r   ©r   ÚZr   r   Úadd_Y_mult_Z>   s    zDTestClosure.run_jit_multiple_closure_variables.<locals>.add_Y_mult_Zr   r   é   )r   r   )r   r   r-   Zc_add_Y_mult_Zr   r+   r   Ú"run_jit_multiple_closure_variables:   s
    z.TestClosure.run_jit_multiple_closure_variablesc                 C   s   | j dd� d S r   ©r/   r    r   r   r   Ú#test_jit_multiple_closure_variablesD   s    z/TestClosure.test_jit_multiple_closure_variablesc                 C   s   | j dd� d S r"   r0   r    r   r   r   Ú'test_jit_multiple_closure_variables_npmG   s    z3TestClosure.test_jit_multiple_closure_variables_npmc              	      sl   dd„ }t d|Ž|ƒ‰ ˆ  ¡  ‡ fdd„}t d	|Ž|ƒ}| ¡  |  |ˆ ¡� |  |dƒd¡ W 5 Q R X d S )
Nc                 S   s   | d S )Nr
   r   ©Úar   r   r   Úmult_10K   s    z3TestClosure.run_jit_inner_function.<locals>.mult_10ú
intp(intp)c                    s   ˆ | d ƒS )Né   r   r   ©Z	c_mult_10r   r   Údo_mathQ   s    z3TestClosure.run_jit_inner_function.<locals>.do_mathr   é2   )r6   )r6   )r   Zdisable_compileZassertRefCountr   )r   r   r5   r9   Z	c_do_mathr   r8   r   Úrun_jit_inner_functionJ   s    z"TestClosure.run_jit_inner_functionc                 C   s   | j dd� d S r   ©r;   r    r   r   r   Útest_jit_inner_functionZ   s    z#TestClosure.test_jit_inner_functionc                 C   s   | j dd� d S r"   r<   r    r   r   r   Útest_jit_inner_function_npm]   s    z'TestClosure.test_jit_inner_function_npmN)Ú__name__Ú
__module__Ú__qualname__r   r!   r$   r&   r(   r)   r/   r1   r2   r;   r=   r>   r   r   r   r   r	      s   
r	   c                   @   sH   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S )ÚTestInlinedClosurezª
    Tests for (partial) closure support in njit. The support is partial
    because it only works for closures that can be successfully inlined
    at compile time.
    c                 C   s(   dd„ }t |ƒ}|  |dƒ|dƒ¡ d S )Nc                 S   s   dd„ }|| ƒ|| ƒ S )Nc                 S   s   | |  S r   r   r   r   r   r   Úinnerl   s    zDTestInlinedClosure.test_inner_function.<locals>.outer.<locals>.innerr   ©r   rC   r   r   r   Úouterj   s    z5TestInlinedClosure.test_inner_function.<locals>.outerr
   ©r   r   ©r   rE   Úcfuncr   r   r   Útest_inner_functionh   s    z&TestInlinedClosure.test_inner_functionc                 C   s(   dd„ }t |ƒ}|  |dƒ|dƒ¡ d S )Nc                    s$   | d ‰ ‡ fdd„}|| ƒ|| ƒ S )Nr   c                    s   | |  ˆ  S r   r   r   ©Úyr   r   rC   y   s    zQTestInlinedClosure.test_inner_function_with_closure.<locals>.outer.<locals>.innerr   rD   r   rJ   r   rE   v   s    zBTestInlinedClosure.test_inner_function_with_closure.<locals>.outerr
   rF   rG   r   r   r   Ú test_inner_function_with_closuret   s    z3TestInlinedClosure.test_inner_function_with_closurec                 C   s(   dd„ }t |ƒ}|  |dƒ|dƒ¡ d S )Nc                    s(   | d ‰ ‡ fdd„}|| ƒ‰ ˆ || ƒ S )Nr   c                    s   | ˆ  S r   r   r   rJ   r   r   rC   †   s    zSTestInlinedClosure.test_inner_function_with_closure_2.<locals>.outer.<locals>.innerr   rD   r   rJ   r   rE   ƒ   s    zDTestInlinedClosure.test_inner_function_with_closure_2.<locals>.outerr
   rF   rG   r   r   r   Ú"test_inner_function_with_closure_2�   s    	z5TestInlinedClosure.test_inner_function_with_closure_2c                 C   s>   d}i }t | ¡ |ƒ t|d ƒ}|  |dƒ|d dƒ¡ d S )Na  
            def outer(x):
                y = x + 1
                z = 0

                def inner(x):
                    nonlocal z
                    z += x * x
                    return z + y

                return inner(x) + inner(x) + z
        rE   r
   )ÚexecÚstripr   r   )r   ÚcodeÚnsrH   r   r   r   Ú"test_inner_function_with_closure_3�   s
    z5TestInlinedClosure.test_inner_function_with_closure_3c                 C   s(   dd„ }t |ƒ}|  |dƒ|dƒ¡ d S )Nc                    s   ‡ fdd„}|ˆ ˆ  ƒS )Nc                    s0   ‡‡ fdd„}d}t ˆ ƒD ]}|||ƒ7 }q|S )Nc                    s   ˆ ˆ |  S r   r   ©Úz©r   rK   r   r   Ú	innermost©   s    z^TestInlinedClosure.test_inner_function_nested.<locals>.outer.<locals>.inner.<locals>.innermostr   ©Úrange)rK   rV   ÚsÚir   rJ   r   rC   §   s
    zKTestInlinedClosure.test_inner_function_nested.<locals>.outer.<locals>.innerr   rD   r   r   r   rE   ¥   s    
z<TestInlinedClosure.test_inner_function_nested.<locals>.outerr
   rF   rG   r   r   r   Útest_inner_function_nested£   s    z-TestInlinedClosure.test_inner_function_nestedc                    sü  t ‡fdd„ƒ‰‡fdd„}‡fdd„}dd„ }d	d
„ }dd„ }dd„ }d‰ ‡ fdd„}d‰ ‡ fdd„}dd„ }	dd„ }
dd„ }dd„ }d9dd„}d:dd „}d;d!d"„}d#d$„ }d%d&„ }d'd(„ }d)d*„ }d+d,„ }d-d.„ }d/d0„ }|||||||	|
|||||||g}|D ]&}t |ƒ}d1}|  ||ƒ||ƒ¡ �q|  t¡�}td2d3�|ƒ}||ƒ W 5 Q R X d4}|  |t|jƒ¡ |  t¡�}td2d3�|ƒ}||ƒ W 5 Q R X d4}|  |t|jƒ¡ |  t¡�}td2d3�|ƒ}||ƒ W 5 Q R X d5}|  |t|jƒ¡ |  t	¡�}td2d3�|ƒ}||ƒ W 5 Q R X d6}|  |t|jƒ¡ |  t	¡�}td2d3�|ƒ}||ƒ W 5 Q R X d6}|  |t|jƒ¡ |  t	¡�}td2d3�|ƒ}||ƒ W 5 Q R X d6}|  |t|jƒ¡ |  t	¡�}td2d3�|ƒ}|ƒ  W 5 Q R X d7}|  |t|jƒ¡ d8S )<z3 Tests the large number of use cases defined below c                    s$   | dk r| S ˆ | d ƒˆ | d ƒ S )Nr*   r   r   )Ún©Úfib3r   r   r^   º   s    z4TestInlinedClosure.test_bulk_use_cases.<locals>.fib3c                    s   ‡ fdd„}|| ƒS )z, Test calling recursive function from inner c                    s   ˆ | ƒS r   r   r   r]   r   r   rC   Â   s    zETestInlinedClosure.test_bulk_use_cases.<locals>.outer1.<locals>.innerr   rD   r]   r   r   Úouter1À   s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer1c                    s   | d ‰ ‡‡ fdd„}|| ƒS )z. Test calling recursive function from closure r   c                    s   | ˆ ˆƒ S r   r   r   )r^   rT   r   r   rC   Ê   s    zETestInlinedClosure.test_bulk_use_cases.<locals>.outer2.<locals>.innerr   rD   r]   rS   r   Úouter2Æ   s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer2c                    s   ‡ fdd„‰ ˆ | ƒS )z Test recursive inner c                    s   | dk rdS ˆ | d ƒ d S ©Nr*   r
   r   r   r   ©rC   r   r   rC   Ð   s    zETestInlinedClosure.test_bulk_use_cases.<locals>.outer3.<locals>.innerr   r   r   rb   r   Úouter3Î   s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer3c                    s   | d ‰‡ ‡fdd„‰ ˆ | ƒS )z Test recursive closure r   c                    s    | ˆ dk rdS ˆ | d ƒ d S ra   r   r   ©rC   rK   r   r   rC   Û   s    zETestInlinedClosure.test_bulk_use_cases.<locals>.outer4.<locals>.innerr   r   r   rd   r   Úouter4×   s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer4c                    s   | d ‰ ‡ fdd„}|| ƒS )z Test nested closure r   c                    s$   ˆ|  d ‰ ‡ fdd„}|| ƒˆ S )Nr*   c                    s   | ˆ  S r   r   r   rS   r   r   Úinner2é   s    zVTestInlinedClosure.test_bulk_use_cases.<locals>.outer5.<locals>.inner1.<locals>.inner2r   ©r   rf   rJ   rS   r   Úinner1æ   s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer5.<locals>.inner1r   ©r   rh   r   rJ   r   Úouter5â   s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer5c                    s   | d ‰ ‡ fdd„}|| ƒS )z. Test closure with list comprehension in body r   c                    s   ˆ |  d }dd„ t |ƒD ƒS )Nr*   c                 S   s   g | ]}|‘qS r   r   )Ú.0Útr   r   r   Ú
<listcomp>ö   s     zZTestInlinedClosure.test_bulk_use_cases.<locals>.outer6.<locals>.inner1.<locals>.<listcomp>rW   ©r   rT   rJ   r   r   rh   ô   s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer6.<locals>.inner1r   ri   r   rJ   r   Úouter6ð   s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer6é	   c                    s   | d }| | ˆ  S )z) Test use of outer scope var, no closure r   r   rn   ©Ú_OUTER_SCOPE_VARr   r   Úouter7û   s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer7c                    s   | d ‰ ‡‡ fdd„}|| ƒS )z+ Test use of outer scope var, with closure r   c                    s   | ˆ ˆ  S r   r   r   )rr   rT   r   r   rC     s    zETestInlinedClosure.test_bulk_use_cases.<locals>.outer8.<locals>.innerr   rD   rq   rS   r   Úouter8  s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer8c                    s    | d ‰ ‡ fdd„}|}|| ƒS )z Test closure assignmentr   c                    s   | ˆ  S r   r   r   rS   r   r   rC     s    zETestInlinedClosure.test_bulk_use_cases.<locals>.outer9.<locals>.innerr   )r   rC   Úfr   rS   r   Úouter9
  s    z6TestInlinedClosure.test_bulk_use_cases.<locals>.outer9c                    s(   | d ‰‡fdd„‰ ‡ fdd„}|| ƒS )z! Test two inner, one calls other r   c                    s   | ˆ  S r   r   r   rS   r   r   rC     s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer10.<locals>.innerc                    s   ˆ | ƒS r   r   r   rb   r   r   rf     s    zGTestInlinedClosure.test_bulk_use_cases.<locals>.outer10.<locals>.inner2r   rg   r   )rC   rT   r   Úouter10  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer10c                    s   | d ‰ ‡ fdd„}|S )z return the closure r   c                    s   | ˆ  S r   r   r   rS   r   r   rC   #  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer11.<locals>.innerr   rD   r   rS   r   Úouter11  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer11c                    s   | d ‰ d‡ fdd„	}|| ƒS )z closure with kwargr   é   c                    s   | ˆ  | S r   r   ©r   ÚkwrS   r   r   rC   +  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer12.<locals>.inner)ry   r   rD   r   rS   r   Úouter12'  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer12ry   c                 S   s   | d | }|S )z outer with kwarg no closurer   r   )r   r{   rT   r   r   r   Úouter13/  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer13c                    s   | d ‰‡ ‡fdd„}|| ƒS )z! outer with kwarg used in closurer   c                    s   | ˆ ˆ  S r   r   r   ©r{   rT   r   r   rC   8  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer14.<locals>.innerr   ©r   r{   rC   r   r~   r   Úouter144  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer14c                    s   | d ‰ ‡ fdd„}|| |ƒS )z# outer with kwarg as arg to closurer   c                    s   | ˆ  | S r   r   rz   rS   r   r   rC   @  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer15.<locals>.innerr   r   r   rS   r   Úouter15<  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer15c                    s    | d ‰ ‡ fdd„}t || ƒƒS )z( closure is generator, consumed locally r   c                 3   s   | ˆ  V  d S r   r   r   rS   r   r   rC   H  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer16.<locals>.inner)ÚlistrD   r   rS   r   Úouter16D  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer16c                    s   | d ‰ ‡ fdd„}|| ƒS )z  closure is generator, returned r   c                 3   s   | ˆ  V  d S r   r   r   rS   r   r   rC   Q  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer17.<locals>.innerr   rD   r   rS   r   Úouter17M  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer17c                    s*   | d ‰ ‡ fdd„}|| ƒD ]}|}q|S )z( closure is generator, consumed in loop r   c                 3   s   | ˆ  V  d S r   r   r   rS   r   r   rC   Z  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer18.<locals>.innerr   )r   rC   rZ   rl   r   rS   r   Úouter18V  s
    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer18c                    s2   | d ‰ | d ‰‡ fdd„}‡fdd„}||| ƒS )z# closure as arg to another closure r   r*   c                    s   | ˆ  S r   r   r   )Úz1r   r   rC   g  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer19.<locals>.innerc                    s   | |ƒˆ  S r   r   )ru   r   )Úz2r   r   rf   j  s    zGTestInlinedClosure.test_bulk_use_cases.<locals>.outer19.<locals>.inner2r   )r   rC   rf   r   )r†   r‡   r   Úouter19b  s
    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer19c                    s   | d ‰ ‡ fdd„}|| ƒS )z Test calling numpy in closure r   c                    s   | t  ˆ ¡ S r   )ÚnumpyÚcosr   rS   r   r   rC   s  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer20.<locals>.innerr   rD   r   rS   r   Úouter20o  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer20c                    s   | d ‰ ‡ fdd„}|| ƒS )z) Test calling numpy import as in closure r   c                    s   | t  ˆ ¡ S r   )ÚnprŠ   r   rS   r   r   rC   {  s    zFTestInlinedClosure.test_bulk_use_cases.<locals>.outer21.<locals>.innerr   rD   r   rS   r   Úouter21w  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer21c                  S   s   dd„ } d}| |Ž  dS )z6Test to ensure that unsupported *args raises correctlyc                 S   s   d S r   r   )r4   Úbr   r   r   Úbar�  s    zDTestInlinedClosure.test_bulk_use_cases.<locals>.outer22.<locals>.bar©r   r*   Nr   )r�   r   r   r   r   Úouter22  s    z7TestInlinedClosure.test_bulk_use_cases.<locals>.outer22r
   Tr#   z.Unsupported use of op_LOAD_CLOSURE encounteredz%Cannot capture the non-constant valuez-The use of yield in a closure is unsupported.z,Calling a closure with *args is unsupported.N)ry   )ry   )ry   )
r   r   ÚassertRaisesÚNotImplementedErrorr   ZassertInÚstrÚ	exceptionr   r   )r   r_   r`   rc   re   rj   ro   rs   rt   rv   rw   rx   r|   r}   r€   r�   rƒ   r„   r…   rˆ   r‹   r�   r‘   ru   ÚrefrH   ÚvarZraisesÚmsgr   )rr   r^   r   Útest_bulk_use_cases¶   s˜    			


		       þz&TestInlinedClosure.test_bulk_use_casesc           	      C   sÀ   t td�dd„ ƒ}|  |ddƒd¡ |j|jd  jd }g }|j ¡ D ]@}|jD ]4}t	|t
jƒrRt	|jt
jƒrR|jjd	krR| |¡ qRqH|  t|ƒd
¡ |D ]}|jj}d}|  ||¡ qžd S )N)Zpipeline_classc                 S   s   dd„ }|| ƒ||ƒfS )Nc                 S   s   d}d}|| |  S )Né   r
   r   )rT   r   rK   r   r   r   r�   À  s    zITestInlinedClosure.test_closure_renaming_scheme.<locals>.foo.<locals>.barr   )r4   rŽ   r�   r   r   r   Úfoo¾  s    z<TestInlinedClosure.test_closure_renaming_scheme.<locals>.foor
   é   )é   é#   r   Zpreserved_irrš   r*   zclosure__locals__bar_v[0-9]+.x)r   r   r   Z	overloadsZ
signaturesÚmetadataÚblocksÚvaluesÚbodyÚ
isinstancer   ÚAssignÚvalueZConstÚappendÚlenÚtargetÚnameÚassertRegex)	r   r›   Zfunc_irÚstoreZblkÚstmtrZ   r©   Úregexr   r   r   Útest_closure_renaming_schemeº  s     

z/TestInlinedClosure.test_closure_renaming_schemeN)r?   r@   rA   Ú__doc__rI   rL   rM   rR   r[   r™   r®   r   r   r   r   rB   a   s     rB   c                   @   sJ   e Zd Zeedd�gZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚTestObjmodeFallbackTr   c                 C   sP   dd„ }t j d¡}t  t j dd¡d ¡ t¡}| jD ]}||ƒ||ƒ q8d S )Nc                    sF   | j \}}t|ƒD ].}| | ‰ ttˆ ƒdd�}‡ fdd„|D ƒ qd S )NT)Úreversec                    s"   g | ]}t t ˆ |k¡ ¡ ƒ‘qS r   )ÚsetrŒ   ZargwhereÚflatten©rk   r   ©Zcoxvr   r   rm   ì  s     zLTestObjmodeFallback.test_issue2955.<locals>.numbaFailure.<locals>.<listcomp>)ÚshaperX   Úsortedr²   )ZscoresZcoocÚrowsÚcolsrZ   Úgroupsr   rµ   r   ÚnumbaFailureç  s
    
z8TestObjmodeFallback.test_issue2955.<locals>.numbaFailure)r
   r
   r
   gƒÀÊ¡E¶û?)rŒ   ÚrandomÚabsZrandnZastypeÚintÚ
decorators)r   r»   r   rK   Údr   r   r   Útest_issue2955å  s
    
z"TestObjmodeFallback.test_issue2955c                 C   sv   dd„ }| j D ]b}||ƒt d¡ dd¡t d¡ dd¡ƒ}|t d¡ dd¡t d¡ dd¡ƒ}tj ||¡ qd S )Nc                 S   sŽ   t | ƒtjk	rt | ¡} t |ƒtjk	r0t |¡}| j\}}t t dd„ t|ƒD ƒ¡| f¡} t t | | j¡|¡}|d }|dd … }||fS )Nc                 S   s   g | ]
}d g‘qS ©r   r   ©rk   Ú_r   r   r   rm   þ  s     zCTestObjmodeFallback.test_issue3239.<locals>.fit.<locals>.<listcomp>r   r   )	ÚtyperŒ   ZndarrayÚarrayr¶   ZhstackrX   ÚdotÚT)ÚXrK   ÚmrÄ   ÚresZ	interceptZcoefsr   r   r   Úfitõ  s    


þz/TestObjmodeFallback.test_issue3239.<locals>.fitr
   r   )r¿   rŒ   ÚarangeZreshapeÚtestingZassert_equal)r   rÌ   rÀ   rË   Úexpr   r   r   Útest_issue3239ó  s    
ÿÿz"TestObjmodeFallback.test_issue3239c                    s.   ddg‰ ‡ fdd„}| j D ]}||ƒƒ  qd S )N)rš   é|   )é4   rš   c                     s$   ‡ fdd„dD ƒ t dƒD ]} qd S )Nc                    s   g | ]}ˆ | ‘qS r   r   )rk   Úindex©rŽ   r   r   rm     s     zATestObjmodeFallback.test_issue3289.<locals>.a.<locals>.<listcomp>)r   r   rš   rW   r   rÔ   r   r   r4     s    z-TestObjmodeFallback.test_issue3289.<locals>.a)r¿   )r   r4   rÀ   r   rÔ   r   Útest_issue3289  s    
z"TestObjmodeFallback.test_issue3289c                 C   sP   dd„ }t  d¡dgddggdœ}| jD ]"}||ƒ|ƒ}t j |||ƒ¡ q(d S )Nc                 S   s6   t dd„ | d D ƒƒ}| d dk}t|ƒr.d}||fS )Nc                 S   s   g | ]}t |ƒ‘qS r   )r§   )rk   rÊ   r   r   r   rm     s     zCTestObjmodeFallback.test_issue3413.<locals>.foo.<locals>.<listcomp>rK   r   r   é   )ÚmaxÚany)Údatarl   ÚmaskrT   r   r   r   r›     s
    z/TestObjmodeFallback.test_issue3413.<locals>.foorš   r   r*   é   rU   )rŒ   rÍ   r¿   rÎ   Úassert_allclose)r   r›   rÙ   rÀ   rË   r   r   r   Útest_issue3413  s
    	
z"TestObjmodeFallback.test_issue3413c                 C   s2   dd„ }| j D ]}||ƒƒ }tj ||ƒ ¡ qd S )Nc                  S   s   t  d¡} t  dd„ | D ƒ¡S )N)r�   )rÛ   r7   c                 S   s   g | ]}|‘qS r   r   r´   r   r   r   rm   ,  s     zDTestObjmodeFallback.test_issue3659.<locals>.main.<locals>.<listcomp>)rŒ   rÆ   r3   r   r   r   Úmain*  s    
z0TestObjmodeFallback.test_issue3659.<locals>.main)r¿   rŒ   rÎ   rÜ   )r   rÞ   rÀ   rË   r   r   r   Útest_issue3659(  s    

z"TestObjmodeFallback.test_issue3659c                 C   s@   dd„ }t  d¡}| jD ]"}||ƒ|ƒ}t j |||ƒ¡ qd S )Nc                 S   s0   t  dd„ | jD ƒ¡ t  dd„ | jD ƒ¡ | S )Nc                 S   s   g | ]}t  |¡‘qS r   ©rŒ   Zfloat_r´   r   r   r   rm   4  s     zFTestObjmodeFallback.test_issue3803.<locals>.center.<locals>.<listcomp>c                 S   s   g | ]}t  d ¡‘qS rÂ   rà   rÃ   r   r   r   rm   5  s     )rŒ   rÆ   rÈ   )rÉ   r   r   r   Úcenter3  s    z2TestObjmodeFallback.test_issue3803.<locals>.center)r
   )rŒ   Zzerosr¿   rÎ   rÜ   )r   rá   rÉ   rÀ   rË   r   r   r   Útest_issue38031  s
    

z"TestObjmodeFallback.test_issue3803N)r?   r@   rA   r   r¿   rÁ   rÐ   rÕ   rÝ   rß   râ   r   r   r   r   r°   Ý  s   
	r°   Ú__main__)r‰   rŒ   ZunittestZnumbar   r   Znumba.core.errorsr   r   Z
numba.corer   Znumba.tests.supportr   r   r	   rB   r°   r?   rÞ   r   r   r   r   Ú<module>   s   U  ~a