U
    ,‰d	S  ã                   @   s
  d Z ddlZddlmZ ddlZddlmZmZm	Z	m
Z
 ddlZddlmZmZmZmZmZmZ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G dd„ deƒ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 )z¾
Tests for sub-components of parfors.
These tests are aimed to produce a good-enough coverage of parfor passes
so that refactoring on these passes are easier with faster testing turnaround.
é    N©Úreduce)ÚnjitÚtypeofÚprangeÚpndindex)ÚtypingÚrewritesÚtyped_passesÚuntyped_passesÚinline_closurecallÚcompilerÚcpuÚerrors)Ú
cpu_target)ÚTestCaseÚis_parfors_unsupportedc                   @   s   e Zd Zdd„ ZdS )Ú
MyPipelinec                 C   sN   t  ¡ | _|| j_|| j_|| j_|| j_d | j_d | j_d | j_	i | j_
d S ©N)r   Z	StateDictÚstateÚ	typingctxÚ	targetctxÚargsÚfunc_irÚtypemapÚreturn_typeÚ	calltypesÚmetadata)Úselfr   r   r   Útest_ir© r    úC/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_parfors_passes.pyÚ__init__   s    
zMyPipeline.__init__N)Ú__name__Ú
__module__Ú__qualname__r"   r    r    r    r!   r      s   r   c                   @   sT   e Zd Zeddd„ƒZedd„ ƒZeddd„ƒZdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚBaseTestNc                 C   sP  t  ¡ }t |¡}t |¡}t d¡}t||||ƒ}t 	||¡ | 
¡  | 
¡  tj|jj|dd}	|	 ¡  tj d|j¡ t ¡  |j¡ t |jj|jj|jj|jjd ¡\|j_|j_|j_}
t ¡  |j¡ tj j! "¡ }tj j!j#|jj|jj|jj|jj|jj||j$|d}| ¡  tj d|j¡ ||||fW  5 Q R £ S Q R X d S )NT)Útypedzbefore-inference)ZswappedZreplace_functions_mapzafter-inference)%r   ÚContextr   Z
CPUContextr   Zrun_frontendZParallelOptionsr   r   Znested_contextZrefreshr   ZInlineClosureCallPassr   r   Úrunr	   Zrewrite_registryÚapplyr   ZReconstructSSAZrun_passr
   Ztype_inference_stager   r   r   r   r   r   ZPreLowerStripPhisÚnumbaÚparforsÚparforZParforDiagnosticsZPreParforPassZreplaced_fns)ÚclsÚ	test_funcr   Úswap_mapr   r   r   ÚoptionsÚtpZinline_passÚ_ÚdiagnosticsÚpreparfor_passr    r    r!   Ú_run_parfor)   sV    


  ÿ   þûø
zBaseTest._run_parforc           
      C   s~   |   ||¡\}}}}t ¡ }tjjj|jj|jj	|jj
|jj|jj|jj|||jj|d
}| ¡  |  |¡}	|	 |jj¡ |	S )N)r4   )r6   r   ZFlagsr+   r,   r-   Z
ParforPassr   r   r   r   r   r   r   r   Z_pre_runÚsub_pass_classr)   Úblocks)
r.   r/   r   r2   r1   r4   r3   ÚflagsZparfor_passÚsub_passr    r    r!   Úrun_parfor_sub_pass^   s$    ö
zBaseTest.run_parfor_sub_passc                 C   s   |   |||¡\}}}}|S r   )r6   )r.   r/   r   r0   r2   r1   r4   r5   r    r    r!   Úrun_parfor_pre_passv   s      ÿzBaseTest.run_parfor_pre_passc                 O   s*   t dd|ƒ}|||Ž}|||Ž}||fS )NT)Úparallel)r   )r   Úfuncr   ÚkwargsZcfuncÚexpectÚgotr    r    r!   Ú_run_parallel}   s    

zBaseTest._run_parallelc                 O   s.   t rd S | j|f|ž|Ž\}}|  ||¡ d S r   )r   rB   ZassertPreciseEqual©r   r>   r   r?   r@   rA   r    r    r!   Úrun_parallelƒ   s    zBaseTest.run_parallelc                 O   sN   t rd S | j|f|ž|Ž\}}|  |tj¡ |  |tj¡ |  |j|j¡ d S r   )r   rB   ÚassertIsInstanceÚnpZndarrayÚassertEqualÚshaperC   r    r    r!   Úrun_parallel_check_output_arrayŠ   s    z(BaseTest.run_parallel_check_output_arrayc                 C   s$   |D ]}|   |d tjjj¡ qd S )NÚnew)rE   r+   r,   r-   ZParfor)r   ÚrecordsZrecr    r    r!   Úcheck_records”   s    zBaseTest.check_records)N)N)r#   r$   r%   Úclassmethodr6   r;   r<   rB   rD   rI   rL   r    r    r    r!   r&   (   s   4

