
    |hB                         S SK r S SKrS SKJr  S SKrS SKJr  S SK	J
r
Jr  S SKJr  S SKJr  S SKJrJr  \S 5       r " S S	\5      r " S
 S\5      r\S:X  a  \ R.                  " 5         gg)    N)contextmanager)njittypes)NumbaInvalidConfigWarning)_parse_refprune_flags)override_configTestCasec              #   `   #    [        SU 5         S v   S S S 5        g ! , (       d  f       g = f7f)NLLVM_REFPRUNE_FLAGS)r   )flagss    X/home/james-whalen/.local/lib/python3.13/site-packages/numba/tests/test_refop_pruning.pyset_refprune_flagsr      s     	.	6 
7	6	6s   .	.
+.c                       \ rS rSrSrS r\R                  S 5       r\R                  S 5       r	\R                  S 5       r
\R                  S 5       r\R                  S 5       r\R                  S	 5       rS
rg)TestRefOpPruning   Fc                    [        SS5         [        / UQ75      " U5      R                  / UQ7   nSSS5        WR                  R	                  SS5      nU R                  U5        UR                  5        Hk  u  pg[        XVS5      nU R                  U5        SU 3n	U(       a,  US:X  a  U R                  USU	S9  MG  U R                  USU	S9  MZ  U R                  USU	S9  Mm     g! , (       d  f       N= f)	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 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   checkTestRefOpPruning.check   s     137
&
#D)33JfJ?D 8 ""=$7V$%%'DA6d+D  &$QC(C&++D!+=&&tQC&8  qc 2 ( 87s   %C''
C5c                 H    S nU R                  U[        R                  SS9  g )Nc                 v    [         R                  " U 5      nSnU S:  a  USS  nX#S   -  nU$ US S nX$S   -  nU$ )Nr         npzeros)naaccbcs        r   r"   1TestRefOpPruning.test_basic_block_1.<locals>.func<   sU    AC1uabEt J crFtJ    T)
basicblockr*   r   intpr!   r"   s     r   test_basic_block_1#TestRefOpPruning.test_basic_block_18   s    		 	

4%**$
7r:   c           
          S n[        S5         U R                  U[        R                  SSSSS9  S S S 5        g ! , (       d  f       g = f)Nc                 h    [         R                  " U 5      nSnU S:  a  UR                  5       nUS-   $ )Nr      r/   )r2   onessum)r4   r5   xs      r   r"   -TestRefOpPruning.test_diamond_1.<locals>.funcL   s/    
AA1uEEGq5Lr:   per_bb,diamondTFr;   diamondfanoutr   r   r*   r   r=   r>   s     r   test_diamond_1TestRefOpPruning.test_diamond_1I   s@    	   01JJtejjdD#%  9 211	   #;
A	c           
          S n[        S5         U R                  U[        R                  SSSSS9  S S S 5        g ! , (       d  f       g = f)Nc                     / n[        U 5       H(  nUR                  [        R                  " U5      5        M*     SnU H%  nX4R	                  5       SUR
                  -   -  -  nM'     U$ )N        r/   )rangeappendr2   arangerE   size)r4   conir8   arrs        r   r"   -TestRefOpPruning.test_diamond_2.<locals>.func[   sX    C1X

299Q<( AWWY!chh,// Hr:   rH   TFrI   rL   r>   s     r   test_diamond_2TestRefOpPruning.test_diamond_2X   s@    	   01JJtejjdD#%  9 211rO   c                 J    S nU R                  U[        R                  SSS9  g )Nc                     [         R                  " U 5      n[         R                  " U 5      nX4nSnU H
  nXES   -  nM     U$ )NrR   r   r1   )r4   r5   r7   rF   r6   rX   s         r   r"   ,TestRefOpPruning.test_fanout_1.<locals>.funcl   sB    AAACt Jr:   T)r;   rK   r<   r>   s     r   test_fanout_1TestRefOpPruning.test_fanout_1i   s!    	 	

4%**$t
Dr:   c           
          S n[        S5         U R                  U[        R                  SSSSS9  S S S 5        g ! , (       d  f       g = f)Nc                     [         R                  " U 5      n[         R                  " U 5      nX4nU H  nU (       d  M  [        e   U$ N)r2   r3   
ValueError)r4   r5   r7   rF   rX   s        r   r"   ,TestRefOpPruning.test_fanout_2.<locals>.funcz   s?    AAA1$$  Hr:   zper_bb,fanoutTFrI   rL   r>   s     r   test_fanout_2TestRefOpPruning.test_fanout_2w   s?    	  0JJtejjdE"  8 100rO   c           
          S n[        S5         U R                  U[        R                  SSSSS9  S S S 5        g ! , (       d  f       g = f)Nc                     [         R                  " U 5      nSn[         R                  " U5       H  nX#R                  5       -  nM     g)Nr   r/   )r2   rU   nditeritem)r4   aryr8   r(   s       r   r"   ,TestRefOpPruning.test_fanout_3.<locals>.func   s8    ))A,CA YYs^VVX $r:   zper_bb,fanout_raiseTFrI   rL   r>   s     r   test_fanout_3TestRefOpPruning.test_fanout_3   s@    	   56JJtejjdE#$  8 766rO    N)__name__
__module____qualname____firstlineno___numba_parallel_test_r*   r	   run_test_in_subprocessr?   rM   r[   r`   rg   ro   __static_attributes__rq   r:   r   r   r      s    !3> $$8 %8  $$9 %9 $$9 %9  $$E %E $$8 %8 $$8 %8r:   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestRefPruneFlags   c                 :    [         R                  " S[        5        g )Nerror)warningssimplefilterr   r!   s    r   setUpTestRefPruneFlags.setUp   s    g'@Ar:   c                 .    [         R                  " 5         g rd   )r~   resetwarningsr   s    r   tearDownTestRefPruneFlags.tearDown   s     r:   c                 &   [        S5         U R                  [        5       n[        5       nS S S 5        U R	                  [        WR                  5      S5        U R                  S[        UR                  S   R                  5      5        U R                  S[        UR                  S   R                  5      5        U R	                  W[        R                  R                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nzabc,per_bb,cderC   abcr   cder/   )r   assertWarnsr   r   r    lenr~   assertInstrmessagellvmRefPruneSubpassesPER_BB)r!   cmoptvals      r   test_warn_invalid_flags)TestRefPruneFlags.test_warn_invalid_flags   s     01!!";<.0 =S-q1MM%R[[^%;%;!<=MM%R[[^%;%;!<=VT%;%;%B%BC 21<< 21s"   DC1B;D1
C?	;D
Dc                     [        S5         [        5       nU R                  U[        R                  R
                  5        S S S 5        g ! , (       d  f       g = f)Nz$per_bb, diamond, fanout,fanout_raiser   r   r    r   r   ALLr!   r   s     r   test_valid_flag!TestRefPruneFlags.test_valid_flag   s<     FG*,FVT%;%;%?%?@ HGG   5A


Ac                     [        S5         [        5       nU R                  U[        R                  R
                  5        S S S 5        g ! , (       d  f       g = f)Nallr   r   s     r   test_the_all_flag#TestRefPruneFlags.test_the_all_flag   s:    &*,FVT%;%;%?%?@ '&&r   c                     [        S5         [        5       n[        R                  nU R	                  XR
                  UR                  -  5        S S S 5        g ! , (       d  f       g = f)Nzper_bb, fanout)r   r   r   r   r    r   FANOUT)r!   r   enumclss      r   test_some_flags!TestRefPruneFlags.test_some_flags   sE     01*,F,,GV^^gnn%DE 211s   AA
A&rq   N)rr   rs   rt   ru   r   r   r   r   r   r   rx   rq   r:   r   rz   rz      s%    B!DA
A
Fr:   rz   __main__)unittestr~   
contextlibr   numpyr2   llvmlite.bindingbindingr   numbar   r   numba.core.errorsr   numba.core.codegenr   numba.tests.supportr   r	   r   r   rz   rr   mainrq   r:   r   <module>r      sj      %    7 4 9  
A8x A8HF FB zMMO r:   