§
    ƒÛgXu  ã                   óø  — 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 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¦   «         Z,de,_         e+j-        ej         .                    d¦  «         d¦  «        Z/ e+j-         ej0        ¦   «         dvd¦  «        Z1 G d„ de2¦  «        Z3 G d„ de+j#        ¦  «        Z4 G d„ de+j#        ¦  «        Z5 G d„ de+j#        ¦  «        Z6 G d„ de#¦  «        Z7 G d„ de+j#        ¦  «        Z8e' G d„ de"e#¦  «        ¦   «         Z9 G d „ d!e#¦  «        Z:e;d"k    r e+j<        ¦   «          dS dS )#é    N©Únjit)Útypes)Úcompile_isolatedÚFlags)Ú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_targetTÚ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    úJ/granary/edev/quantum/lib/python3.11/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 )Nr1   )r1   r1   )r1   )Ú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_fail9   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/   r0   Ú__doc__Ú_numba_parallel_test_rF   r1   r+   r(   r3   r3   2   s5   € € € € € ðð ð "Ðð#ð #ð #ð #ð #r+   r3   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ÚsuperrJ   ÚsetUp©r'   Ú	__class__s    €r(   rO   zTestNrtMemInfo.setUpQ   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   r6   ÚrefcountÚacquireÚrelease)r'   ÚdÚaddrÚmis       r(   Útest_meminfo_refct_1z#TestNrtMemInfo.test_meminfo_refct_1X   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"   rS   éd   ée   r   )	r   rU   r%   r   r6   rV   ÚrangerW   rX   )r'   rY   rZ   r[   ÚctÚ_s         r(   Útest_meminfo_refct_2z#TestNrtMemInfo.test_meminfo_refct_2i   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"   rS   r   )r   rU   r%   r   r6   rV   Ú
memoryviewÚdataÚassertFalseÚreadonlyÚassertIsÚobjÚ
assertTrueÚc_contiguousÚitemsizeÚndim)r'   rY   rZ   r[   Úmviews        r(   Útest_fake_memoryviewz#TestNrtMemInfo.test_fake_memoryview|   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ÚbufferrT   )Úctypesrs   rt   ru   rv   Únpr|   Úuint32rm   r   r7   rf   r`   rU   Úcontentsre   Únbytesrg   rh   ri   rj   rk   rl   rn   ÚndarrayÚtestingÚassert_equalÚarangeÚsize)r'   rs   rt   ru   rv   r|   Úbytesizer[   rZ   Úc_arrÚiro   Ú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   rr   rw   Trx   r"   rz   r{   rT   )r   rs   rt   ru   rv   r€   r|   r�   rm   r   r7   rU   rV   rf   r`   r‚   r„   r…   r†   r‡   rˆ   )r'   rs   rt   ru   rv   r|   r‰   r[   rZ   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é   rT   ©TFrx   zRequested allocation of z bytes failed.)
r   Úsize_tÚmaxvalr9   ÚMemoryErrorr   r7   r=   r>   r?   )r'   rˆ   ÚpredrC   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’   rx   z,Cannot allocate a negative number of bytes: ú.)r9   Ú
ValueErrorr   r7   r=   r>   r?   )r'   rˆ   r–   rC   rE   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/   r0   rG   rO   r\   rc   rp   r�   r�   r   r—   r›   Ú__classcell__©rQ   s   @r(   rJ   rJ   L   s¹   ø€ € € € € ðð ð,ð ,ð ,ð ,ð ,ð)ð )ð )ð")ð )ð )ð&)ð )ð )ð,$ð $ð $ðRð ð ðH ð1ð 1ñ „]ð1ð6ð 6ð 6ð 6ð 6ð 6ð 6r+   rJ   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)ÚNr|   s   €€r(   Úalloc_nrt_memoryz7TestTracemalloc.test_snapshot.<locals>.alloc_nrt_memory  s   ø€ õ
 ”8˜A˜uÑ%Ô%Ð%r+   c                  ó   •—  ‰ ¦   «         S ©Nr1   ©r²   s   €r(   Úkeep_memoryz2TestTracemalloc.test_snapshot.<locals>.keep_memory  s   ø€ Ø#Ð#Ñ%Ô%Ð%r+   c                  ó   •—  ‰ ¦   «          d S r´   r1   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)rE   ztest_nrt.pyg{®Gáz„?)r€   Úint8r   Ú__code__Úco_firstlinenor­   ÚassertGreaterEqualrˆ   Ú
assertLessÚ	tracebackrU   ÚosÚpathÚbasenameÚfilenamer¡   )
r'   r¶   r¸   Úalloc_linenoÚdiffÚstatÚframer±   r²   r|   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/   r0   rG   r­   rÇ   r1   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 )NrT   )ÚmathÚsqrt)ÚvectorÚxÚys      r(   Úcalculate_2D_vector_magzNTestNRTIssue.test_issue_with_refct_op_pruning.<locals>.calculate_2D_vector_mag9  s'   € à‰DˆAˆqå”9˜Q !™V a¨1¡f™_Ñ-Ô-Ð-r+   c                 óˆ   •— t          j        dt           j        ¬¦  «        } ‰| ¦  «        }| \  }}||z  |d<   ||z  |d<   |S ©NrT   ©r|   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_vectorsK  sƒ   ø€ å!#¤¨;¸Ð*:Å"Ä*Ð!MÑ!MÔ!MÐå˜;Ñ'Ô'ð @ð @�Ø  œ�à$7Ð$7¸Ñ$?Ô$?Ð!à+<¸QÔ+?Ð" 1 a 4Ñ(Ø+<¸QÔ+?Ð" 1 a 4Ñ(Ð(à%Ð%r+   rw   rT   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_pruning5  sÏ   øø€ õ 
ð	.ð 	.ñ 
Œð	.õ
 
