§
    2@ÄjÆw  ã                   óÆ  — 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(j)        ej         *                    d¦  «         d¦  «        Z+ e(j)         ej,        ¦   «         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(j8        ¦   «          dS dS )!é    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dS )ÚDummyr   c                 ó@   — t          | ¦  «        xj        dz  c_        d S ©Né   ©ÚtypeÚalive©Úselfs    úEC:\Projects\Historical\venv\Lib\site-packages\numba/tests/test_nrt.pyÚ__init__zDummy.__init__(   ó"   € ÝˆT‰
Œ
ÐÔ˜AÑÐÔÐÐó    c                 ó@   — t          | ¦  «        xj        dz  c_        d S r   r!   r$   s    r&   Ú__del__zDummy.__del__+   r(   r)   N)Ú__name__Ú
__module__Ú__qualname__r#   r'   r+   © r)   r&   r   r   %   s7   € € € € € Ø€Eðð ð ðð ð ð ð r)   r   c                   ó   — e Zd ZdZdZd„ ZdS )ÚTestNrtMemInfoNotInitializedzn
    Unit test for checking the use of the NRT fails if the
    initialization sequence has not been run.
    Fc                 ó†  — ddddœ}|                      ¦   «         D ]¥\  }}	 |                      t          ¦  «        5 }dt          _        t          t          |¦  «        } ||Ž  d d d ¦  «         n# 1 swxY w Y   d}|                      |t          |j        ¦  «        ¦  «         dt          _        Œ•# dt          _        w xY wd S )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Ô4ð ¸Ø"'•E”KÝ ¥¨Ñ-Ô-�BØ�B˜�I�Iðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 @�Ø—’˜c¥3 vÔ'7Ñ#8Ô#8Ñ9Ô9Ð9à"•”�ø˜d•”Ð"Ð"Ð"Ð"ð
	#ð 
	#s.   ¡B0»'A.Á"B0Á.A2	Á2B0Á5A2	Á6-B0Â0B>N)r,   r-   r.   Ú__doc__Ú_numba_parallel_test_rD   r/   r)   r&   r1   r1   /   s5   € € € € € ðð ð "Ðð#ð #ð #ð #ð #r)   r1   c                   ó\   ‡ — 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          | ¦  «                             ¦   «          d S )Nr   )	r   r#   r   Ú
