
    xKg                         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.                          yy)    N)contextmanager)njittypes)NumbaInvalidConfigWarning)_parse_refprune_flags)override_configTestCasec              #   V   K   t        d|       5  d  d d d        y # 1 sw Y   y xY ww)NLLVM_REFPRUNE_FLAGS)r   )flagss    b/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_refop_pruning.pyset_refprune_flagsr      s     	.	6 
7	6	6s   )	)&)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y	)
TestRefOpPruningFc                    t        dd      5   t        g |      |      j                  g |   }ddd       j                  j	                  dd      }| j                  |       |j                         D ]S  \  }}t        ||d      }| j                  |       d| }	|r| j                  |d|	       @| j                  |d|	       U y# 1 sw Y   xY w)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   s     137#4
&
#D)33JfJ?D 8 ""=$7V$%%'DAq61d+D  &$QC(C""4"4  qc 2 ( 87s   %CCc                 N    d }| j                  |t        j                  d       y )Nc                 v    t        j                  |       }d}| dkD  r|dd  }||d   z  }|S |d d }||d   z  }|S )Nr         npzeros)naaccbcs        r   r   z1TestRefOpPruning.test_basic_block_1.<locals>.func9   sY    AC1uabEqt J crFqtJ    T)
basicblockr'   r   intpr   r   s     r   test_basic_block_1z#TestRefOpPruning.test_basic_block_15   s    		 	

4%**$
7r5   c           	          d }t        d      5  | j                  |t        j                  dddd       d d d        y # 1 sw Y   y xY w)Nc                 d    t        j                  |       }d}| dkD  r|j                         }|dz   S )Nr      r+   )r.   onessum)r0   r1   xs      r   r   z-TestRefOpPruning.test_diamond_1.<locals>.funcI   s/    
AA1uEEG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JJtejjdD#%  9 211	   &>Ac           	          d }t        d      5  | j                  |t        j                  dddd       d d d        y # 1 sw Y   y xY w)Nc                     g }t        |       D ]&  }|j                  t        j                  |             ( d}|D ]%  }||j	                         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   sZ    C1X

299Q<( ASWWY!chh,// Hr5   rA   TFrB   rF   r9   s     r   test_diamond_2zTestRefOpPruning.test_diamond_2U   s@    	   01JJtejjdD#%  9 211rH   c                 P    d }| j                  |t        j                  dd       y )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   sF    AAAACqt Jr5   T)r6   rD   r7   r9   s     r   test_fanout_1zTestRefOpPruning.test_fanout_1f   s!    	 	

4%**$t
Dr5   c           	          d }t        d      5  | j                  |t        j                  dddd       d d d        y # 1 sw Y   y xY w)Nc                     t        j                  |       }t        j                  |       }||f}|D ]
  }| st         |S N)r.   r/   
ValueError)r0   r1   r3   r@   rQ   s        r   r   z,TestRefOpPruning.test_fanout_2.<locals>.funcw   s?    AAAA$$  Hr5   zper_bb,fanoutTFrB   rF   r9   s     r   test_fanout_2zTestRefOpPruning.test_fanout_2t   s?    	  0JJtejjdE"  8 100rH   c           	          d }t        d      5  | j                  |t        j                  dddd       d d d        y # 1 sw Y   y xY w)Nc                     t        j                  |       }d}t        j                  |      D ]  }||j                         z  } y)Nr   r+   )r.   rN   nditeritem)r0   aryr4   r%   s       r   r   z,TestRefOpPruning.test_fanout_3.<locals>.func   s:    ))A,CA YYs^QVVX $r5   zper_bb,fanout_raiseTFrB   rF   r9   s     r   test_fanout_3zTestRefOpPruning.test_fanout_3   s@    	   56JJtejjdE#$  8 766rH   N)__name__
__module____qualname___numba_parallel_test_r'   r	   run_test_in_subprocessr:   rG   rS   rV   r[   ra    r5   r   r   r      s    !38 $$8 %8  $$9 %9 $$9 %9  $$E %E $$8 %8 $$8 %8r5   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestRefPruneFlagsc                 8    t        j                  dt               y )Nerror)warningssimplefilterr   r   s    r   setUpzTestRefPruneFlags.setUp   s    g'@Ar5   c                 ,    t        j                          y rY   )rl   resetwarningsrn   s    r   tearDownzTestRefPruneFlags.tearDown   s     r5   c                    t        d      5  | j                  t              5 }t               }d d d        | j	                  t        j                        d       | j                  dt        |j                  d   j                               | j                  dt        |j                  d   j                               | j	                  t        j                  j                         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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!!";<.0 =S-q1MM%R[[^%;%;!<=MM%R[[^%;%;!<=VT%;%;%B%BC 21<< 21s"   C=C1B;C=1C:	6C==Dc                     t        d      5  t               }| j                  |t        j                  j
                         d d d        y # 1 sw Y   y xY w)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*,FVT%;%;%?%?@ HGG   5A

Ac                     t        d      5  t               }| j                  |t        j                  j
                         d d d        y # 1 sw Y   y xY w)Nallr   r   s     r   test_the_all_flagz#TestRefPruneFlags.test_the_all_flag   s:    &*,FVT%;%;%?%?@ '&&r   c                     t        d      5  t               }t        j                  }| j	                  ||j
                  |j                  z         d d d        y # 1 sw Y   y xY w)Nzper_bb, fanout)r   r   r{   r|   r   r}   FANOUT)r   r   enumclss      r   test_some_flagsz!TestRefPruneFlags.test_some_flags   sG     01*,F,,GVW^^gnn%DE 211s   AAA"N)	rb   rc   rd   ro   rr   r   r   r   r   rg   r5   r   ri   ri      s%    B!DA
A
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      sl      %    7 4 9  
~8x ~8BF FB zHMMO r5   