U
    Ã9%e	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    ú^/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/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_contextÚ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)r5   )r7   r   ÚFlagsr,   r-   r.   Z
ParforPassr   r   r   r   r   r   r   r   Z_pre_runÚsub_pass_classr*   Úblocks)
r/   r0   r   r3   r2   r5   r4   ÚflagsZparfor_passÚsub_passr    r    r!   Úrun_parfor_sub_pass^   s$    ö
zBaseTest.run_parfor_sub_passc                 C   s   |   |||¡\}}}}|S r   )r7   )r/   r0   r   r1   r3   r2   r5   r6   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   rD   ZassertPreciseEqual©r   r@   r   rA   rB   rC   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   rD   ÚassertIsInstanceÚnpZndarrayÚassertEqualÚshaperE   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)rG   r,   r-   r.   ZParfor)r   ÚrecordsZrecr    r    r!   Úcheck_records”   s    zBaseTest.check_records)N)N)r#   r$   r%   Úclassmethodr7   r=   r>   rD   rF   rK   rN   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é
   é   ©rH   Úones©ÚnÚar    r    r!   Ú	test_impl   s    
zATestConvertSetItemPass.test_setitem_full_slice.<locals>.test_implr    é   ÚreasonÚslice©r=   rI   ÚlenÚ	rewrittenrN   rF   ©r   rX   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 )NrQ   rR   é   rS   rU   r    r    r!   rX   ¬   s    
zGTestConvertSetItemPass.test_setitem_slice_stop_bound.<locals>.test_implr    rY   rZ   r[   r\   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 )NrQ   rR   é   rS   rU   r    r    r!   rX   »   s    
zHTestConvertSetItemPass.test_setitem_slice_start_bound.<locals>.test_implr    rY   rZ   r[   r\   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 )NrQ   ©ÚdtyperR   ©rH   rT   Z	ones_likeZbool_)rV   rW   Úbr    r    r!   rX   Ê   s
    
zGTestConvertSetItemPass.test_setitem_gather_if_scalar.<locals>.test_implr    rY   rZ   Zmasked_assign_broadcast_scalarr\   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 )NrQ   rf   rh   )rV   rW   ri   Úcr    r    r!   rX   Ú   s    

