+
    :iAt                        ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
 ^ RIHtHtHtHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtH t H!t!H"t"H#t#H$t$H%t% ^ RI&H't' ^ RI(t(](PR                  ! ]P                  PU                  R4      '       * R4      t+](PR                  ! ]PX                  ! 4       R 9  R4      t- ! R R].4      t/ ! R R](P@                  4      t0 ! R R](P@                  4      t1 ! R R](P@                  4      t2 ! R R] 4      t3 ! R R](P@                  4      t4]$ ! R R]] 4      4       t5 ! R R] 4      t6]7R8X  d   ](Pp                  ! 4        R# R# )!    Nnjit)types)rtsysnrtopt_nrt_pythonnrt)	intrinsicinclude_path)	signature)impl_ret_untracked)irNRT_get_api)EnableNRTStatsMixinTestCasetemp_directoryimport_dynamicskip_if_32bitskip_unless_cffirun_in_subprocess)
cpu_targetlinuxzlinux only testzx86 only testc                   0   a  ] tR t^%t o ^ tR tR tRtV tR# )Dummyc                J    \        V 4      ;P                  ^,          un        R#    Ntypealiveselfs   &R/var/www/html/photoedit/myenv/lib/python3.14/site-packages/numba/tests/test_nrt.py__init__Dummy.__init__(       T
A    c                J    \        V 4      ;P                  ^,          un        R# r   r   r"   s   &r$   __del__Dummy.__del__+   r'   r(    N)	__name__
__module____qualname____firstlineno__r!   r%   r*   __static_attributes____classdictcell____classdict__s   @r$   r   r   %   s     E r(   r   c                   .   a  ] tR t^/t o RtRtR tRtV tR# )TestNrtMemInfoNotInitializedzb
Unit test for checking the use of the NRT fails if the
initialization sequence has not been run.
Fc                   R RRRRR	/pVP                  4        F  w  r# V P                  \        4      ;_uu_ 4       pR\        n        \        \        V4      pV! V!   RRR4       RpV P                  V\        XP                  4      4       R\        n        K  	  R#   + '       g   i     LH; i  R\        n        i ; i)
librarymeminfo_newmeminfo_allocFNz'Runtime must be initialized before use.Tr,   )r,   r,   )r,   )	itemsassertRaisesRuntimeErrorr   _initgetattrassertInstr	exception)r#   methodsmethargsraisesfnmsgs   &      r$   test_init_fail+TestNrtMemInfoNotInitialized.test_init_fail6   s    b ("E
 "--/JD	#&&|44"'EK -BI 5
 @c3v'7'7#89" *44 #s"   B1"B/B1B.)B11B>r,   N)	r-   r.   r/   r0   __doc___numba_parallel_test_rI   r1   r2   r3   s   @r$   r6   r6   /   s      "# #r(   r6   c                   j   a a ] tR t^It oRtV 3R ltR tR tR tR t	R t
]R 4       tR	 tR
tVtV ;t# )TestNrtMemInfoz*
Unit test for core MemInfo functionality
c                   < ^ \         n        \        P                  ! \        P
                  4       \        \        V `#  4        R# r   N)	r   r!   r   
initializer   target_contextsuperrN   setUpr#   	__class__s   &r$   rT   TestNrtMemInfo.setUpN   s+    223nd)+r(   c                6   \        4       pV P                  \         P                  ^4       Rp\        P                  ! W!4      pV P                  VP
                  ^4       ?V P                  \         P                  ^4       VP                  4        V P                  VP
                  ^4       V P                  \         P                  ^4       VP                  4        V P                  VP
                  ^4       ?V P                  \         P                  ^ 4       R# r   l   J[= N)r   assertEqualr!   r   r9   refcountacquirerelease)r#   daddrmis   &   r$   test_meminfo_refct_1#TestNrtMemInfo.test_meminfo_refct_1U   s    Ga(t'a(a(


a(a(


a(a(r(   c                ~   \        4       pV P                  \         P                  ^4       Rp\        P                  ! W!4      pV P                  VP
                  ^4       ?V P                  \         P                  ^4       \        ^d4       F  pVP                  4        K  	  V P                  VP
                  ^e4       V P                  \         P                  ^4       \        ^d4       F  pVP                  4        K  	  V P                  VP
                  ^4       ?V P                  \         P                  ^ 4       R# rY   )	r   rZ   r!   r   r9   r[   ranger\   r]   )r#   r^   r_   r`   ct_s   &     r$   test_meminfo_refct_2#TestNrtMemInfo.test_meminfo_refct_2f   s    Ga(t'a(a(*BJJL g.a(sAJJL a(a(r(   c                   \        4       pV P                  \         P                  ^4       Rp\        P                  ! W!4      pV P                  VP
                  ^4       \        V4      pV P                  VP
                  ^4       V P                  W#P                  4       V P                  VP                  4       V P                  W4P                  4       V P                  VP                  4       V P                  VP                  ^4       V P                  VP                  ^4       ??V P                  \         P                  ^4       ?V P                  \         P                  ^ 4       R# rY   )r   rZ   r!   r   r9   r[   