r&   c                   @   s>   e Zd ZejjjZdd„ Zdd„ Z	dd„ Z
dd„ Zd	d
„ ZdS )ÚTestConvertSetItemPassc                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   s   d} t  | ¡}d|d d …< |S )Né
   é   ©rF   Úones©ÚnÚar    r    r!   Ú	test_impl   s    
zATestConvertSetItemPass.test_setitem_full_slice.<locals>.test_implr    é   ÚreasonÚslice©r;   rG   ÚlenÚ	rewrittenrL   rD   ©r   rV   r:   Úrecordr    r    r!   Útest_setitem_full_sliceœ   s    z.TestConvertSetItemPass.test_setitem_full_slicec                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   s   d} t  | ¡}d|d d…< |S )NrO   rP   é   rQ   rS   r    r    r!   rV   ¬   s    
zGTestConvertSetItemPass.test_setitem_slice_stop_bound.<locals>.test_implr    rW   rX   rY   rZ   r]   r    r    r!   Útest_setitem_slice_stop_bound«   s    z4TestConvertSetItemPass.test_setitem_slice_stop_boundc                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   s   d} t  | ¡}d|dd …< |S )NrO   rP   é   rQ   rS   r    r    r!   rV   »   s    
zHTestConvertSetItemPass.test_setitem_slice_start_bound.<locals>.test_implr    rW   rX   rY   rZ   r]   r    r    r!   Útest_setitem_slice_start_boundº   s    z5TestConvertSetItemPass.test_setitem_slice_start_boundc                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   s*   d} t  | ¡}t j|t jd}d||< |S )NrO   ©ÚdtyperP   ©rF   rR   Z	ones_likeZbool_)rT   rU   Úbr    r    r!   rV   Ê   s
    
zGTestConvertSetItemPass.test_setitem_gather_if_scalar.<locals>.test_implr    rW   rX   Zmasked_assign_broadcast_scalarrZ   r]   r    r    r!   Útest_setitem_gather_if_scalarÉ   s    z4TestConvertSetItemPass.test_setitem_gather_if_scalarc                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   s8   d} t  | ¡}t j|t jd}t  |¡}|| ||< |S )NrO   rd   rf   )rT   rU   rg   Úcr    r    r!   rV   Ú   s    

zFTestConvertSetItemPass.test_setitem_gather_if_array.<locals>.test_implr    rW   rX   Zmasked_assign_arrayrZ   r]   r    r    r!   Útest_setitem_gather_if_arrayÙ   s    z3TestConvertSetItemPass.test_setitem_gather_if_arrayN)r#   r$   r%   r+   r,   r-   ZConvertSetItemPassr7   r_   ra   rc   rh   rj   r    r    r    r!   rN   ™   s   
rN   c                   @   sV   e Zd Zejjj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 )ÚTestConvertNumpyPassc                    s\   ‡ fdd„}|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                     s   d} ˆ | ƒ}|S ©NrO   r    rS   ©Úfnr    r!   rV   ï   s    z>TestConvertNumpyPass.check_numpy_allocators.<locals>.test_implr    rW   rX   Únumpy_allocatorrZ   ©r   rn   rV   r:   r^   r    rm   r!   Úcheck_numpy_allocatorsî   s    z+TestConvertNumpyPass.check_numpy_allocatorsc                    s\   ‡ fdd„}|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                     s   d} ˆ | ƒ}|S rl   r    rS   rm   r    r!   rV   ý   s    z:TestConvertNumpyPass.check_numpy_random.<locals>.test_implr    rW   rX   ro   )r;   rG   r[   r\   rL   rI   rp   r    rm   r!   Úcheck_numpy_randomü   s    z'TestConvertNumpyPass.check_numpy_randomc              
   C   s<   t jt jg}|D ]&}|  |j¡ |  |¡ W 5 Q R X qd S r   )rF   rR   ÚzerosÚsubTestr#   rq   ©r   Úfnsrn   r    r    r!   Útest_numpy_allocators
  s    z*TestConvertNumpyPass.test_numpy_allocatorsc              
   C   s:   t jjg}|D ]&}|  |j¡ |  |¡ W 5 Q R X qd S r   )rF   Úrandomrt   r#   rr   ru   r    r    r!   Útest_numpy_random  s    
