Ë
    èÿæiAt  ã                   óÄ  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZ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 d dlmZ d d	lmZ d d
lmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d dl(Z( e(jR                  ej                  jU                  d«       d«      Z+ e(jR                   ejX                  «       dvd«      Z- G d„ de.«      Z/ G d„ de(j@                  «      Z0 G d„ de(j@                  «      Z1 G d„ de(j@                  «      Z2 G d„ de «      Z3 G d„ de(j@                  «      Z4e$ G d„ dee «      «       Z5 G d„ de «      Z6e7d k(  r e(jp                  «        yy)!é    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 test)Úi386Úx86_64zx86 only testc                   ó   — e Zd ZdZd„ Zd„ Zy)ÚDummyr   c                 ó@   — t        | «      xj                  dz  c_        y ©Né   ©ÚtypeÚalive©Úselfs    úi/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_nrt.pyÚ__init__zDummy.__init__(   ó   € ÜˆT‹
×Ò˜AÑÖó    c                 ó@   — t        | «      xj                  dz  c_        y r   r!   r$   s    r&   Ú__del__zDummy.__del__+   r(   r)   N)Ú__name__Ú
__module__Ú__qualname__r#   r'   r+   © r)   r&   r   r   %   s   „ Ø€Eòór)   r   c                   ó   — e Zd ZdZdZd„ Zy)ÚTestNrtMemInfoNotInitializedzn
    Unit test for checking the use of the NRT fails if the
    initialization sequence has not been run.
    Fc                 óZ  — ddddœ}|j                  «       D ]v  \  }}	 | j                  t        «      5 }dt        _        t        t        |«      } ||Ž  d d d «       d}| j                  |t        j                  «      «       dt        _        Œx y # 1 sw Y   Œ>xY w# dt        _        w xY w)Nr/   )r/   r/   )r/   )ÚlibraryÚmeminfo_newÚmeminfo_allocFz'Runtime must be initialized before use.T)	ÚitemsÚassertRaisesÚRuntimeErrorr   Ú_initÚgetattrÚassertInÚstrÚ	exception)r%   ÚmethodsÚmethÚargsÚraisesÚfnÚmsgs          r&   Útest_init_failz+TestNrtMemInfoNotInitialized.test_init_fail6   s•   € Ø Ø"*Ø$)ñˆð
 "Ÿ-™-ž/‰JˆD�$ð	#Ø×&Ñ&¤|Ô4¸Ø"'”E”KÜ ¤¨Ó-�BÙ˜‘I÷ 5ð
 @�Ø—‘˜c¤3 v×'7Ñ'7Ó#8Ô9à"”•ñ *ç4Ð4ûð #”•ús"   žB³!BÁ/BÂB	ÂBÂB*N)r,   r-   r.   Ú__doc__Ú_numba_parallel_test_rD   r/   r)   r&   r1   r1   /   s   „ ñð "Ðó#r)   r1   c                   óV   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
d„ «       Zd	„ Zˆ xZS )
ÚTestNrtMemInfoz2
    Unit test for core MemInfo functionality
    c                 ó†   •— dt         _        t        j                  t        j
                  «       t        t        | �#  «        y )Nr   )	r   r#   r   Ú
initializer   Útarget_contextÚsuperrH   ÚsetUp©r%   Ú	__class__s    €r&   rM   zTestNrtMemInfo.setUpN   s+   ø€ àŒŒä×Ñœ×2Ñ2Ô3ÜŒn˜dÑ)Õ+r)   c                 ó4  — t        «       }| j                  t         j                  d«       d}t        j                  ||«      }| j                  |j
                  d«       ~| j                  t         j                  d«       |j                  «        | j                  |j
                  d«       | j                  t         j                  d«       |j                  «        | j                  |j
                  d«       ~| j                  t         j                  d«       y )Nr    ì   þJ[= é   r   )r   ÚassertEqualr#   r   r4   ÚrefcountÚacquireÚrelease)r%   ÚdÚaddrÚmis       r&   Útest_meminfo_refct_1z#TestNrtMemInfo.test_meminfo_refct_1U   sÄ   € Ü‹GˆØ×ÑœŸ™ aÔ(Øˆä×Ñ˜t QÓ'ˆØ×Ñ˜Ÿ™ aÔ(ØØ×ÑœŸ™ aÔ(Ø
�
‰
ŒØ×Ñ˜Ÿ™ aÔ(Ø×ÑœŸ™ aÔ(Ø
�
‰
ŒØ×Ñ˜Ÿ™ aÔ(ØØ×ÑœŸ™ aÕ(r)   c                 ót  — t        «       }| j                  t         j                  d«       d}t        j                  ||«      }| j                  |j
                  d«       ~| j                  t         j                  d«       t        d«      D ]  }|j                  «        Œ | j                  |j
                  d«       | j                  t         j                  d«       t        d«      D ]  }|j                  «        Œ | j                  |j
                  d«       ~| j                  t         j                  d«       y )Nr    rQ   éd   ée   r   )	r   rS   r#   r   r4   rT   ÚrangerU   rV   )r%   rW   rX   rY   ÚctÚ_s         r&   Útest_meminfo_refct_2z#TestNrtMemInfo.test_meminfo_refct_2f   sà   € Ü‹GˆØ×ÑœŸ™ aÔ(Øˆä×Ñ˜t QÓ'ˆØ×Ñ˜Ÿ™ aÔ(ØØ×ÑœŸ™ aÔ(Ü˜–*ˆBØ�J‰J�Lð à×Ñ˜Ÿ™ gÔ.Ø×ÑœŸ™ aÔ(Ü�s–ˆAØ�J‰J�Lð à×Ñ˜Ÿ™ aÔ(ØØ×ÑœŸ™ aÕ(r)   c                 óà  — t        «       }| j                  t         j                  d«       d}t        j                  ||«      }| j                  |j
                  d«       t        |«      }| j                  |j
                  d«       | j                  ||j                  «       | j                  |j                  «       | j                  ||j                  «       | j                  |j                  «       | j                  |j                  d«       | j                  |j                  d«       ~~| j                  t         j                  d«       ~| j                  t         j                  d«       y )Nr    rQ   r   )r   rS   r#   r   r4   rT   Ú