initializer   Útarget_contextÚsuperrH   ÚsetUp©r%   Ú	__class__s    €r&   rM   zTestNrtMemInfo.setUpN   s@   ø€ à�ŒåÔ�Ô2Ñ3Ô3Ð3Ý�n˜dÑ#Ô#×)Ò)Ñ+Ô+Ð+Ð+Ð+r)   c                 óF  — t          ¦   «         }|                      t           j        d¦  «         d}t          j        ||¦  «        }|                      |j        d¦  «         ~|                      t           j        d¦  «         |                     ¦   «          |                      |j        d¦  «         |                      t           j        d¦  «         |                     ¦   «          |                      |j        d¦  «         ~|                      t           j        d¦  «         d S )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ŒGˆØ×Ò�œ aÑ(Ô(Ð(ØˆåÔ˜t QÑ'Ô'ˆØ×Ò˜œ aÑ(Ô(Ð(ØØ×Ò�œ aÑ(Ô(Ð(Ø
�
Š
‰ŒˆØ×Ò˜œ aÑ(Ô(Ð(Ø×Ò�œ aÑ(Ô(Ð(Ø
�
Š
‰ŒˆØ×Ò˜œ aÑ(Ô(Ð(ØØ×Ò�œ aÑ(Ô(Ð(Ð(Ð(r)   c                 óŽ  — t          ¦   «         }|                      t           j        d¦  «         d}t          j        ||¦  «        }|                      |j        d¦  «         ~|                      t           j        d¦  «         t          d¦  «        D ]}|                     ¦   «          Œ|                      |j        d¦  «         |                      t           j        d¦  «         t          d¦  «        D ]}|                     ¦   «          Œ|                      |j        d¦  «         ~|                      t           j        d¦  «         d S )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ŒGˆØ×Ò�œ aÑ(Ô(Ð(ØˆåÔ˜t QÑ'Ô'ˆØ×Ò˜œ aÑ(Ô(Ð(ØØ×Ò�œ aÑ(Ô(Ð(Ý˜‘*”*ð 	ð 	ˆBØ�JŠJ‰LŒLˆLˆLØ×Ò˜œ gÑ.Ô.Ð.Ø×Ò�œ aÑ(Ô(Ð(Ý�s‘”ð 	ð 	ˆAØ�JŠJ‰LŒLˆLˆLØ×Ò˜œ aÑ(Ô(Ð(ØØ×Ò�œ aÑ(Ô(Ð(Ð(Ð(r)   c                 óà  — t          ¦   «         }|                      t           j        d¦  «         d}t          j        ||¦  «        }|                      |j        d¦  «         t          |¦  «        }|                      |j        d¦  «         |                      ||j        ¦  «         |                      |j	        ¦  «         |  
                    ||j        ¦  «         |                      |j        ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         ~~|                      t           j        d¦  «         ~|                      t           j        d¦  «         d S )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ŒGˆØ×Ò�œ aÑ(Ô(Ð(ØˆåÔ˜t QÑ'Ô'ˆØ×Ò˜œ aÑ(Ô(Ð(Ý˜2‘”ˆØ×Ò˜œ aÑ(Ô(Ð(Ø×Ò˜˜rœwÑ'Ô'Ð'Ø×Ò˜œÑ(Ô(Ð(Ø�Š�b˜%œ)Ñ$Ô$Ð$Ø�Š˜Ô*Ñ+Ô+Ð+Ø×Ò˜œ¨Ñ+Ô+Ð+Ø×Ò˜œ QÑ'Ô'Ð'ØØà×Ò�œ aÑ(Ô(Ð(ØØ×Ò�œ aÑ(Ô(Ð(Ð(Ð(r)   c                 ón  — 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        |
         d¦  «         Œ$t          d¦  «        D ]}
|
dz   |	j        |
<   Œt          |¦  «        }|                      |j        |¦  «         |                      |j        ¦  «         |                      ||j        ¦  «         |                      |j        ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         ~t          j        ||j        |j        z  |¬¦  «        }~t
          j                             t          j        |j        ¦  «        dz   |¦  «         |dz  }t          d¦  «        D ]&}
|                      |	j        |
         |
d	z   ¦  «         Œ'|                      |j         j        |¦  «         ~d S )
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�   s7  € Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<å”�œÑ#Ô#ˆØ”> BÑ&ˆÝÔ  °Ð5Ñ5Ô5ˆØŒwˆØ��X�X˜bœgÑ&Ô&¨¨°¸2±Ñ(>Ô(>Ñ?Ô?ˆå�r‘”ð 	<ð 	<ˆAØ×Ò˜Uœ^¨AÔ.°
Ñ;Ô;Ð;Ð;õ �r‘”ð 	&ð 	&ˆAØ ! A¡ˆEŒN˜1ÑÐÝ˜2‘”ˆØ×Ò˜œ xÑ0Ô0Ð0Ø×Ò˜œÑ(Ô(Ð(Ø�Š�b˜%œ)Ñ$Ô$Ð$Ø�Š˜Ô*Ñ+Ô+Ð+Ø×Ò˜œ¨Ñ+Ô+Ð+Ø×Ò˜œ QÑ'Ô'Ð'ØÝŒj˜u¨E¬L¸E¼NÑ,JØ %ð'ñ 'ô 'ˆàå
Œ
×Ò¥¤	¨#¬(Ñ 3Ô 3°aÑ 7¸Ñ=Ô=Ð=àˆq‰ˆõ �r‘”ð 	7ð 	7ˆAØ×Ò˜Uœ^¨AÔ.°°A±Ñ6Ô6Ð6Ð6à×Ò˜œœ¨$Ñ/Ô/Ð/ØˆCˆCr)   c                 óf  — ddl m}m}m}m} t          j        t
          j        ¦  «        }|j        dz  }t          j
        |d¬¦  «        }|                      |j        d¦  «         |j        } | ||¦  «         ||dz  ¦  «        ¦  «        }	t          d¦  «        D ]#}
|                      |	j        |
         d¦  «         Œ$t          d¦  «        D ]}
|
dz   |	j        |
<   Œt          j        |||j        z  |¬¦  «        }|                      |j        d¦  «         ~t
          j                             t          j        |j        ¦  «        dz   |¦  «         |dz  }t          d¦  «        D ]&}
|                      |	j        |
         |
d	z   ¦  «         Œ'|                      |j         j        |¦  «         ~d S )
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¸   sÊ  € Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<å”�œÑ#Ô#ˆØ”> BÑ&ˆÝÔ  °Ð5Ñ5Ô5ˆØ×Ò˜œ aÑ(Ô(Ð(ØŒwˆØ��X�X˜d‘^”^ W W¨X¸©]Ñ%;Ô%;Ñ<Ô<ˆå�r‘”ð 	<ð 	<ˆAØ×Ò˜Uœ^¨AÔ.°
Ñ;Ô;Ð;Ð;õ �r‘”ð 	&ð 	&ˆAØ ! A¡ˆEŒN˜1ÑÐåŒj˜u¨H¸¼Ñ,FØ "ð$ñ $ô $ˆà×Ò˜œ aÑ(Ô(Ð(Øå
Œ
×Ò¥¤	¨#¬(Ñ 3Ô 3°aÑ 7¸Ñ=Ô=Ð=àˆq‰ˆõ �r‘”ð 	7ð 	7ˆAØ×Ò˜Uœ^¨AÔ.°°A±Ñ6Ô6Ð6Ð6à×Ò˜œœ¨$Ñ/Ô/Ð/ØˆCˆCr)   c                 ó&  — t           j        j        dz  dz  }dD ]v}|                      t          ¦  «        5 }t          j        ||¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      d|› d�t          |j	        ¦  «        ¦  «         Œwd S )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Ü   sä   € õ Œ|Ô" aÑ'¨1Ñ,ˆØ!ð 	1ð 	1ˆDØ×"Ò"¥;Ñ/Ô/ð 5°6ÝÔ# D¨tÐ4Ñ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5à�MŠMÐI°TÐIÐIÐIÝ˜fÔ.Ñ/Ô/ñ1ô 1ð 1ð 1ð	1ð 	1s   ¶AÁA	Á A	c                 ó   — d}dD ]x}|                       t          ¦  «        5 }t          j        ||¬¦  «         d d d ¦  «         n# 1 swxY w Y   d|› d�}|                      |t          |j        ¦  «        ¦  «         Œyd S )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æ   sÐ   € ð ˆØ!ð 	6ð 	6ˆDØ×"Ò"¥:Ñ.Ô.ð 5°&ÝÔ# D¨tÐ4Ñ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5àHÀÐHÐHÐHˆCØ�MŠM˜#�s 6Ô#3Ñ4Ô4Ñ5Ô5Ð5Ð5ð		6ð 	6s   ¡AÁA	ÁA	)r,   r-   r.   rE   rM   rZ   ra   rn   r‹   r�   r   r•   r™   Ú__classcell__©rO   s   @r&   rH   rH   I   s¹   ø€ € € € € ðð ð,ð ,ð ,ð ,ð ,ð)ð )ð )ð")ð )ð )ð&)ð )ð )ð,$ð $ð $ðRð ð ðH ð1ð 1ñ „]ð1ð6ð 6ð 6ð 6ð 6ð 6ð 6r)   rH   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestTracemalloczB
    Test NRT-allocated memory can be tracked by tracemalloc.
    c                 ón  — 	 dd l }n%# t          $ r |                      d¦  «         Y nw xY w|                     ¦   «          	 |                     ¦   «         } |¦   «         }|                     ¦   «         }~|                     |d¦  «        |                     ¦   «          S # |                     ¦   «          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ØÐÐÐÐøÝð 	7ð 	7ð 	7Ø�MŠMÐ5Ñ6Ô6Ð6Ð6Ð6ð	7øøøà×ÒÑÔÐð	Ø ×.Ò.Ñ0Ô0ˆFà�$‘&”&ˆCØ×-Ò-Ñ/Ô/ˆEØØ×#Ò# F¨HÑ5Ô5à×ÒÑÔÐÐøˆK×ÒÑÔÐÐøøøs   ‚ ‡)¨)ÁAB ÂB4c                 óz  ‡‡‡	— dŠt           j        Š	t          ˆˆ	fd„¦   «         Šˆfd„}ˆfd„}|j        j        dz   } ‰¦   «          |                      |¦  «        }|d         }|                      |j        ‰¦  «         |                      |j        ‰dz  d¬	¦  «         |j	        d         }|  
                    t          j                             |j        ¦  «        d
¦  «         |  
                    |j        |¦  «         |                      |¦  «        }|d         }|                      |j        ‰dz  ¦  «         d S )Ni@B c                  ó.   •— 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˜A˜uÑ%Ô%Ð%r)   c                  ó   •—  ‰ ¦   «         S ©Nr/   ©r°   s   €r&   Úkeep_memoryz2TestTracemalloc.test_snapshot.<locals>.keep_memory  s   ø€ Ø#Ð#Ñ%Ô%Ð%r)   c                  ó   •—  ‰ ¦   «          d S 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Ô4ˆØ�AŒwˆà×Ò ¤	¨1Ñ-Ô-Ð-Ø�Š˜œ	 1 u¡9ð@ð 	ñ 	Bô 	Bð 	Bð ”˜qÔ!ˆØ×Ò�œ×)Ò)¨%¬.Ñ9Ô9¸=ÑIÔIÐIØ×Ò˜œ |Ñ4Ô4Ð4ð ×'Ò'¨Ñ7Ô7ˆØ�AŒwˆà�Š˜œ	 1 t¡8Ñ,Ô,Ð,Ð,Ð,r)   N)r,   r-   r.   rE   r«   rÅ   r/   r)   r&   r�   r�   ñ   s<   € € € € € ðð ðð ð ð (-ð (-ð (-ð (-ð (-r)   r�   c                   óF   — e Zd Zd„ Zd„ Zd„ Zd„ Zej        d„ ¦   «         Z	dS )ÚTestNRTIssuec                 ó<  ‡‡— t           d„ ¦   «         Št           ˆfd„¦   «         Št           ˆfd„¦   «         }d}t          j                             |df¦  «        } |||¦  «        }|                     ||¦  «        }t          j                             ||¦  «         dS )zO
        GitHub Issue #1244 https://github.com/numba/numba/issues/1244
        c                 óF   — | \  }}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˜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<  sW   ø€ å "¤¨µ"´*Ð =Ñ =Ô =Ðà)Ð)¨&Ñ1Ô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<   Œ0|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  sƒ   ø€ å!#¤¨;¸Ð*:Å"Ä*Ð!MÑ!MÔ!MÐå˜;Ñ'Ô'ð @ð @�Ø  œ�à$7Ð$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×'Ò'¨°aÐ(8Ñ9Ô9ˆØÐ ¨\Ñ:Ô:ˆØ$×,Ò,¨[¸,ÑGÔGˆå
Œ
×&Ò& x°Ñ5Ô5Ð5Ð5Ð5r)   c                 ór  — d„ } t           t          j        t          j        t          j        t          j        dd¦  «        f¦  «        ¦   «         ¦  «        |¦  «        } |¦   «         \  }}|                      |d¦  «         |                      |t          j        dt          j        ¬¦  «        ¦  «         d S )Nc                  óF   — 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Ô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ð 	4ð 	4ð
K•ð G•e”k¥5Ô#3Ý#(¤;­u¬{¸A¸sÑ#CÔ#Cð#Fñ Gô Gñ Jô Jñ Kô KØKLñNô Nˆà�‘”‰ˆˆ3Ø×Ò  2Ñ&Ô&Ð&Ø×Ò ¥R¤X¨aµr´xÐ%@Ñ%@Ô%@ÑAÔAÐAÐAÐAr)   c                 óü   — t           d„ ¦   «         } |¦   «         \  }}t          j                             ||¦  «         t          j                             |t          j        dt          j        ¬¦  «        ¦  «         d S )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  s?   € å”˜¥"¤*Ð-Ñ-Ô-ˆ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  ss   € Ý	ð	ð 	ñ 
Œð	ð
 ˆq‰sŒs‰ˆˆ1Ý
Œ
×Ò  1Ñ%Ô%Ð%Ý
Œ
×Ò ¥2¤7¨2µR´ZÐ#@Ñ#@Ô#@ÑAÔAÐAÐAÐAr)   c                 óÈ   — t           d„ ¦   «         }t          j        g d¢g¦  «        }|                     |dd¦  «        } ||dd¦  «        }|                      ||¦  «         d S )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  sy   € å”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  sx   € Ý	ð	*ð 	*ñ 
Œð	*õ ŒHÐ4Ð4Ð4Ð5Ñ6Ô6ˆØ—’˜Q  1Ñ%Ô%ˆØˆc�!�Q˜‰lŒlˆà×Ò˜ Ñ%Ô%Ð%Ð%Ð%r)   c                 óB  — ddl m} |                      t          j        ¦  «         |d„ ¦   «         }|                      t          j        ¦  «         |                       |¦   «         |                     ¦   «         ¦  «         |                      t          j        ¦  «         d S )Nr   r   c                  ó   — dS )Né{   r/   r/   r)   r&   Úfooz8TestNRTIssue.test_no_nrt_on_njit_decoration.<locals>.foo—  s   € à�3r)   )Ú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�  s£   € ð 	ÐÐÐÐÐð 	×Ò�œÑ%Ô%Ð%ð 
ð	ð 	ñ 
Œð	ð 	×Ò�œÑ%Ô%Ð%ð 	×Ò˜˜™œ §¢¡¤Ñ.Ô.Ð.ð 	�Š�œÑ$Ô$Ð$Ð$Ð$r)   N)
r,   r-   r.   râ   rï   rõ   r  r   Úrun_test_in_subprocessr
  r/   r)   r&   rÇ   rÇ   1  sv   € € € € € ð)6ð )6ð )6ðVBð Bð Bð	Bð 	Bð 	Bð&ð &ð &ð. Ô$ð%ð %ñ %Ô$ð%ð %ð %r)   rÇ   c                   óp   — e Zd ZdZd„ Z ej        d¦  «        d„ ¦   «         Zee	d„ ¦   «         ¦   «         Z
