
    J/Ph;                        d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ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 d dlmZmZmZ  G d	 d
e          Z G d de          Z G d de          Zd Zd Zd Zd Zd Z d Z! G d de"          Z#d Z$d Z%d Z&d Z'd Z(d Z) G d de          Z* G d d ee          Z+e,d!k    r ej-                     dS dS )"    N)	takewhile)njitjit)CompilerBaseDefaultPassBuilder)
PreserveIR)IRLegalization)typesir)TestCaseoverride_configSerialMixinc                        e Zd Zd Zd Zd ZdS )_Dummyc                 L    || _         || _        |                    |            d S N)recordername
_add_dummy)selfr   r   s      ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_obj_lifetime.py__init__z_Dummy.__init__   s*     	D!!!!!    c                 x    t          |t                    sJ t          | j        | j        d|j                  S )Nz + )
isinstancer   r   r   )r   others     r   __add__z_Dummy.__add__   s9    %(((((dm$)))UZZ%HIIIr   c                 <    t          | j        d| j        z            S )Nziter(%s))_DummyIteratorr   r   r   s    r   __iter__z_Dummy.__iter__   s    dmZ$)-CDDDr   N)__name__
__module____qualname__r   r   r!    r   r   r   r      sI        " " "
J J JE E E E Er   r   c                       e Zd ZdZd ZeZdS )r   r   c                     | j         dk    rt          | xj         dz  c_         t          | j        | j        d| j                   S )N      #)countStopIterationr   r   r   r    s    r   __next__z_DummyIterator.__next__#   sC    :??

a

dm			4::%FGGGr   N)r"   r#   r$   r+   r-   nextr%   r   r   r   r      s,        EH H H DDDr   r   c                   `    e Zd ZdZd Zd Zd ZeZd Zd Z	e
d             Ze
d             Zd	S )
RefRecorderz
    An object which records events when instances created through it
    are deleted.  Custom events can also be recorded to aid in
    diagnosis.
    c                 ^    t          j        t                    | _        g | _        i | _        d S r   )collectionsdefaultdictint_counts_events_wrsr    s    r   r   zRefRecorder.__init__3   s&    ".s33			r   c                 "    t          | |          S )zK
        Make an object whose deletion will be recorded as *name*.
        )r   )r   r   s     r   
make_dummyzRefRecorder.make_dummy8   s     dD!!!r   c                 X    t          j        || j                  }|j        | j        |<   d S r   )weakrefref_on_disposalr   r7   )r   dummywrs      r   r   zRefRecorder._add_dummy>   s'    [ 122
	"r   c                     | j         |         dz   }|| j         |<   | j                            |                    |                     dS )zr
        Manually append *event* to the recorded events.
        *event* can be formatted using format().
        r)   )r+   N)r5   r6   appendformat)r   eventr+   s      r   markzRefRecorder.markD   sK    
 U#a'#UELLuL5566666r   c                 n    | j                             |          }| j                            |           d S r   )r7   popr6   rA   )r   r?   r   s      r   r=   zRefRecorder._on_disposalM   s1    y}}R  D!!!!!r   c                 $    d | j         D             S )zC
        A list of objects which haven't been deleted yet.
        c                 "    g | ]} |            S r%   r%   ).0r?   s     r   
<listcomp>z%RefRecorder.alive.<locals>.<listcomp>V   s    ))))))r   )r7   r    s    r   alivezRefRecorder.aliveQ   s    
 *)ty))))r   c                     | j         S )z,
        A list of recorded events.
        )r6   r    s    r   recordedzRefRecorder.recordedX   s    
 |r   N)r"   r#   r$   __doc__r   r9   r   __call__rD   r=   propertyrK   rM   r%   r   r   r0   r0   ,   s           