memoryviewÚdataÚassertFalseÚreadonlyÚassertIsÚobjÚ
assertTrueÚc_contiguousÚitemsizeÚndim)r%   rW   rX   rY   Úmviews        r&   Útest_fake_memoryviewz#TestNrtMemInfo.test_fake_memoryviewy   s  € Ü‹GˆØ×ÑœŸ™ aÔ(Øˆä×Ñ˜t QÓ'ˆØ×Ñ˜Ÿ™ aÔ(Ü˜2“ˆØ×Ñ˜Ÿ™ aÔ(Ø×Ñ˜˜rŸw™wÔ'Ø×Ñ˜Ÿ™Ô(Ø�‰�b˜%Ÿ)™)Ô$Ø�‰˜×*Ñ*Ô+Ø×Ñ˜Ÿ™¨Ô+Ø×Ñ˜Ÿ™ QÔ'ØØà×ÑœŸ™ aÔ(ØØ×ÑœŸ™ aÕ(r)   c                 ó¬  — ddl m}m}m}m} t        j                  t
        j                  «      }|j                  dz  }t        j                  |d¬«      }|j                  } | ||j                  «       ||dz  «      «      }	t        d«      D ]!  }
| j                  |	j                  |
   d«       Œ# t        d«      D ]  }
|
dz   |	j                  |
<   Œ t        |«      }| j                  |j                   |«       | j#                  |j$                  «       | j'                  ||j(                  «       | j+                  |j,                  «       | j                  |j                  d«       | j                  |j.                  d«       ~t        j0                  ||j                   |j                  z  |¬«      }~t
        j2                  j5                  t        j6                  |j8                  «      dz   |«       |dz  }t        d«      D ]$  }
| j                  |	j                  |
   |
d	z   «       Œ& | j                  |j                   j                  |«       ~y )
Nr   ©Úc_uint32Úc_void_pÚPOINTERÚcasté
   T©Úsafeì   ËK— r    ©ÚdtypeÚshapeÚbufferrR   )Úctypesrq   rr   rs   rt   Únprz   Úuint32rk   r   r5   rd   r^   rS   Úcontentsrc   Únbytesre   rf   rg   rh   ri   rj   rl   ÚndarrayÚtestingÚassert_equalÚarangeÚsize)r%   rq   rr   rs   rt   rz   ÚbytesizerY   rX   Úc_arrÚirm   Úarrs                r&   Útest_memoryviewzTestNrtMemInfo.test_memoryview�   sÆ  € ß<Ó<ä—‘œŸ™Ó#ˆØ—>‘> BÑ&ˆÜ× Ñ  °Ô5ˆØ�w‰wˆÙ‘X˜bŸg™gÓ&©°¸2±Ó(>Ó?ˆä�r–ˆAØ×Ñ˜UŸ^™^¨AÑ.°
Õ;ð ô �r–ˆAØ ! A¡ˆE�N‰N˜1Òð ä˜2“ˆØ×Ñ˜Ÿ™ xÔ0Ø×Ñ˜Ÿ™Ô(Ø�‰�b˜%Ÿ)™)Ô$Ø�‰˜×*Ñ*Ô+Ø×Ñ˜Ÿ™¨Ô+Ø×Ñ˜Ÿ™ QÔ'ØÜ�j‰j˜u¨E¯L©L¸E¿N¹NÑ,JØ %ô'ˆàä
�
‰
×Ñ¤§	¡	¨#¯(©(Ó 3°aÑ 7¸Ô=àˆq‰ˆô �r–ˆAØ×Ñ˜UŸ^™^¨AÑ.°°A±Õ6ð ð 	×Ñ˜Ÿ™Ÿ™¨$Ô/Ùr)   c                 ó�  — ddl m}m}m}m} t        j                  t
        j                  «      }|j                  dz  }t        j                  |d¬«      }| j                  |j                  d«       |j                  } | ||«       ||dz  «      «      }	t        d«      D ]!  }
| j                  |	j                  |
   d«       Œ# t        d«      D ]  }
|
dz   |	j                  |
<   Œ t        j                   |||j                  z  |¬«      }| j                  |j                  d«       ~t
        j"                  j%                  t        j&                  |j(                  «      dz   |«       |dz  }t        d«      D ]$  }
| j                  |	j                  |
   |