memoryviewdataassertFalsereadonlyassertIsobj
assertTruec_contiguousitemsizendim)r#   r^   r_   r`   mviews   &    r$   test_fake_memoryview#TestNrtMemInfo.test_fake_memoryviewy   s   Ga(t'a(2a(ww'(b))$**++Q'a(a(r(   c                   ^ RI HpHpHpHp \
        P                  ! \
        P                  4      pVP                  ^
,          p\        P                  ! VRR7      pVP                  pV! V! VP                  4      V! V^
,          4      4      p	\        ^
4       F&  p
V P                  V	P                  V
,          R4       K(  	  \        ^
4       F  p
V
^,           V	P                  V
&   K  	  \        V4      pV P                  VP                   V4       V P#                  VP$                  4       V P'                  W{P(                  4       V P+                  VP,                  4       V P                  VP                  ^4       V P                  VP.                  ^4       ?\
        P0                  ! W[P                   VP                  ,          VR7      p?\
        P2                  P5                  \
        P6                  ! VP8                  4      ^,           V4       V^,          p\        ^
4       F-  p
V P                  V	P                  V
,          V
^,           4       K/  	  V P                  VP                   P                  V4       ?R# r   )c_uint32c_void_pPOINTERcastTsafel   K )dtypeshapebufferN)ctypesry   rz   r{   r|   npr   uint32rr   r   r:   rk   rd   rZ   contentsrj   nbytesrl   rm   rn   ro   rp   rq   rs   ndarraytestingassert_equalarangesize)r#   ry   rz   r{   r|   r   bytesizer`   r_   c_arrirt   arrs   &            r$   test_memoryviewTestNrtMemInfo.test_memoryview   s   <<#>>B&  5wwXbgg&2(>?rAU^^A.
;  rA !AENN1 2x0(b))$**++Q'jjuLLENN,J %'


		#(( 3a 7=q rAU^^A.A6  	$/r(   c                   ^ RI HpHpHpHp \
        P                  ! \
        P                  4      pVP                  ^
,          p\        P                  ! VRR7      pV P                  VP                  ^4       VP                  pV! V! V4      V! V^
,          4      4      p	\        ^
4       F&  p
V P                  V	P                  V
,          R4       K(  	  \        ^
4       F  p
V
^,           V	P                  V
&   K  	  \
        P                   ! WVVP                  ,          VR7      pV P                  VP                  ^4       ?\
        P"                  P%                  \
        P&                  ! VP(                  4      ^,           V4       V^,          p\        ^
4       F-  p
V P                  V	P                  V
,          V
^,           4       K/  	  V P                  VP                   P                  V4       ?R# rx   )r   ry   rz   r{   r|   r   r   r   rr   r   r:   rZ   r[   rk   rd   r   r   r   r   r   r   )r#   ry   rz   r{   r|   r   r   r`   r_   r   r   r   s   &           r$   test_bufferTestNrtMemInfo.test_buffer   sg   <<#>>B&  5a(wwXd^WX]%;<rAU^^A.
;  rA !AENN1  jju,F "$a(


		#(( 3a 7=q rAU^^A.A6  	$/r(   c                Z   \         P                  P                  ^,          ^,          pR Fi  pV P                  \        4      ;_uu_ 4       p\
        P                  ! WR7       RRR4       V P                  RV R2\        XP                  4      4       Kk  	  R#   + '       g   i     L?; i)   r}   NzRequested allocation of z bytes failed.TF)
r   size_tmaxvalr<   MemoryErrorr   r:   r@   rA   rB   )r#   r   predrF   s   &   r$   test_allocate_invalid_size)TestNrtMemInfo.test_allocate_invalid_size   sz     ||""a'1,!D"";//6##D4 0MM4TF.If../1 "//s   BB*c                   RpR Fk  pV P                  \        4      ;_uu_ 4       p\        P                  ! WR7       RRR4       RV R2pV P	                  V\        XP                  4      4       Km  	  R#   + '       g   i     LA; i)
   r}   Nz,Cannot allocate a negative number of bytes: .ir   )r<   