" " "# # # H7 7 7" " " * * X*   X  r   r0   c                      | d          } | d          } | d          }||z   }|                      d           ||z   }|                      d           |S )Nabc--1----2--rD   )recrR   rS   rT   ds        r   simple_usecase1rZ   `   sd    CACACA	AAHHW	AAHHWHr   c                 h     | d          } | d          }|                      d           |}|}d }|S )NrR   rS   rU   rW   )rX   rR   rS   xys        r   simple_usecase2r^   j   sB    CACAHHW	A	AAHr   c                      | d          } | d          } | d          }|}|D ]}||z   }|                      d           |                      d           ||z   }|S )NrR   rS   rT   --loop bottom----loop exit--rW   )rX   rR   rS   rT   r\   r]   s         r   looping_usecase1rb   s   s|    CACACA	A $ $E"####HH_	AAHr   c                     | d          } | d          } | d          }|D ]}|                      d           ||z   }||z   }|                      d           |D ]1}|                      d           ||z   }|                      d           2|                      d           |r||z   }n n+|                      d	           |                      d
           |                      d           |S )NrR   rS   cum--outer loop top--z--inner loop entry #{count}--z--inner loop top #{count}--z--inner loop bottom #{count}--z--inner loop exit #{count}--z--outer loop bottom #{count}----outer loop else----outer loop exit--rW   )rX   rR   rS   rd   r\   zr]   s          r   looping_usecase2ri      s   CACA
#e**C ( (%&&&AgE0111 	7 	7AHH2333'CHH56666/000 	a%CC E12222&'''HH"###Jr   c              #   F   K    | d          } | d          }|V  |V  d S NrR   rS   r%   rX   rR   rS   s      r   generator_usecase1rm      s6      CACA
GGG
GGGGGr   c              #   P   K    | d          } | d          }|D ]}|V  |V  d S rk   r%   )rX   rR   rS   r\   s       r   generator_usecase2ro      sG      CACA  
GGGGGr   c                       e Zd ZdS )MyErrorN)r"   r#   r$   r%   r   r   rq   rq      s        Dr   rq   c                      t          |           r   rq   )r\   s    r   do_raisert      s    
!**r   c                      | d          } | d          } | d          }|rt          d            | d          }||z    ||z    d S )NrR   rS   rY   foorT   rt   )rX   rR   rS   rY   rT   s        r   raising_usecase1rx      s_    CACACA CHH	AEEEEr   c                 t     | d          } | d          }|r | d          }t          |           ||z    d S )NrR   rS   rT   rw   )rX   rR   rS   rT   s       r   raising_usecase2rz      sI    CACA CHHEEEEr   c                 T     | d          } | d          }|rt          |          d S rk   rs   rl   s      r   raising_usecase3r|      s:    CACA ajj r   c                    d}t          |          D ]}|                     t          |                     d}t          |          D ]}  dS |dk     rB|dk    r,t          |          D ]}|c c S |                     d           |                     d           |                     d           |                     d           dS )zN
    This test reveal a bug that there is a del on uninitialized variable
       r      FAILEDOK)rangerD   str)rX   nijs       r   del_before_definitionr      s     	
A1XX  Qq 		 		A1111uuaq  AHHHHH"""HHXHHTNNN2r   c              #      K   	 |                      d           dV   | d          }|r|                      d           	 =)z^
    test to reveal bug of invalid liveness when infinite loop has multiple
    backedge.
    TyieldNpbrarW   )rX   r   s     r   inf_loop_multiple_back_edger      sR      
CHH 	HHUOOOr   c                   n    e Zd ZdZd ZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd ZdS )TestObjLifetimezH
    Test lifetime of Python objects inside jit-compiled functions.
    c                 R     t          t          j        fdd          |          }|S )NTF)forceobjlooplift)r   r
   pyobject)r   pyfunccfuncs      r   compilezTestObjLifetime.compile   s-     FU^%uEEEfMMr   Nc                     t                      }|                     |          }|9|                     |          5   ||           d d d            n# 1 swxY w Y   n ||           |S r   )r0   r   assertRaises)r   r   raisesrX   r   s        r   compile_and_recordz"TestObjLifetime.compile_and_record   s    mmV$$""6**  c


               E#JJJ
s   AAAc                     g }|j         }t          |          }|D ]0}||v r*|                    |           |                    |           1|                     ||d|           dS )zk
        Check that the *expected* markers occur in that order in *rec*'s
        recorded events.
        z%the full list of recorded events is: N)rM   listrA   removeassertEqual)r   rX   expectedactualrM   	remainingrY   s          r   assertRecordOrderz!TestObjLifetime.assertRecordOrder   s    
 <NN	 	$ 	$AI~~a     ###FNhP	R 	R 	R 	R 	Rr   c                     |                      t                    }|                     |j                   |                     |g d           |                     |g d           |                     |g d           d S )N)rR   rS   rU   )rR   rT   rU   )rU   zb + crV   )r   rZ   assertFalserK   r   r   rX   s     r   test_simple1zTestObjLifetime.test_simple1  s    %%o66###s$7$7$7888s$7$7$7888s$?$?$?@@@@@r   c                     |                      t                    }|                     |j                   |                     |g d           d S )N)rS   rU   rR   )r   r^   r   rK   r   r   s     r   test_simple2zTestObjLifetime.test_simple2  sN    %%o66###s$7$7$788888r   c                     |                      t                    }|                     |j                   |                     |g d           |                     |g d           d S )N)rR   rS   ra   rT   )	iter(a)#1r`   	iter(a)#2r`   	iter(a)#3r`   iter(a)ra   )r   rb   r   rK   r   r   s     r   test_looping1zTestObjLifetime.test_looping1  s|    %%&677###s$D$D$DEEEs %' %' %' 	( 	( 	( 	( 	(r   c                 ^   |                      t                    }|                     |j                   |                     |ddg           |                     |g d           |                     |g d           |                     |g d           |                     |ddg           d S )NrR   re   )r   rf   rg   )iter(b)z--inner loop exit #1--r   z--inner loop exit #2--r   z--inner loop exit #3--)r   z--inner loop entry #1--r   z--inner loop entry #2--r   z--inner loop entry #3--ziter(a)#1 + iter(a)#1z--outer loop bottom #1--)r   ri   r   rK   r   r   s     r   test_looping2zTestObjLifetime.test_looping2(  s    %%&677###sS*>$?@@@s %< %< %< 	= 	= 	=s %' %' %' 	( 	( 	(
 	s %' %' %' 	( 	( 	(
 	s%<%?%' 	( 	( 	( 	( 	(r   c                    |                      |          }t                      }|                     |          5   ||          }t          |           |                     |j                   t          |           |                     |j                   d d d            n# 1 swxY w Y   t                      }|                     |          5   ||          }~t          j	                     |                     |j                   d d d            n# 1 swxY w Y   t                      }|                     |          5   ||          }t          |           |                     |j                   ~t          j	                     |                     |j                   d d d            d S # 1 swxY w Y   d S r   )