d	z   «       Œ& | j                  |j                   j                  |«       ~y )
Nr   rp   ru   Trv   r    rx   ry   rR   )r}   rq   rr   rs   rt   r~   rz   r   rk   r   r5   rS   rT   rd   r^   r€   r‚   rƒ   r„   r…   r†   )r%   rq   rr   rs   rt   rz   r‡   rY   rX   rˆ   r‰   rŠ   s               r&   Útest_bufferzTestNrtMemInfo.test_buffer¸   si  € ß<Ó<ä—‘œŸ™Ó#ˆØ—>‘> BÑ&ˆÜ× Ñ  °Ô5ˆØ×Ñ˜Ÿ™ aÔ(Ø�w‰wˆÙ‘X˜d“^¡W¨X¸©]Ó%;Ó<ˆä�r–ˆAØ×Ñ˜UŸ^™^¨AÑ.°
Õ;ð ô �r–ˆAØ ! A¡ˆE�N‰N˜1Òð ô �j‰j˜u¨H¸¿¹Ñ,FØ "ô$ˆà×Ñ˜Ÿ™ aÔ(Øä
�
‰
×Ñ¤§	¡	¨#¯(©(Ó 3°aÑ 7¸Ô=àˆq‰ˆô �r–ˆAØ×Ñ˜UŸ^™^¨AÑ.°°A±Õ6ð ð 	×Ñ˜Ÿ™Ÿ™¨$Ô/Ùr)   c                 ó&  — t         j                  j                  dz  dz  }dD ]`  }| j                  t        «      5 }t        j                  ||¬«       d d d «       | j                  d|› d�t        j                  «      «       Œb y # 1 sw Y   Œ5xY w)Né   rR   ©TFrv   zRequested allocation of z bytes failed.)
r   Úsize_tÚmaxvalr7   ÚMemoryErrorr   r5   r;   r<   r=   )r%   r†   ÚpredrA   s       r&   Útest_allocate_invalid_sizez)TestNrtMemInfo.test_allocate_invalid_sizeÜ   sy   € ô �|‰|×"Ñ" aÑ'¨1Ñ,ˆÛ!ˆDØ×"Ñ"¤;Ô/°6Ü×#Ñ# D¨tÕ4÷ 0à�M‰MÐ4°T°F¸.ÐIÜ˜f×.Ñ.Ó/õ1ñ "ß/Ð/ús   »BÂB	c                 óî   — d}dD ]b  }| j                  t        «      5 }t        j                  ||¬«       d d d «       d|› d�}| j	                  |t        j                  «      «       Œd y # 1 sw Y   Œ7xY w)Niöÿÿÿr�   rv   z,Cannot allocate a negative number of bytes: Ú.)r7   Ú
ValueErrorr   r5   r;   r<   r=   )r%   r†   r”   rA   rC   s        r&   Útest_allocate_negative_sizez*TestNrtMemInfo.test_allocate_negative_sizeæ   sf   € ð ˆÛ!ˆDØ×"Ñ"¤:Ô.°&Ü×#Ñ# D¨tÕ4÷ /à@ÀÀÀaÐHˆCØ�M‰M˜#œs 6×#3Ñ#3Ó4Õ5ñ	 "ß.Ð.ús   �A+Á+A4	)r,   r-   r.   rE   rM   rZ   ra   rn   r‹   r�   r   r•   r™   Ú__classcell__©rO   s   @r&   rH   rH   I   sA   ø„ ñô,ò)ò")ò&)ò,$òRðH ñ1ó ð1ö6r)   rH   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚTestTracemalloczB
    Test NRT-allocated memory can be tracked by tracemalloc.
    c                 ó,  — 	 dd l }j                  «        	 |j	                  «       } |«       }|j	                  «       }~|j                  |d«      |j                  «        S # t        $ r | j                  d«       Y Œww xY w# |j                  «        w xY w)Nr   ztracemalloc not availableÚlineno)ÚtracemallocÚImportErrorÚskipTestÚstartÚtake_snapshotÚ
compare_toÚstop)r%   Úfuncr    ÚbeforeÚresÚafters         r&   Úmeasure_memory_diffz#TestTracemalloc.measure_memory_diffö   sŒ   € ð	7Ûð 	×ÑÔð	Ø ×.Ñ.Ó0ˆFá“&ˆCØ×-Ñ-Ó/ˆEØØ×#Ñ# F¨HÓ5à×ÑÕøô ò 	7Ø�M‰MÐ5Ö6ð	7ûð ×ÑÕús   ‚A! —9B Á!A>Á=A>ÂBc                 óx  ‡‡‡	— dŠt         j                  Š	t        ˆˆ	fd„«       Šˆfd„}ˆfd„}|j                  j                  dz   } ‰«        | j                  |«      }|d   }| j                  |j                  ‰«       | j                  |j                  ‰dz  d¬	«       |j                  d   }| j                  t        j                  j                  |j                  «      d
«       | j                  |j                  |«       | j                  |«      }|d   }| j                  |j                  ‰dz  «       y )Ni@B c                  ó0   •— t        j                  ‰ ‰«      S )z<
            Allocate and return a large array.
            )r~   Úempty)ÚNrz   s   €€r&   Úalloc_nrt_memoryz7TestTracemalloc.test_snapshot.<locals>.alloc_nrt_memory
  s   ø€ ô
 —8‘8˜A˜uÓ%Ð%r)   c                  ó   •—  ‰ «       S ©Nr/   ©r°   s   €r&   Úkeep_memoryz2TestTracemalloc.test_snapshot.<locals>.keep_memory  s   ø€ Ù#Ó%Ð%r)   c                  ó   •—  ‰ «        y r²   r/   r³   s   €r&   Úrelease_memoryz5TestTracemalloc.test_snapshot.<locals>.release_memory  s	   ø€ ÙÕr)   r    r   g=
×£p=ð?zpUnexpected allocation overhead encountered. May be due to difference in CPython builds or running under coverage)rC   ztest_nrt.pyg{®Gáz„?)r~   Úint8r   Ú__code__Úco_firstlinenor«   ÚassertGreaterEqualr†   Ú
assertLessÚ	tracebackrS   ÚosÚpathÚbasenameÚfilenamerŸ   )
r%   r´   r¶   Úalloc_linenoÚdiffÚstatÚframer¯   r°   rz   s
          @@@r&   Útest_snapshotzTestTracemalloc.test_snapshot  s  ú€ ØˆÜ—‘ˆä	ô	&ó 