ValueErrorr   r:   r@   rA   rB   )r#   r   r   rF   rH   s   &    r$   test_allocate_negative_size*TestNrtMemInfo.test_allocate_negative_size   sg     !D"":..&##D4 /@aHCMM#s6#3#345	 "..s   A66Br,   )r-   r.   r/   r0   rK   rT   ra   rg   ru   r   r   r   r   r   r1   r2   __classcell__rV   r4   s   @@r$   rN   rN   I   sH     ,)")&),$RH 1 16 6r(   rN   c                   0   a  ] tR t^t o RtR tR tRtV tR# )TestTracemallocz:
Test NRT-allocated memory can be tracked by tracemalloc.
c                0    ^ RI pXP                  4         VP	                  4       pV! 4       pVP	                  4       p?VP                  VR4      VP                  4        #   \         d    T P                  R4        Lyi ; i  TP                  4        i ; i)r   Nztracemalloc not availablelineno)tracemallocImportErrorskipTeststarttake_snapshot
compare_tostop)r#   funcr   beforeresafters   &&    r$   measure_memory_diff#TestTracemalloc.measure_memory_diff   s    	7 		 ..0F&C--/E##FH5  	7MM56	7 s   A! 9B !B ?B Bc                  aaa	 R o\         P                  o	\        VV	3R l4       oV3R lpV3R lpVP                  P                  ^,           pS! 4        V P                  V4      pV^ ,          pV P                  VP                  S4       V P                  VP                  SR,          RR7       VP                  ^ ,          pV P                  \        P                  P                  VP                  4      R4       V P                  VP                  V4       V P                  V4      pV^ ,          pV P                  VP                  SR,          4       R	# )
i@B c                 2   < \         P                  ! S S4      # )z$
Allocate and return a large array.
)r   empty)Nr   s   r$   alloc_nrt_memory7TestTracemalloc.test_snapshot.<locals>.alloc_nrt_memory
  s    
 88Au%%r(   c                     < S ! 4       # Nr,   r   s   r$   keep_memory2TestTracemalloc.test_snapshot.<locals>.keep_memory  s    #%%r(   c                     < S ! 4        R # r   r,   r   s   r$   release_memory5TestTracemalloc.test_snapshot.<locals>.release_memory  s	    r(   g=
ףp=?zpUnexpected allocation overhead encountered. May be due to difference in CPython builds or running under coverage)rH   ztest_nrt.pyg{Gz?N)r   int8r   __code__co_firstlinenor   assertGreaterEqualr   
assertLess	tracebackrZ   ospathbasenamefilenamer   )
r#   r   r   alloc_linenodiffstatframer   r   r   s
   &      @@@r$   test_snapshotTestTracemalloc.test_snapshot  s   		& 
	&	&	 #++::Q> 	 ''4Aw		1-		1u9@ 	 	B q!))%..9=I|4 ''7Aw		1t8,r(   r,   N)	r-   r.   r/   r0   rK   r   r   r1   r2   r3   s   @r$   r   r      s      (- (-r(   r   c                   \   a  ] tR tRt o R tR tR tR t]P                  R 4       t
RtV tR# )	TestNRTIssuei1  c                  aa \         R 4       o\         V3R l4       o\         V3R l4       p^
p\        P                  P                  V^34      pV! W#4      pVP                  W#4      p\        P                  P                  WT4       R# )z?
GitHub Issue #1244 https://github.com/numba/numba/issues/1244
c                 `    V w  r\         P                  ! V^,          V^,          ,           4      # )   )mathsqrt)vectorxys   &  r$   calculate_2D_vector_magNTestNRTIssue.test_issue_with_refct_op_pruning.<locals>.calculate_2D_vector_mag6  s$    DA99Q!Va1f_--r(   c                    < \         P                  ! ^\         P                  R7      pS! V 4      pV w  r4W2,          V^ &   WB,          V^&   V# r   r   )r   r   float64)r   normalized_vectormagr   r   r   s   &    r$   normalize_2D_vectorJTestNRTIssue.test_issue_with_refct_op_pruning.<locals>.normalize_2D_vector<  sI     ""** =)&1CDA#$7a #$7a $$r(   c                    < \         P                  ! V ^3\         P                  R7      p\        V 4       F-  pW,          pS! V4      pV^ ,          W#^ 3&   V^,          W#^3&   K/  	  V# r   )r   r   r   rd   )num_vectorsvectorsnormalized_vectorsr   r   r   r   s   &&    r$   normalize_vectorsHTestNRTIssue.test_issue_with_refct_op_pruning.<locals>.normalize_vectorsH  sj    !#;*:"**!M;' $7$?!+<Q+?"a4(+<Q+?"a4( ( &%r(   N)r   r   randompy_funcr   assert_almost_equal)r#   r   r   test_vectorsgotexpectedr   r   s   &     @@r$    test_issue_with_refct_op_pruning-TestNRTIssue.test_issue_with_refct_op_pruning2  s     
	. 
	.
 
		% 
		% 
	& 
	& yy''a(89:$,,[G


&&x5r(   c           
     j   R  p\        \        P                  ! \        P                  \        P                  ! \        P
                  ^R4      34      ! 4       4      ! V4      pV! 4       w  r4V P                  VR4       V P                  V\        P                  ! ^\        P
                  R7      4       R# )c                  R    R \         P                  ! ^\         P                  R7      3# )g        r   )r   zerosint32r,   r(   r$   f.TestNRTIssue.test_incref_after_cast.<locals>.f`  s    "((333r(   Cy                r   N)	r   r   Tuple
complex128Arrayr   assertPreciseEqualr   r   )r#   r   cfunczr   s   &    r$   test_incref_after_cast#TestNRTIssue.test_incref_after_cast]  s    	4
 ekk5#3#3#(;;u{{As#C#F G J KKLN2&RXXarxx%@Ar(   c                    \         R  4       pV! 4       w  r#\        P                  P                  W#4       \        P                  P                  V\        P                  ! ^
\        P
                  R7      4       R# )c                      \         P                  ! ^