dS )ÚTestRefCtPruningaÎ  
define i32 @"MyFunction"(i8** noalias captures(none) %retptr, { i8*, i32 }** noalias captures(none) %excinfo, i8* noalias captures(none) 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* captures(none) readnone %arg.xs.1, i64 %arg.xs.2, i64 %arg.xs.3, double* captures(none) readonly %arg.xs.4, i64 %arg.xs.5.0, i64 %arg.xs.6.0, i8* %arg.ys.0, i8* captures(none) readnone %arg.ys.1, i64 %arg.ys.2, i64 %arg.ys.3, double* captures(none) readonly %arg.ys.4, i64 %arg.ys.5.0, i64 %arg.ys.6.0, i8* %arg.aggs_and_cols.0.0, i8* captures(none) readnone %arg.aggs_and_cols.0.1, i64 %arg.aggs_and_cols.0.2, i64 %arg.aggs_and_cols.0.3, i32* captures(none) %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                 óX  — | j         }t          |                     ¦   «         ¦  «        }d„ |D ¦   «         }d„ |D ¦   «         }t          j        |¦  «        }t          |                     ¦   «         ¦  «        }d„ |D ¦   «         }d„ |D ¦   «         }|                      ||¦  «         |                      ||¦  «         t          |¦  «        t          |¦  «        z
  }	t          |¦  «        t          |¦  «        z
  }