ð	&ô	&ô	ð #×+Ñ+×:Ñ:¸QÑ>ˆñ 	Ôð ×'Ñ'¨Ó4ˆØ�A‰wˆà×Ñ §	¡	¨1Ô-Ø�‰˜Ÿ	™	 1 u¡9ð@ð 	ô 	Bð —‘˜qÑ!ˆØ×ÑœŸ™×)Ñ)¨%¯.©.Ó9¸=ÔIØ×Ñ˜Ÿ™ |Ô4ð ×'Ñ'¨Ó7ˆØ�A‰wˆà�‰˜Ÿ	™	 1 t¡8Õ,r)   N)r,   r-   r.   rE   r«   rÅ   r/   r)   r&   r�   r�   ñ   s   „ ñòó (-r)   r�   c                   óH   — e Zd Zd„ Zd„ Zd„ Zd„ Zej                  d„ «       Z	y)ÚTestNRTIssuec                 ó  ‡‡— t         d„ «       Št         ˆfd„«       Št         ˆfd„«       }d}t        j                  j                  |df«      } |||«      }|j                  ||«      }t        j                  j                  ||«       y)zO
        GitHub Issue #1244 https://github.com/numba/numba/issues/1244
        c                 óH   — | \  }}t        j                  |dz  |dz  z   «      S )NrR   )ÚmathÚsqrt)ÚvectorÚxÚys      r&   Úcalculate_2D_vector_magzNTestNRTIssue.test_issue_with_refct_op_pruning.<locals>.calculate_2D_vector_mag6  s&   € à‰DˆAˆqä—9‘9˜Q !™V a¨1¡f™_Ó-Ð-r)   c                 óŒ   •— t        j                  dt         j                  ¬«      } ‰| «      }| \  }}||z  |d<   ||z  |d<   |S ©NrR   ©rz   r   r    )r~   r®   Úfloat64)rÌ   Únormalized_vectorÚmagrÍ   rÎ   rÏ   s        €r&   Únormalize_2D_vectorzJTestNRTIssue.test_issue_with_refct_op_pruning.<locals>.normalize_2D_vector<  sO   ø€ ä "§¡¨´"·*±*Ô =Ðá)¨&Ó1ˆCØ‰DˆAˆqà#$ s¡7Ð˜aÑ Ø#$ s¡7Ð˜aÑ à$Ð$r)   c                 ó¸   •— t        j                  | dft         j                  ¬«      }t        | «      D ]#  }||   } ‰|«      }|d   ||df<   |d   ||df<   Œ% |S rÑ   )r~   r®   rÓ   r^   )Únum_vectorsÚvectorsÚnormalized_vectorsr‰   rÌ   rÔ   rÖ   s         €r&   Únormalize_vectorszHTestNRTIssue.test_issue_with_refct_op_pruning.<locals>.normalize_vectorsH  sp   ø€ ä!#§¡¨;¸Ð*:Ä"Ç*Á*Ô!MÐä˜;Ö'�Ø  ™�á$7¸Ó$?Ð!à+<¸QÑ+?Ð" 1 a 4Ñ(Ø+<¸QÑ+?Ð" 1 a 4Ò(ð (ð &Ð%r)   ru   rR   N)r   r~   ÚrandomÚpy_funcrƒ   Úassert_almost_equal)r%   rÛ   rØ   Útest_vectorsÚgotÚexpectedrÏ   rÖ   s         @@r&   Ú test_issue_with_refct_op_pruningz-TestNRTIssue.test_issue_with_refct_op_pruning2  s‘   ù€ ô 
ñ	.ó 
ð	.ô
 
ó		%ó 
ð		%ô 
ó	&ó 
ð	&ð ˆÜ—y‘y×'Ñ'¨°aÐ(8Ó9ˆÙ ¨\Ó:ˆØ$×,Ñ,¨[¸,ÓGˆä
�
‰
×&Ñ& x°Õ5r)   c                 ód  — d„ } t         t        j                  t        j                  t        j                  t        j
                  dd«      f«      «       «      |«      } |«       \  }}| j                  |d«       | j                  |t        j                  dt        j
                  ¬«      «       y )Nc                  óP   — dt        j                  dt         j                  ¬«      fS )Ng        r    rÒ   )r~   ÚzerosÚint32r/   r)   r&   Úfz.TestNRTIssue.test_incref_after_cast.<locals>.f`  s   € ØœŸ™ ¬"¯(©(Ô3Ð3Ð3r)   r    ÚCy                rÒ   )	r   r   ÚTupleÚ
complex128ÚArrayræ   ÚassertPreciseEqualr~   rå   )r%   rç   ÚcfuncÚzrŠ   s        r&   Útest_incref_after_castz#TestNRTIssue.test_incref_after_cast]  s”   € ò	4ð
K”ð G”e—k‘k¤5×#3Ñ#3Ü#(§;¡;¬u¯{©{¸A¸sÓ#Cð#Fó Gó Jó KØKLóNˆá“‰ˆˆ3Ø×Ñ  2Ô&Ø×Ñ ¤R§X¡X¨a´r·x±xÔ%@ÕAr)   c                 óö   — t         d„ «       } |«       \  }}t        j                  j                  ||«       t        j                  j                  |t        j                  dt        j
                  ¬«      «       y )Nc                  ó¤   — t        j                  dt         j                  ¬«      } t        j                  dt         j                  ¬«      }| |d d  fS )Nru   rÒ   )r~   ÚonesrÓ   )ÚaÚbs     r&   rç   z5TestNRTIssue.test_refct_pruning_issue_1511.<locals>.fl  s7   € ä—‘˜¤"§*¡*Ô-ˆAÜ—‘˜¤"§*¡*Ô-ˆAØ�a™�d�7ˆNr)   ru   rÒ   )r   r~   rƒ   r„   rò   rÓ   )r%   rç   ró   rô   s       r&   Útest_refct_pruning_issue_1511z*TestNRTIssue.test_refct_pruning_issue_1511k  sX   € Ü	ñ	ó 
ð	ñ
 ‹s‰ˆˆ1Ü
�
‰
×Ñ  1Ô%Ü
�
‰
×Ñ ¤2§7¡7¨2´R·Z±ZÔ#@ÕAr)   c                 óª   — t         d„ «       }t        j                  g d¢g«      }|j                  |dd«      } ||dd«      }| j	                  ||«       y )Nc                 ó¦   — t        j                  | dk(  «      }t        |d   «      dk(  rd}d}n|d   d   }|d   d   }|dz
  |z   }|dz
  |z   }||fS )Nr    r   )r~   ÚwhereÚlen)ÚimagerÍ   rÎ   Únext_locÚy_offsetÚx_offsetÚ
next_loc_xÚ
next_loc_ys           r&   Úudtz7TestNRTIssue.test_refct_pruning_issue_1526.<locals>.udtw  sp   € ä—x‘x ¨¡
Ó+ˆHä�8˜A‘;Ó 1Ò$Ø�Ø‘à# A™; q™>�Ø# A™; q™>�à˜a™% 8Ñ+ˆJØ˜a™% 8Ñ+ˆJà˜zÐ)Ð)r)   )
r    r   r    r   r    r   r   r    r   r   r    é   )r   r~   ÚarrayrÝ   rS   )r%   r   ró   Úexpectrà   s        r&   Útest_refct_pruning_issue_1526z*TestNRTIssue.test_refct_pruning_issue_1526v  sW   € Ü	ñ	*ó 
ð	*ô �H‰HÒ4Ð5Ó6ˆØ—‘˜Q  1Ó%ˆÙ�!�Q˜‹lˆà×Ñ˜ Õ%r)   c                 ó$  — ddl m} | j                  t        j                  «       |d„ «       }| j                  t        j                  «       | j                   |«       |j                  «       «       | j                  t        j                  «       y )Nr   r   c                   ó   — y)Né{   r/   r/   r)   r&   Úfooz8TestNRTIssue.test_no_nrt_on_njit_decoration.<locals>.foo—  s   € àr)   )Únumbar   re   r   r9   rS   rÝ   ri   )r%   r   r  s      r&   Útest_no_nrt_on_njit_decorationz+TestNRTIssue.test_no_nrt_on_njit_decoration�  so   € õ 	ð 	×ÑœŸ™Ô%ð 
ñ	ó 
ð	ð 	×ÑœŸ™Ô%ð 	×Ñ™› §¡£Ô.ð 	�‰œŸ™Õ$r)   N)
r,   r-   r.   râ   rï   rõ   r  r   Úrun_test_in_subprocessr
  r/   r)   r&   rÇ   rÇ   1  s3   „ ò)6òVBò	Bò&ð. ×$Ñ$ñ%ó %ñ%r)   rÇ   c                   ó`   — e Zd ZdZd„ Z ej                  d«      d„ «       Zee	d„ «       «       Z