\         P                  R7      p \         P                  ! ^
\         P                  R7      pWR,          3# )r   r   :NNN)r   onesr   )abs     r$   r   5TestNRTIssue.test_refct_pruning_issue_1511.<locals>.fl  s5    "**-A"**-Ad7Nr(   r   N)r   r   r   r   r  r   )r#   r   r	  r
  s   &   r$   test_refct_pruning_issue_1511*TestNRTIssue.test_refct_pruning_issue_1511k  sT    		 
	
 s


%


2772RZZ#@Ar(   c                    \         R  4       p\        P                  ! . RO.4      pVP                  V^^4      pV! V^^4      pV P	                  W44       R# )c                     \         P                  ! V ^8H  4      p\        V^ ,          4      ^ 8X  d   ^p^pM V^ ,          ^ ,          pV^,          ^ ,          pV^,
          V,           pV^,
          V,           pWg3# r   )r   wherelen)imager   r   next_locy_offsetx_offset
next_loc_x
next_loc_ys   &&&     r$   udt7TestNRTIssue.test_refct_pruning_issue_1526.<locals>.udtw  sn    xx
+H8A;1$#A;q>#A;q>a%8+Ja%8+J))r(   N)
r   r   r   r   r   r   r   r   r   r   )r   r   arrayr   rZ   )r#   r  r	  expectr   s   &    r$   test_refct_pruning_issue_1526*TestNRTIssue.test_refct_pruning_issue_1526v  sU    		* 
	* HH456Q1%!Ql%r(   c                &   ^ RI Hp V P                  \        P                  4       VR 4       pV P                  \        P                  4       V P                  V! 4       VP                  4       4       V P                  \        P                  4       R# )r   r   c                      ^{# ){   r,   r,   r(   r$   foo8TestNRTIssue.test_no_nrt_on_njit_decoration.<locals>.foo  s    r(   N)numbar   rl   r   r>   rZ   r   rp   )r#   r   r"  s   &  r$   test_no_nrt_on_njit_decoration+TestNRTIssue.test_no_nrt_on_njit_decoration  so     	 	% 
	 
	 	% 	. 	$r(   r,   N)r-   r.   r/   r0   r   r  r  r  r   run_test_in_subprocessr%  r1   r2   r3   s   @r$   r   r   1  s6     )6VB	B&. $$% %%r(   r   c                   t   a  ] tR tRt o RtR t]P                  ! R4      R 4       t]	]