|	|
z  }|                      ||	|
z  ¦  «         d                     |¦  «        }dD ]-}d 	                    |¦  «        }|  
                    ||¦  «         Œ.|                      t          t          |                     ¦   «         ¦  «        ¦  «        t          |¦  «        ¦  «         d S )Nc                 ó   — g | ]}d |v ¯|‘Œ	S ©Ú
NRT_increfr/   ©Ú.0Úlns     r&   ú
<listcomp>zDTestRefCtPruning.test_refct_pruning_op_recognize.<locals>.<listcomp>ó  ó"   € ÐIÐIÐI °lÀbÐ6HÐ6H˜"Ð6HÐ6HÐ6Hr)   c                 ó   — g | ]}d |v ¯|‘Œ	S ©Ú
NRT_decrefr/   r  s     r&   r  zDTestRefCtPruning.test_refct_pruning_op_recognize.<locals>.<listcomp>ô  r  r)   c                 ó   — g | ]}d |v ¯|‘Œ	S r  r/   r  s     r&   r  zDTestRefCtPruning.test_refct_pruning_op_recognize.<locals>.<listcomp>ù  ó"   € ÐIÐIÐI °lÀbÐ6HÐ6H˜Ð6HÐ6HÐ6Hr)   c                 ó   — g | ]}d |v ¯|‘Œ	S r  r/   r  s     r&   r  zDTestRefCtPruning.test_refct_pruning_op_recognize.<locals>.<listcomp>ú  r  r)   ú
)r    rR   é   é   é   z	; GONE {})Úsample_llvm_irÚlistÚ
splitlinesr   Ú_remove_redundant_nrt_refctÚassertNotEqualÚsetrS   ÚjoinÚformatr;   rù   )r%   Úinput_irÚinput_linesÚ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Ô0Ñ1Ô1ˆØIÐI {ÐIÑIÔIˆØIÐI {ÐIÑIÔIˆõ Ô6°xÑ@Ô@ˆ	Ý˜I×0Ò0Ñ2Ô2Ñ3Ô3ˆØIÐI lÐIÑIÔIˆØIÐI lÐIÑIÔIˆð 	×Ò˜N¨MÑ:Ô:Ð:Ø×Ò˜N¨MÑ:Ô:Ð:å˜^Ñ,Ô,­s°=Ñ/AÔ/AÑAˆÝ˜^Ñ,Ô,­s°=Ñ/AÔ/AÑAˆð " NÑ2ˆØ×Ò˜ >°NÑ#BÑCÔCÐCØ—y’y Ñ*Ô*ˆð !ð 	.ð 	.ˆAØ×%Ò% aÑ(Ô(ˆDØ�MŠM˜$ Ñ-Ô-Ð-Ð-à×Ò��T ,×"9Ò"9Ñ";Ô";Ñ<Ô<Ñ=Ô=½sÀ8¹}¼}ÑMÔMÐMÐMÐMr)   z3Pass removed as it was buggy. Re-enable when fixed.c                 ó¶  ‡‡‡— t           d„ ¦   «         Št           d„ ¦   «         Št           ˆˆfd„¦   «         Št          d¬¦  «        ˆfd„¦   «         }|                     d¦  «         t          |                     |j        d         ¦  «        ¦  «        }t          t          j        d	|¦  «        ¦  «        }|                      t          |¦  «        d¦  «         d
S )ztestcase from #2350c                 óV   — t          j        |¦  «        s||| fxx         dz  cc<   d S d S r   ©r~   Úisnan©rÍ   rÎ   ÚaggÚfields       r&   Ú_append_non_nazITestRefCtPruning.test_refct_pruning_with_branches.<locals>._append_non_na  s9   € å”8˜E‘?”?ð Ø�A�q�D�	�	”	˜Q‘�	�	‘	�	�	ðð r)   c                 ó    — t          j        |¦  «        s9t          j        ||| f         ¦  «        r	|||| f<   d S ||| fxx         |z  cc<   d S d S r²   r9  r;  s       r&   Ú_appendzBTestRefCtPruning.test_refct_pruning_with_branches.<locals>._append  se   € å”8˜E‘?”?ð 'Ý”8˜C  1 œIÑ&Ô&ð 'Ø %�C˜˜1˜‘I�I�Ià˜˜1˜�I�I”I Ñ&�I�I‘I�I�Ið	'ð 'r)   c                 ó@   •—  ‰| |||¦  «          ‰| |||¦  «         d S r²   r/   )rÍ   rÎ   r<  r=  r@  r>  s       €€r&   ÚappendzATestRefCtPruning.test_refct_pruning_with_branches.<locals>.append  s5   ø€ àˆN˜1˜a  eÑ,Ô,Ð,ØˆG�A�q˜#˜uÑ%Ô%Ð%Ð%Ð%r)   T)Úno_cpython_wrapperc                 ó˜   •— t          | j        d         ¦  «        D ]-}t          | j        d         ¦  «        D ]} ‰||| |¦  «         ŒŒ.d S )Nr   r    )r^   r{   )rŠ   r=  r‰   ÚjrB  s       €r&   ÚextendzATestRefCtPruning.test_refct_pruning_with_branches.<locals>.extend&  se   ø€ å˜3œ9 Qœ<Ñ(Ô(ð -ð -�Ý˜sœy¨œ|Ñ,Ô,ð -ð -�AØ�F˜1˜a  eÑ,Ô,Ð,Ð,ð-ð-ð -r)   z(f4[:,::1], f4)r   z!(NRT_incref|NRT_decref)\([^\)]+\)N)
r   Úcompiler<   Úinspect_llvmÚ
signaturesr"  ÚreÚfinditerrS   rù   )r%   rF  ÚllvmirÚrefopsr@  r>  rB  s       @@@r&   Ú test_refct_pruning_with_branchesz1TestRefCtPruning.test_refct_pruning_with_branches  s  øøø€ õ 
ð	ð 	ñ 
Œð	õ 
ð	'ð 	'ñ 
Œð	'õ 
ð	&ð 	&ð 	&ð 	&ð 	&ñ 
Œð	&õ 
 Ð	&Ñ	&Ô	&ð	-ð 	-ð 	-ð 	-ñ 
'Ô	&ð	-ð 	�ŠÐ(Ñ)Ô)Ð)õ �V×(Ò(¨Ô):¸1Ô)=Ñ>Ô>Ñ?Ô?ˆÝ•b”kÐ"FÈÑOÔOÑPÔPˆØ×Ò�˜V™œ aÑ(Ô(Ð(Ð(Ð(r)   c                 ó  ‡— t          j        ¦   «          t          j        ¦   «          t          j        ¦   «          t          d„ ¦   «         Št          dg¦  «        ˆfd„¦   «         }|                       |d¦  «        d¦  «         dS )ztThe InlineAsm class from llvmlite.ir has no 'name' attr the refcount
        pruning pass should be tolerant to thisc                 ój   — d„ }t          t          j        t          j        t          j        ¦  «        |fS )Nc                 ó  — |\  }}t          j        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        g¦  «        }|                     |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¥b¤j°¡n¤nµr´zÀ"±~´~Ý79´zÀ"±~´~ð7Gñ Hô H�à—k’k #Ð'@À)Ø#(¨% .°yØ.3ð "ñ 5ô 5�õ *¨%°¸#¼/È3ÑOÔOÐOr)   )r   r   ræ   )ÚtyctxrÍ   rÎ   ra  s       r&   Úbarz-TestRefCtPruning.test_inline_asm.<locals>.bar=  s3   € ðPð Pð Põ �Uœ[­%¬+µu´{ÑCÔCÀWÐLÐLr)   zint32(int32)c                 ó*   •— | dz  }  ‰| d¦  «        }|S )Nr    rR   r/   )rÍ   rî   rc  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  rc  s     @r&   Útest_inline_asmz TestRefCtPruning.test_inline_asm4  s¥   ø€ õ
 	Ô%Ñ'Ô'Ð'ÝÔ)Ñ+Ô+Ð+ÝÔ(Ñ*Ô*Ð*å	ð		Mð 		Mñ 