y)ÚTestRefCtPruninga¡  
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                 ó6  — | j                   }t        |j                  «       «      }|D �cg c]	  }d|v sŒ|‘Œ }}|D �cg c]	  }d|v sŒ|‘Œ }}t        j                  |«      }t        |j                  «       «      }|D �cg c]	  }d|v sŒ|‘Œ }}|D �cg c]	  }d|v sŒ|‘Œ }	}| j                  ||«       | j                  ||	«       t        |«      t        |«      z
  }
t        |«      t        |	«      z
  }|
|z  }| j                  ||
|z  «       dj                  |«      }dD ]%  }dj                  |«      }| j                  ||«       Œ' | j                  t        t        |j                  «       «      «      t        |«      «       y c c}w c c}w c c}w c c}w )NÚ
NRT_increfÚ
NRT_decrefÚ
)r    rR   é   é   é   z	; GONE {})Úsample_llvm_irÚlistÚ
splitlinesr   Ú_remove_redundant_nrt_refctÚassertNotEqualÚsetrS   Ú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_recognizez0TestRefCtPruning.test_refct_pruning_op_recognizeð  s�  € Ø×&Ñ&ˆÜ˜8×.Ñ.Ó0Ó1ˆÙ'2ÓI¡{ °lÀbÒ6Hš" {ˆÐIÙ'2ÓI¡{ °lÀbÒ6Hš" {ˆÐIô ×6Ñ6°xÓ@ˆ	Ü˜I×0Ñ0Ó2Ó3ˆÙ&2ÓI¡l °lÀbÒ6Hš lˆÐIÙ&2ÓI¡l °lÀbÒ6Hš lˆÐIð 	×Ñ˜N¨MÔ:Ø×Ñ˜N¨MÔ:ä˜^Ó,¬s°=Ó/AÑAˆÜ˜^Ó,¬s°=Ó/AÑAˆð " NÑ2ˆØ×Ñ˜ >°NÑ#BÔCØ—y‘y Ó*ˆó !ˆAØ×%Ñ% aÓ(ˆDØ�M‰M˜$ Õ-ð !ð 	×ÑœœT ,×"9Ñ"9Ó";Ó<Ó=¼sÀ8»}ÕMùò5 JùÚIùò
 JùÚIs-   ª	F´F¾	FÁFÂ 	FÂ
FÂ	FÂFz3Pass removed as it was buggy. Re-enable when fixed.c                 ód  ‡‡‡— t         d„ «       Št         d„ «       Št         ˆˆfd„«       Št        d¬«      ˆfd„«       }|j                  d«       t        |j                  |j                  d   «      «      }t        t        j                  d	|«      «      }| j                  t        |«      d«       y
)ztestcase from #2350c                 óN   — t        j                  |«      s||| fxx   dz  cc<   y y r   ©r~   Úisnan©rÍ   rÎ   ÚaggÚfields       r&   Ú_append_non_nazITestRefCtPruning.test_refct_pruning_with_branches.<locals>._append_non_na  s#   € ä—8‘8˜E”?Ø�A�q�D“	˜Q‘”	ð #r)   c                 ó’   — t        j                  |«      s2t        j                  ||| f   «      r|||| f<   y ||| fxx   |z  cc<   y y r²   r.  r0  s       r&   Ú_appendzBTestRefCtPruning.test_refct_pruning_with_branches.<locals>._append  sE   € ä—8‘8˜E”?Ü—8‘8˜C  1 ™IÔ&Ø %�C˜˜1˜’Ià˜˜1˜“I Ñ&”Ið	 #r)   c                 ó2   •—  ‰| |||«        ‰| |||«       y r²   r/   )rÍ   rÎ   r1  r2  r5  r3  s       €€r&   ÚappendzATestRefCtPruning.test_refct_pruning_with_branches.<locals>.append  s   ø€ á˜1˜a  eÔ,Ù�A�q˜#˜uÕ%r)   T)Úno_cpython_wrapperc                 ó�   •— t        | j                  d   «      D ]*  }t        | j                  d   «      D ]  } ‰||| |«       Œ Œ, y )Nr   r    )r^   r{   )rŠ   r2  r‰   Újr7  s       €r&   ÚextendzATestRefCtPruning.test_refct_pruning_with_branches.<locals>.extend&  s?   ø€ ä˜3Ÿ9™9 Q™<Ö(�Ü˜sŸy™y¨™|Ö,�AÙ˜1˜a  eÕ,ñ -ñ )r)   z(f4[:,::1], f4)r   z!(NRT_incref|NRT_decref)\([^\)]+\)N)
r   Úcompiler<   Úinspect_llvmÚ
signaturesr  ÚreÚfinditerrS   rù   )r%   r;  ÚllvmirÚrefopsr5  r3  r7  s       @@@r&   Ú test_refct_pruning_with_branchesz1TestRefCtPruning.test_refct_pruning_with_branches  s³   ú€ ô 
ñ	ó 
ð	ô 
ñ	'ó 
ð	'ô 
ô	&ó 
ð	&ô 
 Ô	&ó	-ó 