R 4       4       tRtV tR# )	TestRefCtPruningi  a  
define i32 @"MyFunction"(i8** noalias nocapture %retptr, { i8*, i32 }** noalias nocapture %excinfo, i8* noalias nocapture readnone %env, double %arg.vt.0, double %arg.vt.1, double %arg.vt.2, double %arg.vt.3, double %arg.bounds.0, double %arg.bounds.1, double %arg.bounds.2, double %arg.bounds.3, i8* %arg.xs.0, i8* nocapture readnone %arg.xs.1, i64 %arg.xs.2, i64 %arg.xs.3, double* nocapture readonly %arg.xs.4, i64 %arg.xs.5.0, i64 %arg.xs.6.0, i8* %arg.ys.0, i8* nocapture readnone %arg.ys.1, i64 %arg.ys.2, i64 %arg.ys.3, double* nocapture readonly %arg.ys.4, i64 %arg.ys.5.0, i64 %arg.ys.6.0, i8* %arg.aggs_and_cols.0.0, i8* nocapture readnone %arg.aggs_and_cols.0.1, i64 %arg.aggs_and_cols.0.2, i64 %arg.aggs_and_cols.0.3, i32* nocapture %arg.aggs_and_cols.0.4, i64 %arg.aggs_and_cols.0.5.0, i64 %arg.aggs_and_cols.0.5.1, i64 %arg.aggs_and_cols.0.6.0, i64 %arg.aggs_and_cols.0.6.1) local_unnamed_addr {
entry:
tail call void @NRT_incref(i8* %arg.xs.0)
tail call void @NRT_incref(i8* %arg.ys.0)
tail call void @NRT_incref(i8* %arg.aggs_and_cols.0.0)
%.251 = icmp sgt i64 %arg.xs.5.0, 0
br i1 %.251, label %B42.preheader, label %B160

B42.preheader:                                    ; preds = %entry
%0 = add i64 %arg.xs.5.0, 1
br label %B42

B42:                                              ; preds = %B40.backedge, %B42.preheader
%lsr.iv3 = phi i64 [ %lsr.iv.next, %B40.backedge ], [ %0, %B42.preheader ]
%lsr.iv1 = phi double* [ %scevgep2, %B40.backedge ], [ %arg.xs.4, %B42.preheader ]
%lsr.iv = phi double* [ %scevgep, %B40.backedge ], [ %arg.ys.4, %B42.preheader ]
%.381 = load double, double* %lsr.iv1, align 8
%.420 = load double, double* %lsr.iv, align 8
%.458 = fcmp ole double %.381, %arg.bounds.1
%not..432 = fcmp oge double %.381, %arg.bounds.0
%"$phi82.1.1" = and i1 %.458, %not..432
br i1 %"$phi82.1.1", label %B84, label %B40.backedge

B84:                                              ; preds = %B42
%.513 = fcmp ole double %.420, %arg.bounds.3
%not..487 = fcmp oge double %.420, %arg.bounds.2
%"$phi106.1.1" = and i1 %.513, %not..487
br i1 %"$phi106.1.1", label %B108.endif.endif.endif, label %B40.backedge

B160:                                             ; preds = %B40.backedge, %entry
tail call void @NRT_decref(i8* %arg.ys.0)
tail call void @NRT_decref(i8* %arg.xs.0)
tail call void @NRT_decref(i8* %arg.aggs_and_cols.0.0)
store i8* null, i8** %retptr, align 8
ret i32 0

B108.endif.endif.endif:                           ; preds = %B84
%.575 = fmul double %.381, %arg.vt.0
%.583 = fadd double %.575, %arg.vt.1
%.590 = fptosi double %.583 to i64
%.630 = fmul double %.420, %arg.vt.2
%.638 = fadd double %.630, %arg.vt.3
%.645 = fptosi double %.638 to i64
tail call void @NRT_incref(i8* %arg.aggs_and_cols.0.0)              ; GONE 1
tail call void @NRT_decref(i8* null)                                ; GONE 2
tail call void @NRT_incref(i8* %arg.aggs_and_cols.0.0), !noalias !0 ; GONE 3
%.62.i.i = icmp slt i64 %.645, 0
%.63.i.i = select i1 %.62.i.i, i64 %arg.aggs_and_cols.0.5.0, i64 0
%.64.i.i = add i64 %.63.i.i, %.645
%.65.i.i = icmp slt i64 %.590, 0
%.66.i.i = select i1 %.65.i.i, i64 %arg.aggs_and_cols.0.5.1, i64 0
%.67.i.i = add i64 %.66.i.i, %.590
%.84.i.i = mul i64 %.64.i.i, %arg.aggs_and_cols.0.5.1
%.87.i.i = add i64 %.67.i.i, %.84.i.i
%.88.i.i = getelementptr i32, i32* %arg.aggs_and_cols.0.4, i64 %.87.i.i
%.89.i.i = load i32, i32* %.88.i.i, align 4, !noalias !3
%.99.i.i = add i32 %.89.i.i, 1
store i32 %.99.i.i, i32* %.88.i.i, align 4, !noalias !3
tail call void @NRT_decref(i8* %arg.aggs_and_cols.0.0), !noalias !0 ; GONE 4
tail call void @NRT_decref(i8* %arg.aggs_and_cols.0.0)              ; GONE 5
br label %B40.backedge

B40.backedge:                                     ; preds = %B108.endif.endif.endif, %B84, %B42
%scevgep = getelementptr double, double* %lsr.iv, i64 1
%scevgep2 = getelementptr double, double* %lsr.iv1, i64 1
%lsr.iv.next = add i64 %lsr.iv3, -1
%.294 = icmp sgt i64 %lsr.iv.next, 1
br i1 %.294, label %B42, label %B160
}
    c                   V P                   p\        VP                  4       4      pV Uu. uF  pR V9   g   K  VNK  	  ppV Uu. uF  pRV9   g   K  VNK  	  pp\        P                  ! V4      p\        VP                  4       4      pV Uu. uF  pR V9   g   K  VNK  	  ppV Uu. uF  pRV9   g   K  VNK  	  p	pV P                  WH4       V P                  WY4       \        V4      \        V4      ,
          p
\        V4      \        V	4      ,
          pW,          pV P                  WV,          4       RP                  V4      pR F%  pRP                  V4      pV P                  W4       K'  	  V P                  \        \        VP                  4       4      4      \        V4      4       R# u upi u upi u upi u upi )
NRT_incref
NRT_decref
z	; GONE {}N)r   r            )sample_llvm_irlist
splitlinesr   _remove_redundant_nrt_refctassertNotEqualsetrZ   joinformatr@   r  )r#   input_irinput_lineslnbefore_increfsbefore_decrefs	output_iroutput_linesafter_increfsafter_decrefspruned_increfspruned_decrefscombinedpruned_linesr   gones   &               r$   test_refct_pruning_op_recognize0TestRefCtPruning.test_refct_pruning_op_recognize  s   &&8..01'2I{lb6H""{I'2I{lb6H""{I 66x@	I0023&2Illb6HlI&2Illb6HlI 	N:N:^,s=/AA^,s=/AA "2N#BCyy* !A%%a(DMM$- ! 	T,"9"9";<=s8}M5 JI
 JIs.   	F.F.	F3F3	F8F8'	F=5F=z3Pass removed as it was buggy. Re-enable when fixed.c                t  aaa \         R 4       o\         R 4       o\         VV3R l4       o\        RR7      V3R l4       pVP                  R4       \        VP                  VP                  ^ ,          4      4      p\        \        P                  ! RV4      4      pV P                  \        V4      ^ 4       R	# )
