
    J/Ph                         d dl Z d dlZd dlmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZ ed             Z G d d	e          Z G d
 de          Zedk    r e j                     dS dS )    N)contextmanager)njittypes)NumbaInvalidConfigWarning)_parse_refprune_flags)override_configTestCasec              #   d   K   t          d|           5  d V  d d d            d S # 1 swxY w Y   d S )NLLVM_REFPRUNE_FLAGS)r   )flagss    ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_refop_pruning.pyset_refprune_flagsr      s      	.	6	6                   s   %))c                       e Zd ZdZd Zej        d             Zej        d             Zej        d             Z	ej        d             Z
ej        d             Zej        d             Zd	S )
TestRefOpPruningFc                    t          dd          5   t          g |R           |          j        g |R          }ddd           n# 1 swxY w Y   |j                            dd          }|                     |           |                                D ]c\  }}t          ||d          }|                     |           d| }	|r|                     |d|	           K| 	                    |d|	           ddS )a  
        Asserts the the func compiled with argument types "argtys" reports
        refop pruning statistics. The **prune_types** kwargs list each kind
        of pruning and whether the stat should be zero (False) or >0 (True).

        Note: The exact statistic varies across platform.

        NOTE: Tests using this `check` method need to run in subprocesses as
        `njit` sets up the module pass manager etc once and the overrides have
        no effect else.
        LLVM_REFPRUNE_PASS1Nprune_statszfailed checking r   )msg)
r   r   	overloadsmetadatagetassertIsNotNoneitemsgetattrassertGreaterassertEqual)
selffuncargtysprune_typescrespstatskvstatr   s
             r   checkzTestRefOpPruning.check   sr    1377 	@ 	@#4
&

##D))3JfJJ?D	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ ""=$77V$$$%%'' 	3 	3DAq61d++D  &&&(Q((C 3""4"4444  qc 2222	3 	3s   *AAAc                 P    d }|                      |t          j        d           d S )Nc                     t          j        |           }d}| dk    r|dd          }||d         z  }n|d d         }||d         z  }|S )Nr         npzeros)naaccbcs        r   r   z1TestRefOpPruning.test_basic_block_1.<locals>.func9   sX    AC1uuabbEqtcrcFqtJ    T)
basicblockr'   r   intpr   r   s     r   test_basic_block_1z#TestRefOpPruning.test_basic_block_15   s3    		 		 		 	

4%*$
77777r5   c           	          d }t          d          5  |                     |t          j        dddd           d d d            d S # 1 swxY w Y   d S )Nc                 l    t          j        |           }d}| dk    r|                                }|dz   S )Nr      r+   )r.   onessum)r0   r1   xs      r   r   z-TestRefOpPruning.test_diamond_1.<locals>.funcI   s3    

AA1uuEEGGq5Lr5   per_bb,diamondTFr6   diamondfanoutfanout_raiser   r'   r   r8   r9   s     r   test_diamond_1zTestRefOpPruning.test_diamond_1F   s    	 	 	   011 	9 	9JJtejdD#%  9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9   &AA
A
c           	          d }t          d          5  |                     |t          j        dddd           d d d            d S # 1 swxY w Y   d S )Nc                     g }t          |           D ])}|                    t          j        |                     *d}|D ]$}||                                d|j        z   z  z  }%|S )N        r+   )rangeappendr.   aranger?   size)r0   conir4   arrs        r   r   z-TestRefOpPruning.test_diamond_2.<locals>.funcX   sq    C1XX ) )

