
    sh                         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    r/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/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        HR  u  pg[        XVS5      nU R                  U5        SU 3n	U(       a  U R                  USU	S9  MA  U R                  USU	S9  MT     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 r   )msg)
r   r   	overloadsmetadatagetassertIsNotNoneitemsgetattr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""4"4  qc 2 ( 87s   %C
C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>.func9   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_15   s    		 	

4%**$
7r8   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-   )r0   onessum)r2   r3   xs      r   r    -TestRefOpPruning.test_diamond_1.<locals>.funcI   s/    
AA1uEEGq5Lr8   per_bb,diamondTFr9   diamondfanoutfanout_raiser   r(   r   r;   r<   s     r   test_diamond_1TestRefOpPruning.test_diamond_1F   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appendr0   arangerC   size)r2   conir6   arrs        r   r    -TestRefOpPruning.test_diamond_2.<locals>.funcX   sX    C1X

299Q<( AWWY!chh,// Hr8   rF   TFrG   rK   r<   s     r   test_diamond_2TestRefOpPruning.test_diamond_2U   s@    	   01JJtejjdD#%  9 211rN   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$ )NrQ   r   r/   )r2   r3   r5   rD   r4   rW   s         r   r    ,TestRefOpPruning.test_fanout_1.<locals>.funci   sB    AAACt Jr8   T)r9   rI   r:   r<   s     r   test_fanout_1TestRefOpPruning.test_fanout_1f   s!    	 	

4%**$t
Dr8   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)r0   r1   
ValueError)r2   r3   r5   rD   rW   s        r   r    ,TestRefOpPruning.test_fanout_2.<locals>.funcw   s?    AAA1$$  Hr8   zper_bb,fanoutTFrG   rK   r<   s     r   test_fanout_2TestRefOpPruning.test_fanout_2t   s?    	  0JJtejjdE"  8 100rN   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-   )r0   rT   nditeritem)r2   aryr6   r&   s       r   r    ,TestRefOpPruning.test_fanout_3.<locals>.func   s8    ))A,CA YYs^VVX $r8   zper_bb,fanout_raiseTFrG   rK   r<   s     r   test_fanout_3TestRefOpPruning.test_fanout_3   s@    	   56JJtejjdE#$  8 766rN    N)__name__
__module____qualname____firstlineno___numba_parallel_test_r(   r	   run_test_in_subprocessr=   rL   rZ   r_   rf   rn   __static_attributes__rp   r8   r   r   r      s    !38 $$8 %8  $$9 %9 $$9 %9  $$E %E $$8 %8 $$8 %8r8   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'@Ar8   c                 .    [         R                  " 5         g rc   )r}   resetwarningsr   s    r   tearDownTestRefPruneFlags.tearDown   s     r8   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,cderA   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&rp   N)rq   rr   rs   rt   r   r   r   r   r   r   rw   rp   r8   r   ry   ry      s%    B!DA
A
Fr8   ry   __main__)unittestr}   
contextlibr   numpyr0   llvmlite.bindingbindingr   numbar   r   numba.core.errorsr   numba.core.codegenr   numba.tests.supportr   r	   r   r   ry   rq   mainrp   r8   r   <module>r      sj      %    7 4 9  
~8x ~8BF FB zMMO r8   