
    xKg;                        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jZ                          yy)"    N)	takewhile)njitjit)CompilerBaseDefaultPassBuilder)
PreserveIR)IRLegalization)typesir)TestCaseoverride_configSerialMixinc                       e Zd Zd Zd Zd Zy)_Dummyc                 B    || _         || _        |j                  |        y N)recordername
_add_dummy)selfr   r   s      a/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_obj_lifetime.py__init__z_Dummy.__init__   s     	D!    c                     t        |t              sJ t        | j                  | j                  d|j                        S )Nz + )
isinstancer   r   r   )r   others     r   __add__z_Dummy.__add__   s0    %(((dmm$))UZZ%HIIr   c                 H    t        | j                  d| j                  z        S )Nziter(%s))_DummyIteratorr   r   r   s    r   __iter__z_Dummy.__iter__   s    dmmZ$))-CDDr   N)__name__
__module____qualname__r   r   r!    r   r   r   r      s    "
JEr   r   c                       e Zd ZdZd ZeZy)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__#   s>    ::?

a
dmm		4::%FGGr   N)r"   r#   r$   r+   r-   nextr%   r   r   r   r      s    EH Dr   r   c                   R    e Zd ZdZd Zd Zd ZeZd Zd Z	e
d        Ze
d        Zy	)
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 | _        y r   )collectionsdefaultdictint_counts_events_wrsr    s    r   r   zRefRecorder.__init__3   s"    "..s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                 v    t        j                  || j                        }|j                  | j                  |<   y r   )weakrefref_on_disposalr   r7   )r   dummywrs      r   r   zRefRecorder._add_dummy>   s)    [[ 1 12

		"r   c                     | j                   |   dz   }|| j                   |<   | j                  j                  |j                  |             y)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   sB    
 U#a'#UELLuL56r   c                 p    | j                   j                  |      }| j                  j                  |       y r   )r7   popr6   rA   )r   r?   r   s      r   r=   zRefRecorder._on_disposalM   s&    yy}}R D!r   c                 J    | j                   D cg c]	  } |        c}S c c}w )zC
        A list of objects which haven't been deleted yet.
        )r7   )r   r?   s     r   alivezRefRecorder.aliveQ   s"    
  $yy)yy)))s    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=   propertyrH   rJ   r%   r   r   r0   r0   ,   sO    