ztestcase from #2350c                 n    \         P                  ! V4      '       g   W!V 3;;,          ^,          uu&   R# R# r   r   isnanr   r   aggfields   &&&&r$   _append_non_naITestRefCtPruning.test_refct_pruning_with_branches.<locals>._append_non_na  s#    88E??qD	Q	 #r(   c                     \         P                  ! V4      '       gD   \         P                  ! W!V 3,          4      '       d   W2W3&   R # W!V 3;;,          V,          uu&   R # R # r   rK  rM  s   &&&&r$   _appendBTestRefCtPruning.test_refct_pruning_with_branches.<locals>._append  sB    88E??88C1I&& %I1I&I	 #r(   c                 ,   < S! WW#4       S! WW#4       R # r   r,   )r   r   rN  rO  rS  rP  s   &&&&r$   appendATestRefCtPruning.test_refct_pruning_with_branches.<locals>.append  s    1,A#%r(   T)no_cpython_wrapperc                    < \        V P                  ^ ,          4       F/  p\        V P                  ^,          4       F  pS! W2W4       K  	  K1  	  R# rP   )rd   r   )r   rO  r   jrV  s   &&  r$   extendATestRefCtPruning.test_refct_pruning_with_branches.<locals>.extend&  s;    399Q<(syy|,A1, - )r(   z(f4[:,::1], f4)z!(NRT_incref|NRT_decref)\([^\)]+\)N)
r   compilerA   inspect_llvm
signaturesr2  refinditerrZ   r  )r#   r[  llvmirrefopsrS  rP  rV  s   &   @@@r$    test_refct_pruning_with_branches1TestRefCtPruning.test_refct_pruning_with_branches  s     
	 
	 
	' 
	' 
	& 
	& 
	&	- 
'	- 	() V(():):1)=>?bkk"FOPVa(r(   c                   a \         P                  ! 4        \         P                  ! 4        \         P                  ! 4        \        R 4       o\        R.4      V3R l4       pV P                  V! ^
4      ^4       R# )zlThe InlineAsm class from llvmlite.ir has no 'name' attr the refcount
pruning pass should be tolerant to thisc                 z    R  p\        \        P                  \        P                  \        P                  4      V3# )c           	         Vw  rE\         P                  ! \         P                  ! ^ 4      \         P                  ! ^ 4      \         P                  ! ^ 4      .4      pVP                  VRRWE3RRR7      p\	        WVP
                  V4      # )    zmov $2, $0; imul $1, $0z=&r,r,rasm_mulF)nameside_effect)r   FunctionTypeIntTypeasmr   return_type)cgctxbuildersigrE   arg_0arg_1ftymuls   &&&&    r$   codegen>TestRefCtPruning.test_inline_asm.<locals>.bar.<locals>.codegen?  sv    !%oobjjnrzz"~79zz"~7G Hkk#'@)#(.y.3 " 5 *%#//3OOr(   )r   r   r   )tyctxr   r   rx  s   &&& r$   bar-TestRefCtPruning.test_inline_asm.<locals>.bar=  s*    P U[[%++u{{CWLLr(   zint32(int32)c                 ,   < V ^,          p S! V ^4      pV# r  r,   )r   r  r{  s   & r$   r"  -TestRefCtPruning.test_inline_asm.<locals>.fooI  s    FAAq	AHr(   N)llvminitialize_native_targetinitialize_native_asmprinterinitialize_native_asmparserr
   r   rZ   )r#   r"  r{  s   & @r$   test_inline_asm TestRefCtPruning.test_inline_asm4  so    
 	%%'))+((*			M 
		M 
~		 
 	
 	R"%r(   r,   N)r-   r.   r/   r0   r1  rG  unittestskiprd  