Œð		Mõ 
ˆ~ÐÑ	Ô	ð	ð 	ð 	ð 	ñ 
 Ô	ð	ð
 	×Ò˜˜˜R™œ "Ñ%Ô%Ð%Ð%Ð%r)   N)r,   r-   r.   r!  r6  ÚunittestÚskiprN  Ú
linux_onlyÚx86_onlyrj  r/   r)   r&   r  r  ¦  s   € € € € € ðF€NðPNð Nð Nð> €X„]ÐHÑIÔIð")ð ")ñ JÔIð")ðH Øð&ð &ñ „Xñ „Zð&ð &ð &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                 ón   •— t           j         t          t          | ¦  «                             ¦   «          d S r²   )r   rK   rL   rp  rM   rN   s    €r&   rM   zTestNrtExternalCFFI.setUpV  s/   ø€ åÔ!Ð!ÝÕ! 4Ñ(Ô(×.Ò.Ñ0Ô0Ð0Ð0Ð0r)   c                 óô  — ddl m}  |¦   «         }|                     ||t          ¦   «         g¬¦  «         |                     |¦  «         t          d                     |¦  «        ¦  «        }|                     |¬¦  «         t          j	         
                    |¦  «         	 t          |¦  «        }t          j	                             |¦  «         n$# t          j	                             |¦  «         w xY w||fS )Nr   ©ÚFFI)Úinclude_dirszcffi_test_{})Útmpdir)Úcffirt  Ú