'ð	-ð 	�‰Ð(Ô)ô �V×(Ñ(¨×):Ñ):¸1Ñ)=Ó>Ó?ˆÜ”b—k‘kÐ"FÈÓOÓPˆØ×Ñœ˜V› aÕ(r)   c                 óî   ‡— t        j                  «        t        j                  «        t        j                  «        t        d„ «       Št        dg«      ˆfd„«       }| j                   |d«      d«       y)ztThe InlineAsm class from llvmlite.ir has no 'name' attr the refcount
        pruning pass should be tolerant to thisc                 óz   — d„ }t        t        j                  t        j                  t        j                  «      |fS )Nc                 ó  — |\  }}t        j                  t        j                  d«      t        j                  d«      t        j                  d«      g«      }|j                  |dd||fdd¬«      }t	        | ||j
                  |«      S )Né    zmov $2, $0; imul $1, $0z=&r,r,rÚasm_mulF)ÚnameÚside_effect)r   ÚFunctionTypeÚIntTypeÚasmr   Úreturn_type)ÚcgctxÚbuilderÚsigr@   Úarg_0Úarg_1ÚftyÚmuls           r&   Úcodegenz>TestRefCtPruning.test_inline_asm.<locals>.bar.<locals>.codegen?  s|   € Ø!%‘�˜Ü—o‘o¤b§j¡j°£n´r·z±zÀ"³~Ü79·z±zÀ"³~ð7Gó H�à—k‘k #Ð'@À)Ø#(¨% .°yØ.3ð "ó 5�ô *¨%°¸#¿/¹/È3ÓOÐOr)   )r   r   ræ   )ÚtyctxrÍ   rÎ   rV  s       r&   Úbarz-TestRefCtPruning.test_inline_asm.<locals>.bar=  s*   € òPô œUŸ[™[¬%¯+©+´u·{±{ÓCÀWÐLÐLr)   zint32(int32)c                 ó$   •— | dz  }  ‰| d«      }|S )Nr    rR   r/   )rÍ   rî   rX  s     €r&   r  z-TestRefCtPruning.test_inline_asm.<locals>.fooI  s   ø€ à�‰FˆAÙ�A�q“	ˆAØˆHr)   ru   é   N)ÚllvmÚinitialize_native_targetÚinitialize_native_asmprinterÚinitialize_native_asmparserr
   r   rS   )r%   r  rX  s     @r&   Útest_inline_asmz TestRefCtPruning.test_inline_asm4  so   ø€ ô
 	×%Ñ%Ô'Ü×)Ñ)Ô+Ü×(Ñ(Ô*ä	ñ		Mó 
ð		Mô 
ˆ~ÐÓ	ó	ó 
 ð	ð
 	×Ñ™˜R› "Õ%r)   N)r,   r-   r.   r  r+  ÚunittestÚskiprC  Ú
linux_onlyÚx86_onlyr_  r/   r)   r&   r  r  ¦  sO   „ ðF€NòPNð> €X‡]�]ÐHÓIñ")ó Jð")ðH Øñ&ó ó ñ&r)   r  c                   ó@   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚTestNrtExternalCFFIz?Testing the use of externally compiled C code that use NRT
    c                 óJ   •— t         j                   t        t        | �  «        y r²   )r   rK   rL   re  rM   rN   s    €r&   rM   zTestNrtExternalCFFI.setUpV  s   ø€ ä×!Ò!ÜÔ! 4Ñ.Õ0r)   c                 ó´  — ddl m}  |«       }|j                  ||t        «       g¬«       |j	                  |«       t        dj                  |«      «      }|j                  |¬«       t        j                  j                  |«       	 t        |«      }t        j                  j                  |«       ||fS # t        j                  j                  |«       w xY w)Nr   ©ÚFFI)Úinclude_dirszcffi_test_{})Útmpdir)Úcffiri  Ú