ð		%ð 		%ð 		%ð 		%ñ 
Œð		%õ 
ð	&ð 	&ð 	&ð 	&ñ 
Œð	&ð ˆÝ”y×'Ò'¨°aÐ(8Ñ9Ô9ˆØÐ ¨\Ñ:Ô:ˆØ$×,Ò,¨[¸,ÑGÔGˆå
Œ
×&Ò& x°Ñ5Ô5Ð5Ð5Ð5r+   c                 óh  — d„ }t          |d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Úint32r1   r+   r(   Úfz.TestNRTIssue.test_incref_after_cast.<locals>.fc  s   € Ø�œ ­"¬(Ð3Ñ3Ô3Ð3Ð3r+   r1   r"   ÚCy                rÔ   )
r   r   ÚTupleÚ
complex128ÚArrayrè   Úentry_pointÚassertPreciseEqualr€   rç   )r'   ré   ÚcresÚzrŒ   s        r(   Útest_incref_after_castz#TestNRTIssue.test_incref_after_cast`  s¬   € ð	4ð 	4ð 	4õ
    2Ý %¤­UÔ-=Ý-2¬[½¼ÀaÈÑ-MÔ-Mð-/ñ !0ô !0ñ"ô "ˆð
 ×!Ò!Ñ#Ô#‰ˆˆ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 )Nrw   rÔ   )r€   ÚonesrÕ   )ÚaÚbs     r(   ré   z5TestNRTIssue.test_refct_pruning_issue_1511.<locals>.fr  s?   € å”˜¥"¤*Ð-Ñ-Ô-ˆAÝ”˜¥"¤*Ð-Ñ-Ô-ˆAØ�a˜˜˜”d�7ˆNr+   rw   rÔ   )r   r€   r…   r†   rõ   rÕ   )r'   ré   rö   r÷   s       r(   Útest_refct_pruning_issue_1511z*TestNRTIssue.test_refct_pruning_issue_1511q  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>.udt}  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ß   rU   )r'   r  rö   Úexpectrâ   s        r(   Útest_refct_pruning_issue_1526z*TestNRTIssue.test_refct_pruning_issue_1526|  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é{   r1   r1   r+   r(   Úfooz8TestNRTIssue.test_no_nrt_on_njit_decoration.<locals>.foo�  s   € à�3r+   )Únumbar   rg   r   r;   rU   rß   rk   )r'   r   r  s      r(   Útest_no_nrt_on_njit_decorationz+TestNRTIssue.test_no_nrt_on_njit_decoration“  s£   € ð 	ÐÐÐÐÐð 	×Ò�œÑ%Ô%Ð%ð 
ð	ð 	ñ 
Œð	ð 	×Ò�œÑ%Ô%Ð%ð 	×Ò˜˜™œ §¢¡¤Ñ.Ô.Ð.ð 	�Š�œÑ$Ô$Ð$Ð$Ð$r+   N)
r.   r/   r0   rä   rò   rø   r  r   Úrun_test_in_subprocessr  r1   r+   r(   rÉ   rÉ   4  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 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                 ó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_increfr1   ©Ú.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_decrefr1   r  s     r(   r  zDTestRefCtPruning.test_refct_pruning_op_recognize.<locals>.<listcomp>ú  r  r+   c                 ó   — g | ]}d |v ¯|‘Œ	S r  r1   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  r1   r  s     r(   r  zDTestRefCtPruning.test_refct_pruning_op_recognize.<locals>.<listcomp>   r  r+   ú
)r"   rT   é   é   é   z	; GONE {})Úsample_llvm_irÚlistÚ
splitlinesr	   Ú_remove_redundant_nrt_refctÚassertNotEqualÚsetrU   Ú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´   r<  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´   r1   )rÏ   rÐ   r?  r@  rC  rA  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‹   ÚjrE  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ÚfinditerrU   rü   )r'   rI  ÚllvmirÚrefopsrC  rA  rE  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                 ó4  ‡— t          j        ¦   «          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ÚsigrB   Úarg_0Úarg_1ÚftyÚmuls           r(   Úcodegenz>TestRefCtPruning.test_inline_asm.<locals>.bar.<locals>.codegenF  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Ð   rd  s       r(   Úbarz-TestRefCtPruning.test_inline_asm.<locals>.barD  s3   € ðPð Pð Põ �Uœ[­%¬+µu´{ÑCÔCÀWÐLÐLr+   zint32(int32)c                 ó*   •— | dz  }  ‰| d¦  «        }|S )Nr"   rT   r1   )rÏ   rñ   rf  s     €r(   r  z-TestRefCtPruning.test_inline_asm.<locals>.fooP  s    ø€ à�‰FˆAØ��A�q‘	”	ˆAØˆHr+   rw   é   N)ÚllvmrL   Úinitialize_native_targetÚinitialize_native_asmprinterÚinitialize_native_asmparserr   r   rU   )r'   r  rf  s     @r(   Útest_inline_asmz TestRefCtPruning.test_inline_asm:  s³   ø€ õ
 	ŒÑÔÐÝÔ%Ñ'Ô'Ð'ÝÔ)Ñ+Ô+Ð+ÝÔ(Ñ*Ô*Ð*å	ð		Mð 		Mñ 
Œð		Mõ 
ˆ~ÐÑ	Ô	ð	ð 	ð 	ð 	ñ 
 Ô	ð	ð
 	×Ò˜˜˜R™œ "Ñ%Ô%Ð%Ð%Ð%r+   N)r.   r/   r0   r$  r9  ÚunittestÚskiprQ  Ú
linux_onlyÚx86_onlyrm  r1   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   rM   rN   rs  rO   rP   s    €r(   rO   zTestNrtExternalCFFI.setUp]  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)Úcffirw  Ú
set_sourcer   Úcdefr   r+  rJ  ÚsysrÀ   rE  r   Úremove)r'   rW  Úsourcer|  rw  Úffiry  Úmods           r(   Úcompile_cffi_modulez'TestNrtExternalCFFI.compile_cffi_moduleb  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   rv  zvoid* (*)()Úget_api)rz  rw  rv   r
   Ú	c_helpers)r'   rw  r€  Únrt_get_apiÚtables        r(   Úget_nrt_api_tablez%TestNrtExternalCFFI.get_nrt_api_tabler  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+  rQ   r.   r‚  rU   ÚlibÚstatusrˆ  Útest_nrt_apiÚintrv   r   ÚMemInforV   )