set_sourcer   Úcdefr   r(  rG  Úsysr¾   rB  r   Úremove)r%   rT  Úsourcery  rt  Úffirv  Úmods           r&   Úcompile_cffi_modulez'TestNrtExternalCFFI.compile_cffi_module[  sÜ   € ØÐÐÐÐÐàˆc‰eŒeˆØ�Š�t˜Vµ<±>´>Ð2BˆÑCÔCÐCØ�Š�‰ŒˆÝ × 5Ò 5°dÑ ;Ô ;Ñ<Ô<ˆØ�Š˜6ˆÑ"Ô"Ð"ÝŒ�Š˜ÑÔÐð	$Ý  Ñ&Ô&ˆCåŒH�OŠO˜FÑ#Ô#Ð#Ð#ø�CŒH�OŠO˜FÑ#Ô#Ð#Ð#øøøà�Cˆxˆs   Â#C Ã!C3c                 ó†   — ddl m}  |¦   «         }|                     dt          j        d         ¦  «        } |¦   «         }|S )Nr   rs  zvoid* (*)()Úget_api)rw  rt  rt   r   Ú	c_helpers)r%   rt  r}  Únrt_get_apiÚtables        r&   Úget_nrt_api_tablez%TestNrtExternalCFFI.get_nrt_api_tablek  sJ   € ØÐÐÐÐÐàˆc‰eŒeˆØ—h’h˜}­kÔ.CÀIÔ.NÑOÔOˆØ�‘”ˆØˆr)   c                 óB  — d                      | j        j        ¦  «        }d}d}|                      |||¦  «        \  }}|                      |j        j        d¦  «         |                      ¦   «         }|j                             |¦  «        }|                      |j        j        d¦  «         t          | 
                    d|¦  «        ¦  «        }t          j        |¦  «        }	|                      |	j        d¦  «         ~	|                      |j        j        d¦  «         d S )	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,   r  rS   ÚlibÚstatusr…  Útest_nrt_apiÚintrt   r	   ÚMemInforT   )