"# H7" * *  r   r0   c                      | d      } | d      } | d      }||z   }| j                  d       ||z   }| j                  d       |S )Nabc--1----2--rD   )recrO   rP   rQ   ds        r   simple_usecase1rW   `   sL    CACACA	AAHHW	AAHHWHr   c                 T     | d      } | d      }| j                  d       |}|}d }|S )NrO   rP   rR   rT   )rU   rO   rP   xys        r   simple_usecase2r[   j   s4    CACAHHW	A	AAHr   c                      | d      } | d      } | d      }|}|D ]  }||z   }| j                  d        | j                  d       ||z   }|S )NrO   rP   rQ   --loop bottom----loop exit--rT   )rU   rO   rP   rQ   rY   rZ   s         r   looping_usecase1r_   s   s^    CACACA	AE"#  HH_	AAHr   c                     | d      } | d      } | d      }|D ]  }| j                  d       ||z   }||z   }| j                  d       |D ])  }| j                  d       ||z   }| j                  d       + | j                  d       |r|z   }n n$| j                  d	        | j                  d
       | j                  d       |S )NrO   rP   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--rT   )rU   rO   rP   ra   rY   zrZ   s          r   looping_usecase2rf      s    CACA
e*C%&AgE01AHH23'CHH56  	/0a%C 12 " 	&'HH"#Jr   c              #   <   K    | d      } | d      }| | y wNrO   rP   r%   rU   rO   rP   s      r   generator_usecase1rj      s"     CACA
G
Gs   c              #   J   K    | d      } | d      }|D ]  }|  | y wrh   r%   )rU   rO   rP   rY   s       r   generator_usecase2rl      s,     CACA 
Gs   !#c                       e Zd Zy)MyErrorN)r"   r#   r$   r%   r   r   rn   rn      s    r   rn   c                     t        |       r   rn   )rY   s    r   do_raiserq      s    
!*r   c                 r     | d      } | d      } | d      }|rt        d        | d      }||z    |z    y )NrO   rP   rV   foorQ   rq   )rU   rO   rP   rV   rQ   s        r   raising_usecase1ru      s>    CACACAH	AEr   c                 X     | d      } | d      }|r | d      }t        |       |z    y )NrO   rP   rQ   rt   )rU   rO   rP   rQ   s       r   raising_usecase2rw      s.    CACAHEr   c                 >     | d      } | d      }|rt        |      y rh   rp   ri   s      r   raising_usecase3ry      s&    CACAaj 	r   c                 L   d}t        |      D ]  }| j                  t        |             d}t        |      D ]  }  y |dk  r7|dk(  r&t        |      D ]  }|c c S  | j                  d       | j                  d       | j                  d        | j                  d       y)zN
    This test reveal a bug that there is a del on uninitialized variable
       r      FAILEDOK)rangerD   str)rU   nijs       r   del_before_definitionr      s     	
A1XQqA  1uaqAH ""HHX  HHTNr   c              #   p   K   	 | j                  d       d  | d      }|r| j                  d       	 2w)z^
    test to reveal bug of invalid liveness when infinite loop has multiple
    backedge.
    yieldNpbrarT   )rU   r   s     r   inf_loop_multiple_back_edger      s9     
 HHHUO s   46c                   l    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y)TestObjLifetimezH
    Test lifetime of Python objects inside jit-compiled functions.
    c                 L     t        t        j                  fdd      |      }|S )NTF)forceobjlooplift)r   r
   pyobject)r   pyfunccfuncs      r   compilezTestObjLifetime.compile   s&     FU^^%uEfMr   Nc                     t               }| j                  |      }|$| j                  |      5   ||       d d d        |S  ||       |S # 1 sw Y   |S xY wr   )r0   r   assertRaises)r   r   raisesrU   r   s        r   compile_and_recordz"TestObjLifetime.compile_and_record   sY    mV$""6*c
 + 
 #J
	 + 
s   	AAc                     g }|j                   }t        |      }|D ])  }||v s|j                  |       |j                  |       + | j	                  ||d|       y)zk
        Check that the *expected* markers occur in that order in *rec*'s
        recorded events.
        z%the full list of recorded events is: N)rJ   listrA   removeassertEqual)r   rU   expectedactualrJ   	remainingrV   s          r   assertRecordOrderz!TestObjLifetime.assertRecordOrder   sa    
 <<N	AI~a   #	 
 	FNP	Rr   c                     | j                  t              }| j                  |j                         | j	                  |g d       | j	                  |g d       | j	                  |g d       y )N)rO   rP   rR   )rO   rQ   rR   )rR   zb + crS   )r   rW   assertFalserH   r   r   rU   s     r   test_simple1zTestObjLifetime.test_simple1  sW    %%o6#s$78s$78s$?@r   c                     | j                  t              }| j                  |j                         | j	                  |g d       y )N)rP   rR   rO   )r   r[   r   rH   r   r   s     r   test_simple2zTestObjLifetime.test_simple2  s5    %%o6#s$78r   c                     | j                  t              }| j                  |j                         | j	                  |g d       | j	                  |g d       y )N)rO   rP   r^   rQ   )	iter(a)#1r]   	iter(a)#2r]   	iter(a)#3r]   iter(a)r^   )r   r_   r   rH   r   r   s     r   test_looping1zTestObjLifetime.test_looping1  sK    %%&67#s$DEs %' 	(r   c                 ,   | j                  t              }| j                  |j                         | j	                  |ddg       | j	                  |g d       | j	                  |g d       | j	                  |g d       | j	                  |ddg       y )NrO   rb   )r   rc   rd   )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   rf   r   rH   r   r   s     r   test_looping2zTestObjLifetime.test_looping2(  s    %%&67#sS*>$?@s %< 	=s %' 	(
 	s %' 	(
 	s%<%?%' 	(r   c                    | j                  |      }t               }| j                  |      5   ||      }t        |       | j	                  |j
                         t        |       | j                  |j
                         d d d        t               }| j                  |      5   ||      }~t        j                          | j                  |j
                         d d d        t               }| j                  |      5   ||      }t        |       | j	                  |j
                         ~t        j                          | j                  |j
                         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY wr   )
r   r0   assertRefCountr.   
assertTruerH   r   r   gccollect)r   genfuncr   rU   gens        r   exercise_generatorz"TestObjLifetime.exercise_generator>  s   W%m  %*CIOOCII&ISYY' & m  %*CJJLSYY'	 & m  %*CIOOCII&JJLSYY' &% &% &% &%s%   AE)%9E5AF)E25E>F
c                 .    | j                  t               y r   )r   rj   r    s    r   test_generator1zTestObjLifetime.test_generator1Y       23r   c                 .    | j                  t               y r   )r   rl   r    s    r   test_generator2zTestObjLifetime.test_generator2\  r   r   c                 j    | j                  t              }| j                  |j                  g d       y )N)012)r   r   r   rJ   r   s     r   test_del_before_definitionz*TestObjLifetime.test_del_before_definition_  s'    %%&;<7r   c                     | j                  t              5  | j                  t        t              }| j                  |j                         d d d        y # 1 sw Y   y xY wN)r   )r   rq   r   ru   rn   r   rH   r   s     r   test_raising1zTestObjLifetime.test_raising1c  D      *))*:7)KCSYY' +**   7AAc                     | j                  t              5  | j                  t        t              }| j                  |j                         d d d        y # 1 sw Y   y xY wr   )r   rq   r   rw   rn   r   rH   r   s     r   test_raising2zTestObjLifetime.test_raising2h  r   r   c                     | j                  t              5  | j                  t        t              }| j	                  |j
                         d d d        y # 1 sw Y   y xY wr   )r   rn   r   ry   r   rH   r   s     r   test_raising3zTestObjLifetime.test_raising3m  sD      )))*:7)KCSYY' *))r   c                    | j                  t              }t               }t         ||            }t	        |       | j                  |j                  g        t	        |       | j                  |j                  g        t	        |       | j                  |j                  g        | j                  |j                  g d       y )N)r   r   r   r   r   r   r   )r   r   r0   iterr.   r   rH   rJ   )r   r   rU   iterators       r    test_inf_loop_multiple_back_edgez0TestObjLifetime.test_inf_loop_multiple_back_edger  s    89mc
#XB'XB'XB'L	Nr   r   )r"   r#   r$   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r   r   r   r      sU    R"A9

((,(6448(
(
(
Nr   r   c                       e Zd Zd Zd Zy)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                  } |||       y )Nc                      G d dt               }t        |      d        }t        d|       5   |        |j                  |j                  d      }|j
                  d   }d d d        |S # 1 sw Y   S xY w)Nc                       e Zd Zd Zy)`TestExtendingVariableLifetimes.test_lifetime_basic.<locals>.get_ir.<locals>.IRPreservingCompilerc                     t        j                  | j                        }|j                  t        t
               |j                          |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  6    +DDTZZPB%%j.AKKM4Kr   Nr"   r#   r$   r   r%   r   r   IRPreservingCompilerr          r   r   )pipeline_classc                  "    d} d}| |z   }||z  }|S N
      r%   rO   rP   rQ   rV   s       r   rs   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   rs   cresfunc_irs        r   get_irzBTestExtendingVariableLifetimes.test_lifetime_basic.<locals>.get_ir  s{     |   !56 7 !!<>NO}}S^^A%67--7 P
 N P
 Ns   3A++A5c                    j                  t        | j                        d       t        t	        | j                  j                                     }t        ||j                        D ]  \  }}j                  ||        y Nr)   )	r   lenblocksr.   r   valueszipbodyassertIsInstance)r   expectblkexpect_classgot_stmtr   s        r   checkzATestExtendingVariableLifetimes.test_lifetime_basic.<locals>.check  se    S0!4tGNN11345C +.fchh*?&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	> "%=0RYYL1$ 0rvv 0rvv 0ryy 0"&& 0))0VV0%'YY0'$Tl ORYYL1$NryyNRVVIMNBIIN!6*r   c                     d } |d      } |dd      } |dd      }d }| j                   ||             | j                   ||             | j                   ||             y )Nc                       G d dt               }t        dd|i| d        } |        |j                  |j                  d      }|j                  d   }|S )Nc                       e Zd Zd Zy)fTestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.get_ir.<locals>.IRPreservingCompilerc                     t        j                  | j                        }|j                  t        t
               |j                          |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   rs   zUTestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.get_ir.<locals>.foo  r   r   r   r   r%   )r   r   r   r   r   )optionsr   rs   r   r   s        r   r   zHTestExtendingVariableLifetimes.test_dbg_extend_lifetimes.<locals>.get_ir  sb     |   A!5AA B E==!23DmmN3GNr   T)debug)r  _dbg_extend_lifetimesFc                    | j                   j                         \  }|j                  D cg c]  }t        |t        j
                         }}t        t        t        j                  |            }t        |      }t        t        t        j                  ||d              }|t        |      z   }|t        |      dz
  k(  S c c}w r   )r   r   r   r   r   r   r   r   operatornot_r   truth)firr   stmt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    JJ%%'ES@CI:dBFF3KIIhmm[ABHMEIhnnk%&6IJKH#h-'C #k*Q... Js   !C)r   r   )r   r   ir_debugir_debug_extir_debug_no_extr  s         r   test_dbg_extend_lifetimesz8TestExtendingVariableLifetimes.test_dbg_extend_lifetimes  sj    	2 %DE t5I	/  	1(;<1,?@2?CDr   N)r"   r#   r$   r  r  r%   r   r   r   r     s    
0+d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   rW   r[   r_   rf   rj   rl   RuntimeErrorrn   rq   ru   rw   ry   r   r   r   r   r"   mainr%   r   r   <module>r*     s      	     @ 0 2   F FEV E
V 
1& 1h
2	l 	

.SNh SNljE[( jEZ zHMMO r   