
    pi>                         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    `/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/numba/tests/test_refop_pruning.pyset_refprune_flagsr      s(     	.	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y	)
TestRefOpPruningFc                    t        dd      5   t        g |      |      j                  g |   }ddd       j                  j	                  dd      }| j                  |       |j                         D ]m  \  }}t        ||d      }| j                  |       d| }	|r/|dk(  r| j                  |d|	       E| j                  |d|	       Z| j                  |d|	       o y# 1 sw Y   xY w)	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 	@#4
&
#D)33JfJ?D	@ ""=$7V$%%' 
	3DAq61d+D  &$QC(C&++D!+=&&tQC&8  qc 2
	3	@ 	@s   %C((C1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>.func<   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_18   s    		 	

4%**$
7r7   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-   )r0   onessum)r2   r3   xs      r   r!   z-TestRefOpPruning.test_diamond_1.<locals>.funcL   s/    
AA1uEEGq5Lr7   per_bb,diamondTFr8   diamondfanoutr   r   r)   r   r:   r;   s     r   test_diamond_1zTestRefOpPruning.test_diamond_1I   sI    	   01 	9JJtejjdD#%  9	9 	9 	9	   &>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appendr0   arangerA   size)r2   conir6   arrs        r   r!   z-TestRefOpPruning.test_diamond_2.<locals>.func[   sd    C1X )

299Q<()A 0SWWY!chh,//0Hr7   rC   TFrD   rG   r;   s     r   test_diamond_2zTestRefOpPruning.test_diamond_2X   sI    	   01 	9JJtejjdD#%  9	9 	9 	9rI   c                 P    d }| j                  |t        j                  dd       y )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   sK    AAAAC qtJr7   T)r8   rF   r9   r;   s     r   test_fanout_1zTestRefOpPruning.test_fanout_1i   s!    	 	

4%**$t
Dr7   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)r0   r1   
ValueError)r2   r3   r5   rB   rR   s        r   r!   z,TestRefOpPruning.test_fanout_2.<locals>.funcz   sD    AAAA %$$% Hr7   zper_bb,fanoutTFrD   rG   r;   s     r   test_fanout_2zTestRefOpPruning.test_fanout_2w   sH    	  0 	8JJtejjdE"  8	8 	8 	8rI   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-   )r0   rO   nditeritem)r2   aryr6   r'   s       r   r!   z,TestRefOpPruning.test_fanout_3.<locals>.func   s?    ))A,CA YYs^ QVVXr7   zper_bb,fanout_raiseTFrD   rG   r;   s     r   test_fanout_3zTestRefOpPruning.test_fanout_3   sI    	   56 	8JJtejjdE#$  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> $$8 %8  $$9 %9 $$9 %9  $$E %E $$8 %8 $$8 %8r7   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'@Ar7   c                 ,    t        j                          y rZ   )rm   resetwarningsro   s    r   tearDownzTestRefPruneFlags.tearDown   s     r7   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   lenrm   assertInstrmessagellvmRefPruneSubpassesPER_BB)r    cmoptvals      r   test_warn_invalid_flagsz)TestRefPruneFlags.test_warn_invalid_flags   s     01 	D!!";< 1.01S-q1MM%R[[^%;%;!<=MM%R[[^%;%;!<=VT%;%;%B%BC	D 	D1 1	D 	Ds"   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   sH     FG 	A*,FVT%;%;%?%?@	A 	A 	A   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   sG    & 	A*,FVT%;%;%?%?@	A 	A 	A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   sT     01 	F*,F,,GVW^^gnn%DE	F 	F 	Fs   AAA"N)	rc   rd   re   rp   rs   r   r   r   r   rh   r7   r   rj   rj      s%    B!DA
A
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      sl      %    7 4 9  
A8x A8HF FB zHMMO r7   