r%   rT  r|  ry  r}  r~  r„  ÚoutÚmi_addrrY   s
             r&   Útest_manage_memoryz&TestNrtExternalCFFI.test_manage_memorys  s  € Ø&×-Ò-¨d¬nÔ.EÑFÔFˆðˆð(ˆð
 ×+Ò+¨D°&¸$Ñ?Ô?‰ˆˆSà×Ò˜œœ¨Ñ+Ô+Ð+Ø×&Ò&Ñ(Ô(ˆØŒg×"Ò" 5Ñ)Ô)ˆà×Ò˜œœ¨Ñ1Ô1Ð1Ý�c—h’h˜x¨Ñ-Ô-Ñ.Ô.ˆÝŒ[˜Ñ!Ô!ˆØ×Ò˜œ aÑ(Ô(Ð(Øà×Ò˜œœ¨Ñ0Ô0Ð0Ð0Ð0r)   c                 óÖ  — d                      | j        j        ¦  «        }d}d}|                      |||¦  «        \  }}|                      ¦   «         }dt          j        t
          j        ¦  «        j        z  }|j	         
                    ||¦  «        }t          |                     d|¦  «        ¦  «        }	t          j        |	¦  «        }
|                      |
j        d¦  «         |                     |                     d                      |¦  «        |
j        ¦  «        ¦  «        }t          j        dt
          j        |¬	¦  «        }t
          j                             |g d
¢¦  «         d S )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,   r  r…  r~   rz   Úintprk   r‡  r‰  rŠ  rt   r	   r‹  rS   rT   r|   rd   r‚   rƒ   r„   )r%   rT  r|  ry  r}  r~  r„  ÚnumbytesrŒ  r�  rY   r|   rŠ   s                r&   Útest_allocatez!TestNrtExternalCFFI.test_allocateœ  s2  € Ø!×(Ò(¨¬Ô)@ÑAÔAˆðˆð :ˆØ×+Ò+¨D°&¸$Ñ?Ô?‰ˆˆSà×&Ò&Ñ(Ô(ˆà•r”x¥¤Ñ(Ô(Ô1Ñ1ˆØŒg×"Ò" 5¨(Ñ3Ô3ˆå�c—h’h˜x¨Ñ-Ô-Ñ.Ô.ˆÝŒ[˜Ñ!Ô!ˆØ×Ò˜œ aÑ(Ô(Ð(à—’˜CŸHšH [×%7Ò%7¸Ñ%AÔ%AÀ2Ä7ÑKÔKÑLÔLˆÝŒj˜t­2¬7¸6ÐBÑBÔBˆÝ
Œ
×Ò Ð%:Ð%:Ð%:Ñ;Ô;Ð;Ð;Ð;r)   c                 óð   — ddl m} t          d„ ¦   «         } |¦   «         }t          |                     d|                      ¦   «         ¦  «        ¦  «        } |¦   «         }|                      ||¦  «         d S )Nr   rs  c                  ó   — t          ¦   «         S r²   r   r/   r)   r&   r‰  z6TestNrtExternalCFFI.test_get_api.<locals>.test_nrt_api¿  s   € å‘=”=Ð r)   r‘   )rw  rt  r   rŠ  rt   r…  rS   )r%   rt  r‰  r}  r  rà   s         r&   Útest_get_apiz TestNrtExternalCFFI.test_get_api¼  sˆ   € ØÐÐÐÐÐå	ð	!ð 	!ñ 
Œð	!ð ˆc‰eŒeˆÝ�S—X’X˜h¨×(>Ò(>Ñ(@Ô(@ÑAÔAÑBÔBˆØˆl‰nŒnˆØ×Ò˜ Ñ%Ô%Ð%Ð%Ð%r)   )r,   r-   r.   rE   rM   r  r…  rŽ  r’  r•  rš   r›   s   @r&   rp  rp  R  s�   ø€ € € € € ðð ð1ð 1ð 1ð 1ð 1ð
ð ð ð ð ð ð'1ð '1ð '1ðR<ð <ð <ð@
&ð 
&ð 
&ð 
&ð 
&ð 
&ð 
&r)   rp  c                   óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚTestNrtStatisticsc                 ó6   — t          j        ¦   «         | _        d S r²   )r   Úmemsys_stats_enabledÚ_TestNrtStatistics__stats_stater$   s    r&   rM   zTestNrtStatistics.setUpË  s   € å(Ô=Ñ?Ô?ˆÔÐÐr)   c                 ód   — | j         rt          j        ¦   «          d S t          j        ¦   «          d S r²   )rš  r   Úmemsys_enable_statsÚmemsys_disable_statsr$   s    r&   ÚtearDownzTestNrtStatistics.tearDownÏ  s7   € àÔð 	/ÝÔ+Ñ-Ô-Ð-Ð-Ð-åÔ,Ñ.Ô.Ð.Ð.Ð.r)   c                 ór   — d}t           j                             ¦   «         }d|d<   t          ||¬¦  «         d S )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Ö  s@   € ðˆõ8 Œj�oŠoÑÔˆØ!$ˆÐÑÝ˜# 3Ð'Ñ'Ô'Ð'Ð'Ð'r)   c                 ó,   — d}t          ||¬¦  «         d S )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                 óv   — t           j                             ¦   «         }d|d<   |                      |¦  «         d S )NÚ0r¡  )r½   r¤  r¥  r©  ©r%   r£  s     r&   Útest_stats_env_var_explicit_offz1TestNrtStatistics.test_stats_env_var_explicit_off  s8   € åŒj�oŠoÑÔˆØ!$ˆÐÑØ×Ò˜sÑ#Ô#Ð#Ð#Ð#r)   c                 ó˜   — t           j                             ¦   «         }|                     dd ¦  «         |                      |¦  «         d S )Nr¡  )r½   r¤  r¥  Úpopr©  r¬  s     r&   Útest_stats_env_var_default_offz0TestNrtStatistics.test_stats_env_var_default_off  sD   € õ Œj�oŠoÑÔˆØ�ŠÐ! 4Ñ(Ô(Ð(Ø×Ò˜sÑ#Ô#Ð#Ð#Ð#r)   c                 ó’  — t           d„ ¦   «         }t          j        ¦   «          |                      t          j        ¦   «         ¦  «         t          d¦  «        D ]í}t          j        ¦   «         }t          j        ¦   «          |  	                    t          j        ¦   «         ¦  «          |¦   «          t          j        ¦   «          |                      t          j        ¦   «         ¦  «         t          j        ¦   «         } |¦   «          t          j        ¦   «         }|  
                    ||¦  «         |                      ||¦  «         Œîd S )Nc                  ód   — 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˜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Ñ:Ô:Ñ;Ô;Ð;å�q‘”ð 	.ð 	.ˆAåÔ0Ñ2Ô2ˆGåÔ,Ñ.Ô.Ð.à×Ò�[Ô=Ñ?Ô?Ñ@Ô@Ð@àˆC‰EŒEˆEåÔ+Ñ-Ô-Ð-à�OŠO�KÔ<Ñ>Ô>Ñ?Ô?Ð?åÔ0Ñ2Ô2ˆGàˆC‰EŒEˆEåÔ0Ñ2Ô2ˆGà×Ò˜W gÑ.Ô.Ð.à�OŠO˜G WÑ-Ô-Ð-Ð-ð-	.ð 	.r)   c                 óR  — t          j        ¦   «          |                      t          j        ¦   «         ¦  «         |                      t
          ¦  «        5 }t          j        ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      dt          |j
        ¦  «        ¦  «         d S )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<  sÍ   € õ 	Ô(Ñ*Ô*Ð*Ø×Ò�Ô9Ñ;Ô;Ñ<Ô<Ð<à×Ò�|Ñ,Ô,ð 	)°ÝÔ&Ñ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	�ŠÐ/µ°VÔ5EÑ1FÔ1FÑGÔGÐGÐGÐGs   ÁA4Á4A8Á;A8c                 óÚ  — d}|D ]å}t          t          d|› �¦  «        }|                      |¬¦  «        5  t          j        ¦   «          |                      t          j        ¦   «         ¦  «         |                      t          ¦  «        5 } |¦   «          d d d ¦  «         n# 1 swxY w Y   |                      dt          |j
        ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   Œæd S )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  sx  € ð EÐØ%ð 	Pð 	PˆDÝ ¥Ð.HÀ$Ð.HÐ.HÑIÔIˆJØ—’¨�Ñ4Ô4ð Pð PåÔ0Ñ2Ô2Ð2Ø× Ò ¥Ô!AÑ!CÔ!CÑDÔDÐDØ×&Ò&¥|Ñ4Ô4ð !¸Ø�J‘L”L�Lð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !à—’Ð7½¸VÔ=MÑ9NÔ9NÑOÔOÐOðPð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð Pøð	Pð 	Ps6   µACÂ	B ÂCÂ B$Â$CÂ'B$Â(+CÃC#	Ã&C#	N)r,   r-   r.   rM   rž  r§  r©  r­  r°  r¸  r»  rÅ  r/   r)   r&   r—  r—  É  s¨   € € € € € ð@ð @ð @ð/ð /ð /ð (ð  (ð  (ðD(ð (ð (ð&$ð $ð $ð$ð $ð $ð".ð ".ð ".ðH