r'   rW  r  r|  r€  r�  r‡  ÚoutÚmi_addrr[   s
             r(   Útest_manage_memoryz&TestNrtExternalCFFI.test_manage_memoryz  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}   r|   r~   )ií  i¼
  iï  )r+  rQ   r.   r‚  rˆ  r€   r|   Úintprm   rŠ  rŒ  r�  rv   r   rŽ  rU   rV   r~   rf   r„   r…   r†   )r'   rW  r  r|  r€  r�  r‡  Únumbytesr�  r�  r[   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   rv  c                  ó   — t          ¦   «         S r´   r   r1   r+   r(   rŒ  z6TestNrtExternalCFFI.test_get_api.<locals>.test_nrt_apiÆ  s   € å‘=”=Ð r+   r“   )rz  rw  r   r�  rv   rˆ  rU   )r'   rw  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/   r0   rG   rO   r‚  rˆ  r‘  r•  r˜  rœ   r�   s   @r(   rs  rs  Y  s�   ø€ € € € € ðð ð1ð 1ð 1ð 1ð 1ð
ð ð ð ð ð ð'1ð '1ð '1ðR<ð <ð <ð@
&ð 
&ð 
&ð 
&ð 
&ð 
&ð 
&r+   rs  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(   rO   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+   rT   )r   r
   rŸ  rk   rœ  r`   r   Úget_allocation_statsr   rg   rU   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   rg   rœ  r9   r:   r   r·  r=   r>   r?   )r'   rC   s     r(   Ú5test_rtsys_stats_query_raises_exception_when_disabledzGTestNrtStatistics.test_rtsys_stats_query_raises_exception_when_disabledC  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   rg   rœ  r9   r:   r=   r>   r?   )r'   Úmethod_variationsrA   rÅ  rC   s        r(   Ú<test_nrt_explicit_stats_query_raises_exception_when_disabledzNTestNrtStatistics.test_nrt_explicit_stats_query_raises_exception_when_disabledO  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/   r0   rO   r¡  rª  r¬  r°  r³  r»  r¾  rÈ  r1   r+   r(   rš  rš  Ð  s¨   € € € € € ð@ð @ð @ð/ð /ð /ð (ð  (ð  (ðD(ð (ð (ð&$ð $ð $ð$ð $ð $ð".ð ".ð ".ðH
Hð 
Hð 
HðPð Pð Pð Pð Pr+   rš  Ú__main__)=rÌ   r¿   Úplatformr}  rM  Únumpyr€   r  r   Ú
numba.corer   Únumba.core.compilerr   r   Únumba.core.runtimer   r	   r
   r   Únumba.core.extendingr   r   Únumba.core.typingr   Únumba.core.imputilsr   Úllvmliter   Úllvmlite.bindingÚbindingri  Únumba.core.unsafe.nrtr   Únumba.tests.supportr   r   r   r   r   r   r   Únumba.core.registryr   rn  Úenable_nrt_flagsÚskipIfÚ
startswithrp  Úmachinerq  Úobjectr   r3   rJ   rŸ   rÉ   r  rs  rš  r.   Úmainr1   r+   r(   ú<module>rÞ     så  ðØ €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø 	€	€	€	à Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð ð ð ð ð 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ð +Ð *Ð *Ð *Ð *Ð *Ø €€€à�5‘7”7Ð ØÐ Ô àˆ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Ô'ñ =-ô =-ð =-ð@u%ð u%ð u%ð u%ð u%�8ñ u%ô u%ð u%ðpj&ð j&ð j&ð j&ð j&�xÔ(ñ j&ô j&ð j&ðZ ð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+   