r   r0   assertRefCountr.   
assertTruerK   r   r   gccollect)r   genfuncr   rX   gens        r   exercise_generatorz"TestObjLifetime.exercise_generator>  sJ   W%%mm  %% 	( 	(%**CIIIOOCI&&&IIISY'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( mm  %% 	( 	(%**CJLLLSY'''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( mm  %% 	( 	(%**CIIIOOCI&&&JLLLSY'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s7   AB##B'*B':DDDA#F55F9<F9c                 :    |                      t                     d S r   )r   rm   r    s    r   test_generator1zTestObjLifetime.test_generator1Y       233333r   c                 :    |                      t                     d S r   )r   ro   r    s    r   test_generator2zTestObjLifetime.test_generator2\  r   r   c                 t    |                      t                    }|                     |j        g d           d S )N)012)r   r   r   rM   r   s     r   test_del_before_definitionz*TestObjLifetime.test_del_before_definition_  s8    %%&;<<77777r   c                     |                      t                    5  |                     t          t                    }|                     |j                   d d d            d S # 1 swxY w Y   d S N)r   )r   rt   r   rx   rq   r   rK   r   s     r   test_raising1zTestObjLifetime.test_raising1c        ** 	( 	())*:7)KKCSY'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(   <A$$A(+A(c                     |                      t                    5  |                     t          t                    }|                     |j                   d d d            d S # 1 swxY w Y   d S r   )r   rt   r   rz   rq   r   rK   r   s     r   test_raising2zTestObjLifetime.test_raising2h  r   r   c                     |                      t                    5  |                     t          t                    }|                     |j                   d d d            d S # 1 swxY w Y   d S r   )r   rq   r   r|   r   rK   r   s     r   test_raising3zTestObjLifetime.test_raising3m  s      )) 	( 	())*:7)KKCSY'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(r   c                    |                      t                    }t                      }t           ||                    }t	          |           |                     |j        g            t	          |           |                     |j        g            t	          |           |                     |j        g            |                     |j        g d           d S )N)r   r   r   r   r   r   r   )r   r   r0   iterr.   r   rK   rM   )r   r   rX   iterators       r    test_inf_loop_multiple_back_edgez0TestObjLifetime.test_inf_loop_multiple_back_edger  s    899mmc

##XB'''XB'''XB'''LLL	N 	N 	N 	N 	Nr   r   )r"   r#   r$   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r   r   r   r      s             R R R"A A A9 9 9