set_sourcer   Úcdefr   r  r<  Úsysr¾   r7  r   Úremove)r%   rI  Úsourcern  ri  Úffirk  Úmods           r&   Úcompile_cffi_modulez'TestNrtExternalCFFI.compile_cffi_module[  s�   € Ýá‹eˆØ�‰�t˜V´<³>Ð2BˆÔCØ�‰�ŒÜ × 5Ñ 5°dÓ ;Ó<ˆØ�‰˜6ˆÔ"Ü�‰�‰˜Ôð	$Ü  Ó&ˆCä�H‰H�O‰O˜FÔ#à�Cˆxˆøô �H‰H�O‰O˜FÕ#ús   ÂB6 Â6!Cc                 ót   — ddl m}  |«       }|j                  dt        j                  d   «      } |«       }|S )Nr   rh  zvoid* (*)()Úget_api)rl  ri  rt   r   Ú	c_helpers)r%   ri  rr  Únrt_get_apiÚtables        r&   Úget_nrt_api_tablez%TestNrtExternalCFFI.get_nrt_api_tablek  s3   € Ýá‹eˆØ—h‘h˜}¬k×.CÑ.CÀIÑ.NÓOˆÙ“ˆØˆr)   c                 óV  — dj                  | j                  j                  «      }d}d}| j                  |||«      \  }}| j	                  |j
                  j                  d«       | j                  «       }|j
                  j                  |«      }| j	                  |j
                  j                  d«       t        |j                  d|«      «      }t        j                  |«      }	| j	                  |	j                  d«       ~	| j	                  |j
                  j                  d«       y )	Nz{}_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;
        r   i
 r‘   r    i­Þ  )r  rO   r,   rt  rS   ÚlibÚstatusrz  Útest_nrt_apiÚintrt   r	   ÚMemInforT   )
r%   rI  rq  rn  rr  rs  ry  ÚoutÚmi_addrrY   s
             r&   Útest_manage_memoryz&TestNrtExternalCFFI.test_manage_memorys  sè   € Ø&×-Ñ-¨d¯n©n×.EÑ.EÓFˆðˆð(ˆð
 ×+Ñ+¨D°&¸$Ó?‰ˆˆSà×Ñ˜Ÿ™Ÿ™¨Ô+Ø×&Ñ&Ó(ˆØ�g‰g×"Ñ" 5Ó)ˆà×Ñ˜Ÿ™Ÿ™¨Ô1Ü�c—h‘h˜x¨Ó-Ó.ˆÜ�[‰[˜Ó!ˆØ×Ñ˜Ÿ™ aÔ(Øà×Ñ˜Ÿ™Ÿ™¨Õ0r)   c                 óÖ  — dj                  | j                  j                  «      }d}d}| j                  |||«      \  }}| j	                  «       }dt        j                  t
        j                  «      j                  z  }|j                  j                  ||«      }t        |j                  d|«      «      }	t        j                  |	«      }
| j                  |
j                   d«       |j#                  |j                  dj                  |«      |
j$                  «      «      }t        j&                  dt
        j                  |¬	«      }t
        j(                  j+                  |g d
¢«       y )Nz{}_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  r‘   r    z	char [{}])r  )r{   rz   r|   )ií  i¼
  iï  )r  rO   r,   rt  rz  r~   rz   Úintprk   r|  r~  r  rt   r	   r€  rS   rT   r|   rd   r‚   rƒ   r„   )r%   rI  rq  rn  rr  rs  ry  Únumbytesr�  r‚  rY   r|   rŠ   s                r&   Útest_allocatez!TestNrtExternalCFFI.test_allocateœ  s  € Ø!×(Ñ(¨¯©×)@Ñ)@ÓAˆðˆð :ˆØ×+Ñ+¨D°&¸$Ó?‰ˆˆSà×&Ñ&Ó(ˆà”r—x‘x¤§¡Ó(×1Ñ1Ñ1ˆØ�g‰g×"Ñ" 5¨(Ó3ˆä�c—h‘h˜x¨Ó-Ó.ˆÜ�[‰[˜Ó!ˆØ×Ñ˜Ÿ™ aÔ(à—‘˜CŸH™H [×%7Ñ%7¸Ó%AÀ2Ç7Á7ÓKÓLˆÜ�j‰j˜t¬2¯7©7¸6ÔBˆÜ
�
‰
×Ñ Ò%:Õ;r)   c                 óº   — ddl m} t        d„ «       } |«       }t        |j	                  d| j                  «       «      «      } |«       }| j                  ||«       y )Nr   rh  c                  ó   — t        «       S r²   r   r/   r)   r&   r~  z6TestNrtExternalCFFI.test_get_api.<locals>.test_nrt_api¿  s
   € ä“=Ð r)   r‘   )rl  ri  r   r  rt   rz  rS   )r%   ri  r~  rr  r  rà   s         r&   Útest_get_apiz TestNrtExternalCFFI.test_get_api¼  sU   € Ýä	ñ	!ó 