z&TestConvertNumpyPass.test_numpy_randomc                 C   s‚   dd„ }t  d¡ }}||f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ | j|f|žŽ  d S )	Nc                 S   s   | | S r   r    ©rU   rg   r    r    r!   rV     s    z<TestConvertNumpyPass.test_numpy_arrayexpr.<locals>.test_implrO   c                 S   s   g | ]}t |ƒ‘qS r    ©r   ©Ú.0Úxr    r    r!   Ú
<listcomp>  s     z=TestConvertNumpyPass.test_numpy_arrayexpr.<locals>.<listcomp>rW   rX   Ú	arrayexpr©rF   rR   r;   rG   r[   r\   rL   rD   ©r   rV   rU   rg   r   Úargtypesr:   r^   r    r    r!   Útest_numpy_arrayexpr  s    z)TestConvertNumpyPass.test_numpy_arrayexprc                 C   s‚   dd„ }t  d¡ }}||f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ | j|f|žŽ  d S )	Nc                 S   s    t  |  ¡t  d¡t  |¡  S ©NrW   )rF   ÚsinZfloat64Úsqrtrz   r    r    r!   rV   (  s    zBTestConvertNumpyPass.test_numpy_arrayexpr_ufunc.<locals>.test_implrO   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   .  s     zCTestConvertNumpyPass.test_numpy_arrayexpr_ufunc.<locals>.<listcomp>rW   rX   r€   r   r‚   r    r    r!   Útest_numpy_arrayexpr_ufunc'  s    z/TestConvertNumpyPass.test_numpy_arrayexpr_ufuncc                 C   sˆ   dd„ }t  d¡}t  d¡}||f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d	¡ |  |j¡ | j|f|žŽ  d S )
Nc                 S   s   | | t  d¡ S r…   )rF   Úarrayrz   r    r    r!   rV   9  s    zFTestConvertNumpyPass.test_numpy_arrayexpr_boardcast.<locals>.test_implrO   )é   rO   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   @  s     zGTestConvertNumpyPass.test_numpy_arrayexpr_boardcast.<locals>.<listcomp>rW   rX   r€   r   r‚   r    r    r!   Útest_numpy_arrayexpr_boardcast8  s    

z3TestConvertNumpyPass.test_numpy_arrayexpr_boardcastc                 C   sˆ   dd„ }t  d¡}t  d¡}||f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ | j|f|žŽ  d S )	Nc                 S   s   |   d| j¡} | | S r…   )ÚreshapeÚsizerz   r    r    r!   rV   K  s    zETestConvertNumpyPass.test_numpy_arrayexpr_reshaped.<locals>.test_implrO   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   S  s     zFTestConvertNumpyPass.test_numpy_arrayexpr_reshaped.<locals>.<listcomp>rW   rX   r€   r   r‚   r    r    r!   Útest_numpy_arrayexpr_reshapedJ  s    

z2TestConvertNumpyPass.test_numpy_arrayexpr_reshapedN)r#   r$   r%   r+   r,   r-   ZConvertNumpyPassr7   rq   rr   rw   ry   r„   rˆ   r‹   rŽ   r    r    r    r!   rk   ë   s   
rk   c                   @   s&   e Zd ZejjjZdd„ Zdd„ Z	dS )ÚTestConvertReducePassc                 C   s|   dd„ }t  d¡}|f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ | j|f|žŽ  d S )	Nc                 S   s   t dd„ | dƒS )Nc                 S   s
   t | |ƒS r   ©Úmax©r~   Úyr    r    r!   Ú<lambda>c  ó    zPTestConvertReducePass.test_reduce_max_basic.<locals>.test_impl.<locals>.<lambda>ç        r   ©Úarrr    r    r!   rV   b  s    z>TestConvertReducePass.test_reduce_max_basic.<locals>.test_implrO   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   g  s     z?TestConvertReducePass.test_reduce_max_basic.<locals>.<listcomp>rW   rX   r   r   ©r   rV   r~   r   rƒ   r:   r^   r    r    r!   Útest_reduce_max_basica  s    