( 
( 
(( ( (,( ( (64 4 44 4 48 8 8( ( (
( ( (
( ( (
N N N N Nr   r   c                       e Zd Zd Zd ZdS )TestExtendingVariableLifetimesc                     d } fd} |d          }g t           j        fdz  t           j        t           j        t           j        t           j        t           j        t           j        t           j        } |||            |d          }g t           j        fdz  t           j        t           j        fdz  t           j        } |||           d S )Nc                     G d dt                     }t          |          d             }t          d|           5   |             |j        |j        d                  }|j        d         }d d d            n# 1 swxY w Y   |S )Nc                       e Zd Zd ZdS )`TestExtendingVariableLifetimes.test_lifetime_basic.<locals>.get_ir.<locals>.IRPreservingCompilerc                     t          j        | j                  }|                    t          t
                     |                                 |gS r   r   define_nopython_pipelinestateadd_pass_afterr   r	   finalizer   pms     r   define_pipelineszqTestExtendingVariableLifetimes.test_lifetime_basic.<locals>.get_ir.<locals>.IRPreservingCompiler.define_pipelines  >    +DTZPPB%%j.AAAKKMMM4Kr   Nr"   r#   r$   r   r%   r   r   IRPreservingCompilerr     #                 r   r   )pipeline_classc                  "    d} d}| |z   }||z  }|S N
      r%   rR   rS   rT   rY   s       r   rv   zOTestExtendingVariableLifetimes.test_lifetime_basic.<locals>.get_ir.<locals>.foo  #    EEr   EXTEND_VARIABLE_LIFETIMESr   preserved_ir)r   r   r   	overloads
signaturesmetadata)extend_lifetimesr   rv   cresfunc_irs        r   get_irzBTestExtendingVariableLifetimes.test_lifetime_basic.<locals>.get_ir  s             |       !5666  76 !!<>NOO 8 8}S^A%67-78 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 Ns   0A99A= A=c                                          t          | j                  d           t          t	          | j                                                            }t          ||j                  D ]\  }}                    ||           d S )Nr)   )	r   lenblocksr.   r   valueszipbodyassertIsInstance)r   expectblkexpect_classgot_stmtr   s        r   checkzATestExtendingVariableLifetimes.test_lifetime_basic.<locals>.check  s    S00!444tGN11334455C +.fch*?*? > >&h%%h====> >r   Fr(   T   )r   AssignDelReturn)r   r   r   del_after_use_irr   del_at_block_end_irs   `     r   test_lifetime_basicz2TestExtendingVariableLifetimes.test_lifetime_basic  s    	 	 	4	> 	> 	> 	> 	> "6%==0RYL1$ 0rv 0rv 0ry 0"& 0)0V0%'Y0'''$fTll ORYL1$NryNRVIMNBIN!6*****r   c                    d } |d          } |dd          } |dd          }d }|                       ||                     |                       ||                     |                      ||                     d S )Nc                       G d dt                     }t          dd|i| d             } |             |j        |j        d                  }|j        d         }|S )Nc                       e Zd Zd ZdS )fTestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.get_ir.<locals>.IRPreservingCompilerc                     t          j        | j                  }|                    t          t
                     |                                 |gS r   r   r   s     r   r   zwTestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.get_ir.<locals>.IRPreservingCompiler.define_pipelines  r   r   Nr   r%   r   r   r   r
    r   r   r   r   c                  "    d} d}| |z   }||z  }|S r   r%   r   s       r   rv   zUTestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.get_ir.<locals>.foo  r   r   r   r   r%   )r   r   r   r   r   )optionsr   rv   r   r   s        r   r   zHTestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.get_ir  s             |       AA!5AAA  BA CEEE=!23DmN3GNr   T)debug)r  _dbg_extend_lifetimesFc                 t   | j                                         \  }d |j        D             }t          t	          t
          j        |                    }t          |          }t          t	          t
          j        ||d                              }|t          |          z   }|t          |          dz
  k    S )Nc                 B    g | ]}t          |t          j                  S r%   )r   r   r  )rI   stmts     r   rJ   zoTestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.is_del_grouped_at_the_end.<locals>.<listcomp>  s$    III:dBF33IIIr   r)   )	r   r   r   r   r   operatornot_r   truth)firr   inst_is_delnot_delsbeginall_delsends          r   is_del_grouped_at_the_endz[TestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.is_del_grouped_at_the_end  s    J%%''ESIIIIIKIhm[AABBHMMEIhnk%&&6IJJKKH#h--'C #k**Q...r   )r   r   )r   r   ir_debugir_debug_extir_debug_no_extr  s         r   test_dbg_extend_lifetimesz8TestExtendingVariableLifetimes.test_dbg_extend_lifetimes  s    	 	 	2 6%%%vDEEE &t5III	/ 	/ 	/  	11(;;<<<11,??@@@22?CCDDDDDr   N)r"   r#   r$   r  r   r%   r   r   r   r     s8        
0+ 0+ 0+d3E 3E 3E 3E 3Er   r   __main__).r2   r;   r   r  	itertoolsr   unittestnumbar   r   numba.core.compilerr   r   numba.core.untyped_passesr   numba.core.typed_passesr	   
numba.corer
   r   numba.tests.supportr   r   r   objectr   r   r0   rZ   r^   rb   ri   rm   ro   RuntimeErrorrq   rt   rx   rz   r|   r   r   r   r   r"   mainr%   r   r   <module>r-     s        				                 @ @ @ @ @ @ @ @ 0 0 0 0 0 0 2 2 2 2 2 2                 F F F F F F F F F FE E E E EV E E E
 
 
 
 
V 
 
 
1 1 1 1 1& 1 1 1h    
 
 
  2    	 	 	 	 	l 	 	 	  
 
 

 
 
    .  SN SN SN SN SNh SN SN SNljE jE jE jE jE[( jE jE jEZ zHMOOOOO r   