29Q<<((((A 0 0SWWYY!ch,//Hr5   rA   TFrB   rF   r9   s     r   test_diamond_2zTestRefOpPruning.test_diamond_2U   s    	 	 	   011 	9 	9JJtejdD#%  9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9rH   c                 R    d }|                      |t          j        dd           d S )Nc                     t          j        |           }t          j        |           }||f}d}|D ]}||d         z  }|S )NrK   r   r-   )r0   r1   r3   r@   r2   rQ   s         r   r   z,TestRefOpPruning.test_fanout_1.<locals>.funci   sM    AAAAC  qtJr5   T)r6   rD   r7   r9   s     r   test_fanout_1zTestRefOpPruning.test_fanout_1f   s5    	 	 	 	

4%*$t
DDDDDr5   c           	          d }t          d          5  |                     |t          j        dddd           d d d            d S # 1 swxY w Y   d S )Nc                 z    t          j        |           }t          j        |           }||f}|D ]}| rt          |S N)r.   r/   
ValueError)r0   r1   r3   r@   rQ   s        r   r   z,TestRefOpPruning.test_fanout_2.<locals>.funcw   sL    AAAA % % %$$%Hr5   zper_bb,fanoutTFrB   rF   r9   s     r   test_fanout_2zTestRefOpPruning.test_fanout_2t   s    	 	 	  00 	8 	8JJtejdE"  8 8 8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8rH   c           	          d }t          d          5  |                     |t          j        dddd           d d d            d S # 1 swxY w Y   d S )Nc                     t          j        |           }d}t          j        |          D ]}||                                z  }dS )Nr   r+   )r.   rN   nditeritem)r0   aryr4   r%   s       r   r   z,TestRefOpPruning.test_fanout_3.<locals>.func   sE    )A,,CA Ys^^  QVVXX1r5   zper_bb,fanout_raiseTFrB   rF   r9   s     r   test_fanout_3zTestRefOpPruning.test_fanout_3   s    	 	 	   566 	8 	8JJtejdE#$  8 8 8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8rH   N)__name__
__module____qualname___numba_parallel_test_r'   r	   run_test_in_subprocessr:   rG   rS   rV   r[   ra    r5   r   r   r      s        !3 3 38 $8 8 %$8  $9 9 %$9 $9 9 %$9  $E E %$E $8 8 %$8 $8 8 %$8 8 8r5   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestRefPruneFlagsc                 :    t          j        dt                     d S )Nerror)warningssimplefilterr   r   s    r   setUpzTestRefPruneFlags.setUp   s    g'@AAAAAr5   c                 ,    t          j                     d S rY   )rl   resetwarningsrn   s    r   tearDownzTestRefPruneFlags.tearDown   s         r5   c                 <   t          d          5  |                     t                    5 }t                      }d d d            n# 1 swxY w Y   |                     t          |j                  d           |                     dt          |j        d         j	                             |                     dt          |j        d         j	                             |                     |t          j        j                   d d d            d S # 1 swxY w Y   d S )Nzabc,per_bb,cder=   abcr   cder+   )r   assertWarnsr   r   r   lenrl   assertInstrmessagellvmRefPruneSubpassesPER_BB)r   cmoptvals      r   test_warn_invalid_flagsz)TestRefPruneFlags.test_warn_invalid_flags   s    011 	D 	D!!";<< 1.001 1 1 1 1 1 1 1 1 1 1 1 1 1 1S--q111MM%R[^%;!<!<===MM%R[^%;!<!<===VT%;%BCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds4   DADA
	
DA
	B6DDDc                     t          d          5  t                      }|                     |t          j        j                   d d d            d S # 1 swxY w Y   d S )Nz$per_bb, diamond, fanout,fanout_raiser   r   r   r{   r|   ALLr   r   s     r   test_valid_flagz!TestRefPruneFlags.test_valid_flag   s     FGG 	A 	A*,,FVT%;%?@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A   4AAAc                     t          d          5  t                      }|                     |t          j        j                   d d d            d S # 1 swxY w Y   d S )Nallr   r   s     r   test_the_all_flagz#TestRefPruneFlags.test_the_all_flag   s    && 	A 	A*,,FVT%;%?@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Ar   c                     t          d          5  t                      }t          j        }|                     ||j        |j        z             d d d            d S # 1 swxY w Y   d S )Nzper_bb, fanout)r   r   r{   r|   r   r}   FANOUT)r   r   enumclss      r   test_some_flagsz!TestRefPruneFlags.test_some_flags   s     011 	F 	F*,,F,GVW^gn%DEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs   >AA"AN)	rb   rc   rd   ro   rr   r   r   r   r   rg   r5   r   ri   ri      s        B B B! ! !D D DA A A
A A A
F F F F Fr5   ri   __main__)unittestrl   
contextlibr   numpyr.   llvmlite.bindingbindingr{   numbar   r   numba.core.errorsr   numba.core.codegenr   numba.tests.supportr   r	   r   r   ri   rb   mainrg   r5   r   <module>r      sB     % % % % % %                   7 7 7 7 7 7 4 4 4 4 4 4 9 9 9 9 9 9 9 9   
~8 ~8 ~8 ~8 ~8x ~8 ~8 ~8BF F F F F F F FB zHMOOOOO r5   