zFTestConvertSetItemPass.test_setitem_gather_if_array.<locals>.test_implr    rY   rZ   Zmasked_assign_arrayr\   r_   r    r    r!   Útest_setitem_gather_if_arrayÙ   s    z3TestConvertSetItemPass.test_setitem_gather_if_arrayN)r#   r$   r%   r,   r-   r.   ZConvertSetItemPassr9   ra   rc   re   rj   rl   r    r    r    r!   rP   ™   s   
rP   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 ©NrQ   r    rU   ©Úfnr    r!   rX   ï   s    z>TestConvertNumpyPass.check_numpy_allocators.<locals>.test_implr    rY   rZ   Únumpy_allocatorr\   ©r   rp   rX   r<   r`   r    ro   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 rn   r    rU   ro   r    r!   rX   ý   s    z:TestConvertNumpyPass.check_numpy_random.<locals>.test_implr    rY   rZ   rq   )r=   rI   r]   r^   rN   rK   rr   r    ro   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   )rH   rT   ZzerosÚsubTestr#   rs   ©r   Úfnsrp   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   )rH   Úrandomru   r#   rt   rv   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    ©rW   ri   r    r    r!   rX     s    z<TestConvertNumpyPass.test_numpy_arrayexpr.<locals>.test_implrQ   c                 S   s   g | ]}t |ƒ‘qS r    ©r   ©Ú.0Úxr    r    r!   Ú
<listcomp>  s     z=TestConvertNumpyPass.test_numpy_arrayexpr.<locals>.<listcomp>rY   rZ   Ú	arrayexpr©rH   rT   r=   rI   r]   r^   rN   rF   ©r   rX   rW   ri   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 ©NrY   )rH   ÚsinZfloat64Úsqrtr{   r    r    r!   rX   (  s    zBTestConvertNumpyPass.test_numpy_arrayexpr_ufunc.<locals>.test_implrQ   c                 S   s   g | ]}t |ƒ‘qS r    r|   r}   r    r    r!   r€   .  s     zCTestConvertNumpyPass.test_numpy_arrayexpr_ufunc.<locals>.<listcomp>rY   rZ   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†   )rH   Úarrayr{   r    r    r!   rX   9  s    zFTestConvertNumpyPass.test_numpy_arrayexpr_boardcast.<locals>.test_implrQ   )é   rQ   c                 S   s   g | ]}t |ƒ‘qS r    r|   r}   r    r    r!   r€   @  s     zGTestConvertNumpyPass.test_numpy_arrayexpr_boardcast.<locals>.<listcomp>rY   rZ   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Úsizer{   r    r    r!   rX   K  s    zETestConvertNumpyPass.test_numpy_arrayexpr_reshaped.<locals>.test_implrQ   c                 S   s   g | ]}t |ƒ‘qS r    r|   r}   r    r    r!   r€   S  s     zFTestConvertNumpyPass.test_numpy_arrayexpr_reshaped.<locals>.<listcomp>rY   rZ   r   r‚   rƒ   r    r    r!   Útest_numpy_arrayexpr_reshapedJ  s    

z2TestConvertNumpyPass.test_numpy_arrayexpr_reshapedN)r#   r$   r%   r,   r-   r.   ZConvertNumpyPassr9   rs   rt   rx   rz   r…   r‰   rŒ   r   r    r    r    r!   rm   ë   s   
rm   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!   rX   b  s    z>TestConvertReducePass.test_reduce_max_basic.<locals>.test_implrQ   c                 S   s   g | ]}t |ƒ‘qS r    r|   r}   r    r    r!   r€   g  s     z?TestConvertReducePass.test_reduce_max_basic.<locals>.<listcomp>rY   rZ   r   r‚   ©r   rX   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>rb   r—   r   r˜   r    r    r!   rX   r  s    z?TestConvertReducePass.test_reduce_max_masked.<locals>.test_implrQ   c                 S   s   g | ]}t |ƒ‘qS r    r|   r}   r    r    r!   r€   w  s     z@TestConvertReducePass.test_reduce_max_masked.<locals>.<listcomp>rY   rZ   r   r‚   rš   r    r    r!   Útest_reduce_max_maskedq  s    
z,TestConvertReducePass.test_reduce_max_maskedN)
r#   r$   r%   r,   r-   r.   ZConvertReducePassr9   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   )rV   rk   Úir    r    r!   rX   †  s
    
z@TestConvertLoopPass.test_prange_reduce_simple.<locals>.test_implr    rY   rZ   Úloopr\   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Ÿ   ©rH   rT   r   ©rV   r™   r    r    r    r!   rX   –  s
    
z=TestConvertLoopPass.test_prange_map_simple.<locals>.test_implr    rY   rZ   r¡   r\   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!   rX   ¦  s
    
z;TestConvertLoopPass.test_prange_two_args.<locals>.test_implr    rY   rZ   r¡   r\   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!   rX   ¶  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   rX   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£   )rH   rT   r   Úrange©rV   r™   r    Újr    r    r!   rX   Å  s     zATestConvertLoopPass.test_prange_map_inner_loop.<locals>.test_implr    rY   rZ   r¡   r\   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!   rX   Ö  s     zDTestConvertLoopPass.test_prange_map_nested_prange.<locals>.test_implr    r¨   rZ   r¡   r\   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Ÿ   rY   r    r¤   )rV   r™   r    Úinnerr    r    r!   rX   ç  s    
zATestConvertLoopPass.test_prange_map_none_index.<locals>.test_implr    rY   rZ   r¡   r\   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Ÿ   rY   r¤   r¥   r    r    r!   rX   ø  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ž   )rH   rT   r,   r-   r.   Zinit_prangeZinternal_pranger]   )rV   r™   Úvalr    r    r    r!   rX     s    
z7TestConvertLoopPass.test_init_prange.<locals>.test_implr    rY   rZ   r¡   r\   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   rY   )rH   rT   r   rJ   )rV   r™   r·   Úidxr    r    r!   rX     s    z4TestConvertLoopPass.test_pndindex.<locals>.test_implr    rY   rZ   r¡   r\   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   ©rH   Úsumr˜   r    r    r!   rX   ,  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>rY   rZ   r¡   ©
rH   ÚarangeÚprodr   r=   rI   r]   r^   rN   rF   ©r   rX   rJ   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‹   rY   r¨   r»   )r™   Zslicedr    r    r!   rX   <  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>rY   rZ   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†   )rH   rÁ   rJ   r¼   )r™   Úselr    r    r!   rX   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¨   rZ   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!   rX   _  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>rY   rZ   r¡   rÀ   rÃ   r    r    r!   Útest_numpy_fill_method^  s    z*TestConvertLoopPass.test_numpy_fill_methodN)r#   r$   r%   r,   r-   r.   ZConvertLoopPassr9   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   r:   r    r    r!   r*   v  s    z$TestPreParforPass.sub_pass_class.runN)r#   r$   r%   r"   r*   r    r    r    r!   r9   r  s   r9   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Ÿ   rf   )rH   rT   rg   r{   r    r    r!   rX   {  s    z:TestPreParforPass.test_dtype_conversion.<locals>.test_implrQ   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_dtyperY   ©rH   rÁ   r>   rI   ÚstatsrF   ©r   rX   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»   ©rW   r    r    r!   rX   ‰  s    z9TestPreParforPass.test_sum_replacement.<locals>.test_implrQ   c                 S   s   g | ]}t |ƒ‘qS r    r|   r}   r    r    r!   r€   Ž  s     z:TestPreParforPass.test_sum_replacement.<locals>.<listcomp>rË   rY   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!   rX   –  s    z9TestPreParforPass.test_replacement_map.<locals>.test_implrQ   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Ì   )rH   rÁ   r,   r-   r.   Zswap_functions_mapÚcopyÚpopr>   rI   rÎ   rF   )r   rX   r™   r   r„   r1   rÐ   r    r    r!   Útest_replacement_map•  s    

z&TestPreParforPass.test_replacement_mapN)r#   r$   r%   r9   rÑ   rÓ   r×   r    r    r    r!   rÊ   q  s   rÊ   Ú__main__)$Ú__doc__ZunittestÚ	functoolsr   rÔ   rH   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&   rP   rm   r   r   rÊ   r#   Úmainr    r    r    r!   Ú<module>   s$   (
qRs$ p4