ð	!ñ ‹eˆÜ�S—X‘X˜h¨×(>Ñ(>Ó(@ÓAÓBˆÙ‹nˆØ×Ñ˜ Õ%r)   )r,   r-   r.   rE   rM   rt  rz  rƒ  r‡  rŠ  rš   r›   s   @r&   re  re  R  s(   ø„ ñô1ò
ò ò'1òR<ö@
&r)   re  c                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚTestNrtStatisticsc                 ó6   — t        j                  «       | _        y r²   )r   Úmemsys_stats_enabledÚ_TestNrtStatistics__stats_stater$   s    r&   rM   zTestNrtStatistics.setUpË  s   € ä(×=Ñ=Ó?ˆÕr)   c                 ón   — | j                   rt        j                  «        y t        j                  «        y r²   )r�  r   Úmemsys_enable_statsÚmemsys_disable_statsr$   s    r&   ÚtearDownzTestNrtStatistics.tearDownÏ  s#   € à×ÒÜ×+Ñ+Õ-ä×,Ñ,Õ.r)   c                 óh   — d}t         j                  j                  «       }d|d<   t        ||¬«       y )Na¡  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©Úenv)r½   ÚenvironÚcopyr   )r%   Úsrcr˜  s      r&   Útest_stats_env_var_explicit_onz0TestNrtStatistics.test_stats_env_var_explicit_onÖ  s0   € ðˆô8 �j‰j�o‰oÓˆØ!$ˆÐÑÜ˜# 3Ö'r)   c                 ó"   — d}t        ||¬«       y )Na“  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—  )r   )r%   r˜  r›  s      r&   Úcheck_env_var_offz#TestNrtStatistics.check_env_var_offø  s   € ðˆô 	˜# 3Ö'r)   c                 ól   — t         j                  j                  «       }d|d<   | j                  |«       y )NÚ0r–  )r½   r™  rš  rž  ©r%   r˜  s     r&   Útest_stats_env_var_explicit_offz1TestNrtStatistics.test_stats_env_var_explicit_off  s+   € ä�j‰j�o‰oÓˆØ!$ˆÐÑØ×Ñ˜sÕ#r)   c                 ó†   — t         j                  j                  «       }|j                  dd «       | j	                  |«       y )Nr–  )r½   r™  rš  Úpoprž  r¡  s     r&   Útest_stats_env_var_default_offz0TestNrtStatistics.test_stats_env_var_default_off  s1   € ô �j‰j�o‰oÓˆØ�‰Ð! 4Ô(Ø×Ñ˜sÕ#r)   c                 ób  — t         d„ «       }t        j                  «        | j                  t        j                  «       «       t        d«      D ]Þ  }t        j                  «       }t        j                  «        | j                  t        j                  «       «        |«        t        j                  «        | j                  t        j                  «       «       t        j                  «       } |«        t        j                  «       }| j                  ||«       | j                  ||«       Œà y )Nc                  ób   — t        j                  d«      } t        j                  d| d   z  «      S )Nr  r  r   )r~   rò   r…   )Útmps    r&   r  z7TestNrtStatistics.test_stats_status_toggle.<locals>.foo  s&   € ä—'‘'˜!“*ˆCÜ—9‘9˜Q  Q¡™ZÓ(Ð(r)   rR   )r   r   r‘  ri   rŽ  r^   r   Úget_allocation_statsr’  re   rS   r»   )r%   r  r‰   Ústats_1Ústats_2Ústats_3s         r&   Útest_stats_status_togglez*TestNrtStatistics.test_stats_status_toggle  sÛ   € ä	ñ	)ó 
ð	)ô
 	×'Ñ'Ô)à�‰œ×8Ñ8Ó:Ô;ä�q–ˆAä×0Ñ0Ó2ˆGä×,Ñ,Ô.à×Ñœ[×=Ñ=Ó?Ô@áŒEä×+Ñ+Ô-à�O‰OœK×<Ñ<Ó>Ô?ä×0Ñ0Ó2ˆGáŒEä×0Ñ0Ó2ˆGà×Ñ˜W gÔ.à�O‰O˜G WÕ-ñ- r)   c                 ó8  — t        j                  «        | j                  t        j                  «       «       | j	                  t
        «      5 }t        j                  «        d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)NúNRT stats are disabled.)r   r’  re   rŽ  r7   r8   r   r©  r;   r<   r=   )r%   rA   s     r&   Ú5test_rtsys_stats_query_raises_exception_when_disabledzGTestNrtStatistics.test_rtsys_stats_query_raises_exception_when_disabled<  sm   € ô 	×(Ñ(Ô*Ø×Ñœ×9Ñ9Ó;Ô<à×Ñœ|Ô,°Ü×&Ñ&Ô(÷ -ð 	�‰Ð/´°V×5EÑ5EÓ1FÕG÷ -Ð,ús   ÁBÂBc                 ó¤  — d}|D ]±  }t        t        d|› �«      }| j                  |¬«      5  t        j                  «        | j	                  t        j
                  «       «       | j                  t        «      5 } |«        d d d «       | j                  dt        j                  «      «       d d d «       Œ³ y # 1 sw Y   Œ9xY w# 1 sw Y   ŒÊxY w)N)ÚallocÚfreeÚmi_allocÚmi_freeÚmemsys_get_stats_)Ú
stats_funcr¯  )r:   r   ÚsubTestr’  re   rŽ  r7   r8   r;   r<   r=   )r%   Úmethod_variationsr?   r·  rA   s        r&   Ú<test_nrt_explicit_stats_query_raises_exception_when_disabledzNTestNrtStatistics.test_nrt_explicit_stats_query_raises_exception_when_disabledH  s¨   € ð EÐÛ%ˆDÜ ¤Ð0AÀ$ÀÐ.HÓIˆJØ—‘¨�Õ4ä×0Ñ0Ô2Ø× Ñ ¤×!AÑ!AÓ!CÔDØ×&Ñ&¤|Ô4¸Ù”L÷ 5à—‘Ð7¼¸V×=MÑ=MÓ9NÔO÷ 5Ð4ñ &÷ 5Ð4ú÷	 5Ð4ús$   ­ACÁ:B:Â-CÂ:CÂ?CÃC	N)r,   r-   r.   rM   r“  rœ  rž  r¢  r¥  r­  r°  rº  r/   r)   r&   rŒ  rŒ  É  s4   „ ò@ò/ò (òD(ò&$ò$ò".òH
HóPr)   rŒ  Ú__main__)9rÊ   r½   Úplatformro  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Ú
startswithrb  Úmachinerc  Úobjectr   r1   rH   r�   rÇ   r  re  rŒ  r,   Úmainr/   r)   r&   Ú<module>rÎ     s\  ðÛ Û 	Û Û 
Û 	ã å Ý ÷ó ÷ 9Ý 'Ý 2Ý Ý Ý -÷F÷ Fñ Fõ +Û ð ˆX�_‰_ §¡×!8Ñ!8¸Ó!AÐAØ.ó0€
àˆ8�?‰?Ð+˜8×+Ñ+Ó-Ð5GÐGØ*ó,€ôˆFô ô# 8×#4Ñ#4ô #ô4e6�X×&Ñ&ô e6ôP=-�h×'Ñ'ô =-ô@r%�8ô r%ôji&�x×(Ñ(ô i&ðX ôs&Ð-¨xó s&ó ðs&ôlKP˜ô KPð\ ˆzÒØ€H‡M�M…Oð r)   