a
    þ
þ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    úh/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   s^  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  d   ƒ S 1 sP0    Y  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)   sL    



ÿþûø
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   s2   t dd|ƒ}||i |¤Ž}||i |¤Ž}||fS )NT)Úparallel)r   )r   Úfuncr   ÚkwargsZcfuncÚexpectÚgotr    r    r!   Ú_run_parallel}   s    zBaseTest._run_parallelc                 O   s4   t rd S | j|g|¢R i |¤Ž\}}|  ||¡ d S r   )r   rB   ZassertPreciseEqual©r   r>   r   r?   r@   rA   r    r    r!   Úrun_parallelƒ   s    zBaseTest.run_parallelc                 O   sT   t rd S | j|g|¢R i |¤Ž\}}|  |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   sP   t jt jg}|D ]:}|  |j¡ |  |¡ W d   ƒ q1 s@0    Y  qd S r   )rF   rR   ÚzerosÚsubTestr#   rq   ©r   Úfnsrn   r    r    r!   Útest_numpy_allocators
  s    z*TestConvertNumpyPass.test_numpy_allocatorsc              	   C   sN   t jjg}|D ]:}|  |j¡ |  |¡ W d   ƒ q1 s>0    Y  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|g|¢R Ž  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>  ó    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|g|¢R Ž  d S )	Nc                 S   s    t  |  ¡t  d¡t  |¡  S ©NrW   )rF   ÚsinÚ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   .  r€   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|g|¢R Ž  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   @  r€   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|g|¢R Ž  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  r€   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|g|¢R Ž  d S )	Nc                 S   s   t dd„ | dƒS )Nc                 S   s
   t | |ƒS r   ©Úmax©r~   Úyr    r    r!   Ú<lambda>c  r€   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  r€   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|g|¢R Ž  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  r€   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   sV   dd„ }|   tj¡}|  |d¡ W d   ƒ n1 s60    Y  |  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   sV   dd„ }|   tj¡}|  |d¡ W d   ƒ n1 s60    Y  |  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	|g|¢R Ž  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  r€   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	|g|¢R Ž  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  r€   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	|g|¢R Ž  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  r€   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	|g|¢R Ž  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  r€   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   sl   dd„ }t  d¡}|f}dd„ |D ƒ}|  ||¡}|  |jd d¡ |  |jd d	¡ | j|g|¢R Ž  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     r€   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   sl   dd„ }t  d¡}|f}dd„ |D ƒ}|  ||¡}|  |jd d¡ |  |jd d	¡ | j|g|¢R Ž  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   Ž  r€   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|g|¢R Ž  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   ›  r€   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