linux_onlyx86_onlyr  r1   r2   r3   s   @r$   r)  r)    sP     FNPN> ]]HI") J")H &  &r(   r)  c                   T   a a ] tR tRt oRtV 3R ltR tR tR tR t	R t
R	tVtV ;t# )
TestNrtExternalCFFIiR  z?Testing the use of externally compiled C code that use NRT
    c                L   < \         P                   \        \        V `  4        R # r   )r   rR   rS   r  rT   rU   s   &r$   rT   TestNrtExternalCFFI.setUpV  s    !!!4.0r(   c                   ^ RI Hp V! 4       pVP                  W\        4       .R7       VP	                  V4       \        RP                  V4      4      pVP                  VR7       \        P                  P                  V4        \        V4      p\        P                  P                  V4       WW3#   \        P                  P                  T4       i ; i)r   FFI)include_dirszcffi_test_{})tmpdir)cffir  
set_sourcer   cdefr   r8  r]  sysr   rV  r   remove)r#   rk  sourcer  r  ffir  mods   &&&&    r$   compile_cffi_module'TestNrtExternalCFFI.compile_cffi_module[  s    et<>2BC 5 5d ;<6"	$ &CHHOOF#x HHOOF#s   B4 4!Cc                |    ^ RI Hp V! 4       pVP                  R\        P                  R,          4      pV! 4       pV# )r   r  zvoid* (*)()get_api)r  r  r|   r   	c_helpers)r#   r  r  nrt_get_apitables   &    r$   get_nrt_api_table%TestNrtExternalCFFI.get_nrt_api_tablek  s3    ehh}k.C.CI.NOr(   c                V   R P                  V P                  P                  4      pRpRpV P                  WV4      w  rEV P	                  VP
                  P                  ^ 4       V P                  4       pVP
                  P                  V4      pV P	                  VP
                  P                  R4       \        VP                  RV4      4      p\        P                  ! V4      p	V P	                  V	P                  ^4       ?	V P	                  VP
                  P                  R4       R# )z{}_test_manage_memoryaz  
#include <stdio.h>
#include "numba/core/runtime/nrt_external.h"

int status = 0;

void my_dtor(void *ptr) {
    free(ptr);
    status = 0xdead;
}

NRT_MemInfo* test_nrt_api(NRT_api_functions *nrt) {
    void * data = malloc(10);
    NRT_MemInfo *mi = nrt->manage_memory(data, my_dtor);
    nrt->acquire(mi);
    nrt->release(mi);
    status = 0xa110c;
    return mi;
}
        z;
void* test_nrt_api(void *nrt);
extern int status;
        i
 r   i  N)r8  rV   r-   r  rZ   libstatusr  test_nrt_apiintr|   r	   MemInfor[   )
r#   rk  r  r  r  r  r  outmi_addrr`   s
   &         r$   test_manage_memory&TestNrtExternalCFFI.test_manage_memorys  s    &--dnn.E.EF(
 ++D$?+&&(gg""5)1chhx-.[[!a(0r(   c                   R P                  V P                  P                  4      pRpRpV P                  WV4      w  rEV P	                  4       p^\
        P                  ! \
        P                  4      P                  ,          pVP                  P                  Wg4      p\        VP                  RV4      4      p	\        P                  ! V	4      p
V P                  V
P                   ^4       VP#                  VP                  RP                  V4      V
P$                  4      4      p\
        P&                  ! R\
        P                  VR7      p\
        P(                  P+                  V. RO4       R# )	z{}_test_allocatea7  
#include <stdio.h>
#include "numba/core/runtime/nrt_external.h"

NRT_MemInfo* test_nrt_api(NRT_api_functions *nrt, size_t n) {
    size_t *data = NULL;
    NRT_MemInfo *mi = nrt->allocate(n);
    data = nrt->get_data(mi);
    data[0] = 0xded;
    data[1] = 0xabc;
    data[2] = 0xdef;
    return mi;
}
        z(void* test_nrt_api(void *nrt, size_t n);r   z	char [{}])r   r   r   Nr.  )i  i
  i  )r8  rV   r-   r  r  r   r   intprr   r  r  r  r|   r	   r  rZ   r[   r   rk   r   r   r   )r#   rk  r  r  r  r  r  numbytesr  r  r`   r   r   s   &            r$   test_allocate!TestNrtExternalCFFI.test_allocate  s   !(()@)@A :++D$?&&(rxx(111gg""53chhx-.[[!a(CHH[%7%7%A277KLjjt2776B


%:;r(   c                    ^ RI Hp \        R 4       pV! 4       p\        VP	                  RV P                  4       4      4      pV! 4       pV P                  WE4       R# )r   r  c                      \        4       # r   r   r,   r(   r$   r  6TestNrtExternalCFFI.test_get_api.<locals>.test_nrt_api  s
    = r(   r   N)r  r  r   r  r|   r  rZ   )r#   r  r  r  r  r   s   &     r$   test_get_api TestNrtExternalCFFI.test_get_api  sS    		! 
	! eSXXh(>(>(@ABn%r(   r,   )r-   r.   r/   r0   rK   rT   r  r  r  r  r  r1   r2   r   r   s   @@r$   r  r  R  s/     1
 '1R<@
& 
&r(   r  c                   V   a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tRtV tR# )TestNrtStatisticsi  c                :    \         P                  ! 4       V n        R # r   )r   memsys_stats_enabled_TestNrtStatistics__stats_stater"   s   &r$   rT   TestNrtStatistics.setUp  s    (==?r(   c                    V P                   '       d   \        P                  ! 4        R # \        P                  ! 4        R # r   )r  r   memsys_enable_statsmemsys_disable_statsr"   s   &r$   tearDownTestNrtStatistics.tearDown  s&    ++-,,.r(   c                h    R p\         P                  P                  4       pRVR&   \        WR7       R# )a  if 1:
        from numba import njit
        import numpy as np
        from numba.core.runtime import rtsys, _nrt_python
        from numba.core.registry import cpu_target

        @njit
        def foo():
            return np.arange(10)[0]

        # initialize the NRT before use
        rtsys.initialize(cpu_target.target_context)
        assert _nrt_python.memsys_stats_enabled()
        orig_stats = rtsys.get_allocation_stats()
        foo()
        new_stats = rtsys.get_allocation_stats()
        total_alloc = new_stats.alloc - orig_stats.alloc
        total_free = new_stats.free - orig_stats.free
        total_mi_alloc = new_stats.mi_alloc - orig_stats.mi_alloc
        total_mi_free = new_stats.mi_free - orig_stats.mi_free

        expected = 1
        assert total_alloc == expected
        assert total_free == expected
        assert total_mi_alloc == expected
        assert total_mi_free == expected
        1NUMBA_NRT_STATSenvN)r   environcopyr   )r#   srcr  s   &  r$   test_stats_env_var_explicit_on0TestNrtStatistics.test_stats_env_var_explicit_on  s.    8 jjoo!$#'r(   c                "    R p\        W!R7       R# )a  if 1:
        from numba import njit
        import numpy as np
        from numba.core.runtime import rtsys, _nrt_python

        @njit
        def foo():
            return np.arange(10)[0]

        assert _nrt_python.memsys_stats_enabled() == False
        try:
            rtsys.get_allocation_stats()
        except RuntimeError as e:
            assert "NRT stats are disabled." in str(e)
        r  N)r   )r#   r  r  s   && r$   check_env_var_off#TestNrtStatistics.check_env_var_off  s     	#'r(   c                n    \         P                  P                  4       pR VR&   V P                  V4       R# )0r  N)r   r  r  r  r#   r  s   & r$   test_stats_env_var_explicit_off1TestNrtStatistics.test_stats_env_var_explicit_off  s+    jjoo!$s#r(   c                    \         P                  P                  4       pVP                  R R4       V P	                  V4       R# )r  N)r   r  r  popr  r  s   & r$   test_stats_env_var_default_off0TestNrtStatistics.test_stats_env_var_default_off  s1     jjoo!4(s#r(   c                v   \         R  4       p\        P                  ! 4        V P                  \        P                  ! 4       4       \        ^4       F  p\        P                  ! 4       p\        P                  ! 4        V P                  \        P                  ! 4       4       V! 4        \        P                  ! 4        V P                  \        P                  ! 4       4       \        P                  ! 4       pV! 4        \        P                  ! 4       pV P                  W44       V P                  WE4       K  	  R# )c                  v    \         P                  ! ^4      p \         P                  ! ^V ^ ,          ,          4      # r  )r   r  r   )tmps    r$   r"  7TestNrtStatistics.test_stats_status_toggle.<locals>.foo  s&    ''!*C99QQZ((r(   N)r   r   r  rp   r  rd   r   get_allocation_statsr  rl   rZ   r   )r#   r"  r   stats_1stats_2stats_3s   &     r$   test_stats_status_toggle*TestNrtStatistics.test_stats_status_toggle  s    		) 
	)
 	'')88:;qA002G,,.[==?@E++-OOK<<>?002GE002GW.OOG-- r(   c                ^   \         P                  ! 4        V P                  \         P                  ! 4       4       V P	                  \
        4      ;_uu_ 4       p\        P                  ! 4        R R R 4       V P                  R\        XP                  4      4       R #   + '       g   i     L7; i)NNRT stats are disabled.)r   r  rl   r  r<   r=   r   r  r@   rA   rB   )r#   rF   s   & r$   5test_rtsys_stats_query_raises_exception_when_disabledGTestNrtStatistics.test_rtsys_stats_query_raises_exception_when_disabled<  sp     	((*99;<|,,&&( - 	/V5E5E1FG -,s   BB,	c           
        RpV F  p\        \        RV 24      pV P                  VR7      ;_uu_ 4        \        P                  ! 4        V P	                  \        P
                  ! 4       4       V P                  \        4      ;_uu_ 4       pV! 4        RRR4       V P                  R\        XP                  4      4       RRR4       K  	  R#   + '       g   i     LC; i  + '       g   i     K  ; i)allocmemsys_get_stats_)
stats_funcNr  )r  freemi_allocmi_free)r?   r   subTestr  rl   r  r<   r=   r@   rA   rB   )r#   method_variationsrD   r  rF   s   &    r$   <test_nrt_explicit_stats_query_raises_exception_when_disabledNTestNrtStatistics.test_nrt_explicit_stats_query_raises_exception_when_disabledH  s     E%D 0A$.HIJ44002  !A!A!CD&&|44L 57V=M=M9NO 54 & 54	 544s$   AC"C-C"CC""C3)__stats_stateN)r-   r.   r/   r0   rT   r  r  r  r  r  r  r  r  r1   r2   r3   s   @r$   r  r    s=     @/ (D(&$$".H
HP Pr(   r  __main__)i386x86_64)9r   r   platformr  r`  numpyr   r$  r   
numba.corer   numba.core.runtimer   r   r   r	   numba.core.extendingr
   r   numba.core.typingr   numba.core.imputilsr   llvmliter   llvmlite.bindingbindingr  numba.core.unsafe.nrtr   numba.tests.supportr   r   r   r   r   r   r   numba.core.registryr   r  skipIf
startswithr  machiner  objectr   r6   rN   r   r   r)  r  r  r-   mainr,   r(   r$   <module>r     sS    	  
 	     9 ' 2   -F F F +  __!8!8!AA.0
??8++-5GG*,F #8#4#4 #4e6X&& e6P=-h'' =-@r%8 r%ji&x(( i&X s&-x s& s&lKP KP\ zMMO r(   