z+TestConvertReducePass.test_reduce_max_basicc                 C   s|   dd„ }t  d¡}|f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ | j|f|žŽ  d S )	Nc                 S   s   t dd„ | | dk dƒS )Nc                 S   s
   t | |ƒS r   r   r’   r    r    r!   r”   s  r•   zQTestConvertReducePass.test_reduce_max_masked.<locals>.test_impl.<locals>.<lambda>r`   r–   r   r—   r    r    r!   rV   r  s    z?TestConvertReducePass.test_reduce_max_masked.<locals>.test_implrO   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   w  s     z@TestConvertReducePass.test_reduce_max_masked.<locals>.<listcomp>rW   rX   r   r   r™   r    r    r!   Útest_reduce_max_maskedq  s    
z,TestConvertReducePass.test_reduce_max_maskedN)
r#   r$   r%   r+   r,   r-   ZConvertReducePassr7   rš   r›   r    r    r    r!   r   ^  s   
r   c                   @   s†   e Zd Zejjj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 )ÚTestConvertLoopPassc                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   s"   d} d}t | ƒD ]}||7 }q|S ©Né   r   )r   )rT   ri   Úir    r    r!   rV   †  s
    
z@TestConvertLoopPass.test_prange_reduce_simple.<locals>.test_implr    rW   rX   ÚlooprZ   r]   r    r    r!   Útest_prange_reduce_simple…  s    z-TestConvertLoopPass.test_prange_reduce_simplec                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   s0   d} t  | ¡}t| ƒD ]}||  |7  < q|S ©Nrž   ©rF   rR   r   ©rT   r˜   rŸ   r    r    r!   rV   –  s
    
z=TestConvertLoopPass.test_prange_map_simple.<locals>.test_implr    rW   rX   r    rZ   r]   r    r    r!   Útest_prange_map_simple•  s    z*TestConvertLoopPass.test_prange_map_simplec                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   s2   d} t  | ¡}td| ƒD ]}||  |7  < q|S )Nrž   rŠ   r£   r¤   r    r    r!   rV   ¦  s
    
z;TestConvertLoopPass.test_prange_two_args.<locals>.test_implr    rW   rX   r    rZ   r]   r    r    r!   Útest_prange_two_args¥  s    z(TestConvertLoopPass.test_prange_two_argsc              	   C   sB   dd„ }|   tj¡}|  |d¡ W 5 Q R X |  dt|jƒ¡ d S )Nc                  S   s4   d} t  | ¡}td| dƒD ]}||  |7  < q|S )Nrž   rŠ   é   r£   r¤   r    r    r!   rV   ¶  s
    
z=TestConvertLoopPass.test_prange_three_args.<locals>.test_implr    z4Only constant step size of 1 is supported for prange©ÚassertRaisesr   ZUnsupportedRewriteErrorr;   ZassertInÚstrÚ	exception©r   rV   Zraisesr    r    r!   Útest_prange_three_argsµ  s    þz*TestConvertLoopPass.test_prange_three_argsc                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ |  |¡ d S )Nc                  S   sN   d} t  | | f¡}t| ƒD ].}t|ƒD ] }|||f  |||   7  < q&q|S r¢   )rF   rR   r   Úrange©rT   r˜   rŸ   Újr    r    r!   rV   Å  s     zATestConvertLoopPass.test_prange_map_inner_loop.<locals>.test_implr    rW   rX   r    rZ   r]   r    r    r!   Útest_prange_map_inner_loopÄ  s    z.TestConvertLoopPass.test_prange_map_inner_loopc                 C   s\   dd„ }|   |d¡}|  t|jƒd¡ |  |j¡ |jD ]}|  |d d¡ q8|  |¡ d S )Nc                  S   sN   d} t  | | f¡}t| ƒD ].}t|ƒD ] }|||f  |||   7  < q&q|S r¢   r£   r¯   r    r    r!   rV   Ö  s     zDTestConvertLoopPass.test_prange_map_nested_prange.<locals>.test_implr    r§   rX   r    rZ   r]   r    r    r!   Útest_prange_map_nested_prangeÕ  s    
z1TestConvertLoopPass.test_prange_map_nested_prangec                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |  |j¡ |j\}|  |d d¡ |  |¡ d S )Nc                  S   s@   d} t  | ¡}t| ƒD ]$}|||d … }|d  d7  < q|S )Nrž   rW   r    r£   )rT   r˜   rŸ   Úinnerr    r    r!   rV   ç  s    
zATestConvertLoopPass.test_prange_map_none_index.<locals>.test_implr    rW   rX   r    rZ   r]   r    r    r!   Útest_prange_map_none_indexæ  s    z.TestConvertLoopPass.test_prange_map_none_indexc              	   C   sB   dd„ }|   tj¡}|  |d¡ W 5 Q R X |  dt|jƒ¡ d S )Nc                  S   s4   d} t  | ¡}t| ƒD ]}|d7 }|||d < q|S )Nrž   rW   r£   r¤   r    r    r!   rV   ø  s    
zFTestConvertLoopPass.test_prange_map_overwrite_index.<locals>.test_implr    z Overwrite of parallel loop indexr¨   r¬   r    r    r!   Útest_prange_map_overwrite_index÷  s    þz3TestConvertLoopPass.test_prange_map_overwrite_indexc                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |  |j¡ |j\}|  |d d¡ |  |¡ d S )Nc                  S   sF   d} t  | ¡}tjj ¡  d}tjj t|ƒ¡D ]}||| 7 }q0|S r   )rF   rR   r+   r,   r-   Zinit_prangeZinternal_pranger[   )rT   r˜   ÚvalrŸ   r    r    r!   rV     s    
z7TestConvertLoopPass.test_init_prange.<locals>.test_implr    rW   rX   r    rZ   r]   r    r    r!   Útest_init_prange  s    	z$TestConvertLoopPass.test_init_prangec                 C   sX   dd„ }|   |d¡}|  t|jƒd¡ |  |j¡ |j\}|  |d d¡ |  |¡ d S )Nc                  S   s>   d} t  | | f¡}d}t|jƒD ]}||d |d  7 }q |S )Nrž   r   rW   )rF   rR   r   rH   )rT   r˜   r¶   Úidxr    r    r!   rV     s    z4TestConvertLoopPass.test_pndindex.<locals>.test_implr    rW   rX   r    rZ   r]   r    r    r!   Útest_pndindex  s    z!TestConvertLoopPass.test_pndindexc                 C   sŒ   dd„ }d}t  t  |¡¡ |¡}|f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ | j	|f|žŽ  d S )	Nc                 S   s
   t  | ¡S r   ©rF   Úsumr—   r    r    r!   rV   ,  s    z5TestConvertLoopPass.test_numpy_sum.<locals>.test_impl©é   é   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   2  s     z6TestConvertLoopPass.test_numpy_sum.<locals>.<listcomp>rW   rX   r    ©
rF   ÚarangeÚprodrŒ   r;   rG   r[   r\   rL   rD   ©r   rV   rH   r˜   r   rƒ   r:   r^   r    r    r!   Útest_numpy_sum+  s    z"TestConvertLoopPass.test_numpy_sumc                 C   sŒ   dd„ }d}t  t  |¡¡ |¡}|f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ | j	|f|žŽ  d S )	Nc                 S   s*   | d d …df }t  | |dkdd…f ¡S )Nr   rŠ   rW   r§   rº   )r˜   Zslicedr    r    r!   rV   <  s    zGTestConvertLoopPass.test_numpy_sum_bool_array_masked.<locals>.test_implr¼   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   C  s     zHTestConvertLoopPass.test_numpy_sum_bool_array_masked.<locals>.<listcomp>rW   rX   r    r¿   rÂ   r    r    r!   Ú test_numpy_sum_bool_array_masked;  s    z4TestConvertLoopPass.test_numpy_sum_bool_array_maskedc                 C   s   dd„ }d}t  t  |¡¡ |¡}|f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |jD ]}|  |d d¡ qZ|  |j¡ | j	|f|žŽ  d S )	Nc                 S   s&   t  | jd ¡}t  | d d …|f ¡S r…   )rF   rÀ   rH   r»   )r˜   Úselr    r    r!   rV   M  s    zFTestConvertLoopPass.test_numpy_sum_int_array_masked.<locals>.test_implr¼   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   T  s     zGTestConvertLoopPass.test_numpy_sum_int_array_masked.<locals>.<listcomp>r§   rX   r    r¿   rÂ   r    r    r!   Útest_numpy_sum_int_array_maskedL  s    
z3TestConvertLoopPass.test_numpy_sum_int_array_maskedc                 C   sŒ   dd„ }d}t  t  |¡¡ |¡}|f}dd„ |D ƒ}|  ||¡}|  t|jƒd¡ |j\}|  |d d¡ |  |j¡ | j	|f|žŽ  d S )	Nc                 S   s   |   d¡ | S )NrŠ   )Úfillr—   r    r    r!   rV   _  s    
z=TestConvertLoopPass.test_numpy_fill_method.<locals>.test_implr¼   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   f  s     z>TestConvertLoopPass.test_numpy_fill_method.<locals>.<listcomp>rW   rX   r    r¿   rÂ   r    r    r!   Útest_numpy_fill_method^  s    z*TestConvertLoopPass.test_numpy_fill_methodN)r#   r$   r%   r+   r,   r-   ZConvertLoopPassr7   r¡   r¥   r¦   r­   r±   r²   r´   rµ   r·   r¹   rÃ   rÄ   rÆ   rÈ   r    r    r    r!   rœ   ‚  s   
rœ   c                   @   s2   e Zd ZG dd„ dƒZdd„ Zdd„ Zdd„ Zd	S )
ÚTestPreParforPassc                   @   s   e Zd Zdd„ Zdd„ ZdS )z TestPreParforPass.sub_pass_classc                 C   s   d S r   r    )r   Zpass_statesr    r    r!   r"   s  s    z)TestPreParforPass.sub_pass_class.__init__c                 C   s   d S r   r    )r   r8   r    r    r!   r)   v  s    z$TestPreParforPass.sub_pass_class.runN)r#   r$   r%   r"   r)   r    r    r    r!   r7   r  s   r7   c                 C   sj   dd„ }t  d¡}|f}dd„ |D ƒ}|  ||¡}|  |jd d¡ |  |jd d	¡ | j|f|žŽ  d S )
Nc                 S   s   t jd| jd}|S )Nrž   rd   )rF   rR   re   rz   r    r    r!   rV   {  s    z:TestPreParforPass.test_dtype_conversion.<locals>.test_implrO   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r     s     z;TestPreParforPass.test_dtype_conversion.<locals>.<listcomp>Úreplaced_funcr   Úreplaced_dtyperW   ©rF   rÀ   r<   rG   ÚstatsrD   ©r   rV   r˜   r   rƒ   Úpre_passr    r    r!   Útest_dtype_conversiony  s    
z'TestPreParforPass.test_dtype_conversionc                 C   sj   dd„ }t  d¡}|f}dd„ |D ƒ}|  ||¡}|  |jd d¡ |  |jd d	¡ | j|f|žŽ  d S )
Nc                 S   s
   t  | ¡S r   rº   ©rU   r    r    r!   rV   ‰  s    z9TestPreParforPass.test_sum_replacement.<locals>.test_implrO   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   Ž  s     z:TestPreParforPass.test_sum_replacement.<locals>.<listcomp>rÊ   rW   rË   r   rÌ   rÎ   r    r    r!   Útest_sum_replacementˆ  s    
z&TestPreParforPass.test_sum_replacementc                 C   s„   dd„ }t  d¡}|f}dd„ |D ƒ}tjjj ¡ }| d¡ |  |||¡}|  	|j
d d¡ |  	|j
d	 d¡ | j|f|žŽ  d S )
Nc                 S   s
   t  | ¡S r   rº   rÑ   r    r    r!   rV   –  s    z9TestPreParforPass.test_replacement_map.<locals>.test_implrO   c                 S   s   g | ]}t |ƒ‘qS r    r{   r|   r    r    r!   r   ›  s     z:TestPreParforPass.test_replacement_map.<locals>.<listcomp>)r»   ÚnumpyrÊ   r   rË   )rF   rÀ   r+   r,   r-   Zswap_functions_mapÚcopyÚpopr<   rG   rÍ   rD   )r   rV   r˜   r   rƒ   r0   rÏ   r    r    r!   Útest_replacement_map•  s    

z&TestPreParforPass.test_replacement_mapN)r#   r$   r%   r7   rÐ   rÒ   rÖ   r    r    r    r!   rÉ   q  s   rÉ   Ú__main__)$Ú__doc__ZunittestÚ	functoolsr   rÓ   rF   r+   r   r   r   r   Znumba.parfors.parforZ
numba.corer   r	   r
   r   r   r   r   r   Znumba.core.registryr   Znumba.tests.supportr   r   Úobjectr   r&   rN   rk   r   rœ   rÉ   r#   Úmainr    r    r    r!   Ú<module>   s$   (
qRs$ p4