Hð 
Hð 
HðPð Pð Pð Pð Pr)   r—  Ú__main__)9rÊ   r½   Úplatformrz  rJ  Únumpyr~   r	  r   Ú
numba.corer   Únumba.core.runtimer   r   r   r	   Únumba.core.extendingr
   r   Únumba.core.typingr   Únumba.core.imputilsr   Úllvmliter   Úllvmlite.bindingÚbindingrf  Únumba.core.unsafe.nrtr   Únumba.tests.supportr   r   r   r   r   r   r   Únumba.core.registryr   rk  ÚskipIfÚ
startswithrm  Úmachinern  Úobjectr   r1   rH   r�   rÇ   r  rp  r—  r,   Úmainr/   r)   r&   ú<module>rÙ     sº  ðØ €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø 	€	€	€	à Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð 9Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -ðFð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð +Ð *Ð *Ð *Ð *Ð *Ø €€€ð ˆXŒ_ ¤×!8Ò!8¸Ñ!AÔ!AÐAØ.ñ0ô 0€
àˆ8Œ?Ð+˜8Ô+Ñ-Ô-Ð5GÐGØ*ñ,ô ,€ðð ð ð ð ˆFñ ô ð ð#ð #ð #ð #ð # 8Ô#4ñ #ô #ð #ð4e6ð e6ð e6ð e6ð e6�XÔ&ñ e6ô e6ð e6ðP=-ð =-ð =-ð =-ð =-�hÔ'ñ =-ô =-ð =-ð@r%ð r%ð r%ð r%ð r%�8ñ r%ô r%ð r%ðji&ð i&ð i&ð i&ð i&�xÔ(ñ i&ô i&ð i&ðX ðs&ð s&ð s&ð s&ð s&Ð-¨xñ s&ô s&ñ Ôðs&ðlKPð KPð KPð KPð KP˜ñ KPô KPð KPð\ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr)   