
    wi>                         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    n/root/.openclaw/workspace/chatterbox_venv_py311/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                 6   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 ]\  }}t          ||d          }|                     |           d| }	|r8|dk    r|                     |d|	           Q| 	                    |d|	           j| 
                    |d|	           dS )	a  
        Asserts 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 fanout_raiser   )msg)r   r   	overloadsmetadatagetassertIsNotNoneitemsgetattrassertGreaterEqualassertGreaterassertEqual)
selffuncargtysprune_typescrespstatskvstatr   s
             r   checkzTestRefOpPruning.check   s    1377 	@ 	@#4
&

##D))3JfJJ?D	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ ""=$77V$$$%%'' 
	3 
	3DAq61d++D  &&&(Q((C 3&&++D!+====&&tQC&8888  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>.func<   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_18   s3    		 		 		 	

4%*$
77777r7   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-   )r0   onessum)r2   r3   xs      r   r!   z-TestRefOpPruning.test_diamond_1.<locals>.funcL   s3    

AA1uuEEGGq5Lr7   per_bb,diamondTFr8   diamondfanoutr   r   r)   r   r:   r;   s     r   test_diamond_1zTestRefOpPruning.test_diamond_1I   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appendr0   arangerA   size)r2   conir6   arrs        r   r!   z-TestRefOpPruning.test_diamond_2.<locals>.func[   sq    C1XX ) )

29Q<<((((A 0 0SWWYY!ch,//Hr7   rC   TFrD   rG   r;   s     r   test_diamond_2zTestRefOpPruning.test_diamond_2X   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 	9rI   c                 R    d }|                      |t          j        dd           d S )Nc                     t          j        |           }t          j        |           }||f}d}|D ]}||d         z  }|S )NrL   r   r/   )r2   r3   r5   rB   r4   rR   s         r   r!   z,TestRefOpPruning.test_fanout_1.<locals>.funcl   sM    AAAAC  qtJr7   T)r8   rF   r9   r;   s     r   test_fanout_1zTestRefOpPruning.test_fanout_1i   s5    	 	 	 	

4%*$t
DDDDDr7   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)r0   r1   
ValueError)r2   r3   r5   rB   rR   s        r   r!   z,TestRefOpPruning.test_fanout_2.<locals>.funcz   sL    AAAA % % %$$%Hr7   zper_bb,fanoutTFrD   rG   r;   s     r   test_fanout_2zTestRefOpPruning.test_fanout_2w   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 	8rI   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-   )r0   rO   nditeritem)r2   aryr6   r'   s       r   r!   z,TestRefOpPruning.test_fanout_3.<locals>.func   sE    )A,,CA Ys^^  QVVXX1r7   zper_bb,fanout_raiseTFrD   rG   r;   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 	8rI   N)__name__
__module____qualname___numba_parallel_test_r)   r	   run_test_in_subprocessr<   rH   rT   rW   r\   rb    r7   r   r   r      s        !3 3 3> $8 8 %$8  $9 9 %$9 $9 9 %$9  $E E %$E $8 8 %$8 $8 8 %$8 8 8r7   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Ar7   c                 ,    t          j                     d S rZ   )rm   resetwarningsro   s    r   tearDownzTestRefPruneFlags.tearDown   s         r7   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   lenrm   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)	rc   rd   re   rp   rs   r   r   r   r   rh   r7   r   rj   rj      s        B B B! ! !D D DA A A
A A A
F F F F Fr7   rj   __main__)unittestrm   
contextlibr   numpyr0   llvmlite.bindingbindingr|   numbar   r   numba.core.errorsr   numba.core.codegenr   numba.tests.supportr   r	   r   r   rj   rc   mainrh   r7   r   <module>r      sB     % % % % % %                   7 7 7 7 7 7 4 4 4 4 4 4 9 9 9 9 9 9 9 9   
A8 A8 A8 A8 A8x A8 A8 A8HF F F F F F F FB zHMOOOOO r7   