§
    ƒÛg  ã                   ó  — 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Zd dlZd dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZ e j        j        Ze j        e_        g e_        ej        dk    r(e j        j        j        Ze j        ge_        de_        dZnH e j        e j          !                    d¦  «        ¦  «        j"        Ze j        ge_        e j#        e_        d	Zd
„ Z$dZ%d„ Z&d„ Z' G d„ de¦  «        Z(e)dk    r ej*        ¦   «          dS dS )é    N)Úcompile_isolatedÚFlags)Újit)Úerrors)ÚTestCaseÚtagÚnté   Úciè  c                 ó`   — |D ]*}t          dt          z  ¦  «         t          ¦   «         | |<   Œ+d S )Né
   )ÚsleepÚsleep_factorÚPyThread_get_thread_ident©ÚaÚindicesÚidxs      úJ/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_gil.pyÚfr   #   sA   € ð
 ð -ð -ˆåˆb•<ÑÑ Ô Ð Ý*Ñ,Ô,ˆˆ#‰ˆð-ð -ó    zvoid(int64[:], intp[:])c                 ó|   — t          ¦   «          |D ]*}t          dt          z  ¦  «         t          ¦   «         | |<   Œ+dS )z/
    Same as f(), but inside a lifted loop
    r   N)Úobjectr   r   r   r   s      r   Úlifted_fr   /   sJ   € õ �H„H€HØð -ð -ˆåˆb•<ÑÑ Ô Ð Ý*Ñ,Ô,ˆˆ#‰ˆð-ð -r   c                 ó|   — |D ]8}t          dt          z  ¦  «         t          ¦   «          t          ¦   «         | |<   Œ9dS )z)
    Same as f(), but in object mode
    r   N)r   r   r   r   r   s      r   Úobject_fr   9   sJ   € ð ð -ð -ˆåˆb•<ÑÑ Ô Ð Ý‰ŒˆÝ*Ñ,Ô,ˆˆ#‰ˆð	-ð -r   c                   óP   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZdS )ÚTestGILReleasec                 óB   — t          j        |t           j        ¬¦  «        S )N©Údtype)ÚnpÚarangeÚint64)ÚselfÚ	n_memberss     r   Úmake_test_arrayzTestGILRelease.make_test_arrayF   s   € ÝŒy˜­"¬(Ð3Ñ3Ô3Ð3r   c                 ó  — g } ||                       d¦  «        t          j        dt          j        ¬¦  «        ¦  «         |                       d¦  «        }t	          |¦  «        D ]s}t          j        |j        t          j        ¬¦  «        }t          j                             |¦  «         t          j	        |||f¬¦  «        }| 
                    |¦  «         Œt|D ]}|                     ¦   «          Œ|D ]}|                     ¦   «          Œ|S )Nr
   r    é2   )ÚtargetÚargs)r'   r"   r#   ÚintpÚrangeÚsizeÚrandomÚshuffleÚ	threadingÚThreadÚappendÚstartÚjoin)r%   ÚfuncÚ	n_threadsÚthreadsÚarrÚir   Úts           r   Úrun_in_threadszTestGILRelease.run_in_threadsI   s  € àˆð 	ˆˆT×!Ò! !Ñ$Ô$¥b¤i°½¼Ð&AÑ&AÔ&AÑBÔBÐBØ×"Ò" 2Ñ&Ô&ˆÝ�yÑ!Ô!ð 	ð 	ˆAõ ”i ¤µ´Ð8Ñ8Ô8ˆGÝŒI×Ò˜gÑ&Ô&Ð&ÝÔ ¨°C¸°>ÐBÑBÔBˆAØ�NŠN˜1ÑÔÐÐØð 	ð 	ˆAØ�GŠG‰IŒIˆIˆIØð 	ð 	ˆAØ�FŠF‰HŒHˆHˆHØˆ
r   c                 óš   — |                       |d¬¦  «        }t          |¦  «        }|                      t          |¦  «        d|¦  «         d S )Né   )r7   r
   )r<   ÚsetÚassertEqualÚlen)r%   r6   r9   Údistincts       r   Úcheck_gil_heldzTestGILRelease.check_gil_held]   sI   € Ø×!Ò! $°!Ð!Ñ4Ô4ˆÝ�s‘8”8ˆØ×Ò�˜X™œ¨¨8Ñ4Ô4Ð4Ð4Ð4r   c                 óÚ   — dD ]g}|                       ||¦  «        }t          |¦  «        }	 |                      t          |¦  «        d|¦  «          d S # t          $ r}|}Y d }~Œ`d }~ww xY w|‚)N)r>   é   é    r
   )r<   r?   ÚassertGreaterrA   ÚAssertionError)r%   r6   r7   r9   rB   ÚeÚfailures          r   Úcheck_gil_releasedz!TestGILRelease.check_gil_releasedb   s–   € Ø$ð 
	ð 
	ˆIð ×%Ò% d¨IÑ6Ô6ˆCÝ˜3‘x”xˆHðØ×"Ò"¥3 x¡=¤=°!°XÑ>Ô>Ð>ð ��øõ "ð ð ð Ø������øøøøðøøøð ˆs   «$AÁ
A(ÁA#Á#A(c                 óx   —  t          t          d¬¦  «        t          ¦  «        }|                      |¦  «         dS )zu
        Test the GIL is held by default, by checking serialized runs
        produce deterministic results.
        T©ÚnopythonN©r   Úf_sigr   rC   ©r%   Úcfuncs     r   Útest_gil_heldzTestGILRelease.test_gil_heldp   s:   € ð
 *••E DÐ)Ñ)Ô)­!Ñ,Ô,ˆØ×Ò˜EÑ"Ô"Ð"Ð"Ð"r   c                 óz   —  t          t          dd¬¦  «        t          ¦  «        }|                      |¦  «         dS )zj
        Test releasing the GIL, by checking parallel runs produce
        unpredictable results.
        T©rN   ÚnogilN©r   rP   r   rK   rQ   s     r   Útest_gil_releasedz TestGILRelease.test_gil_releasedx   s<   € ð
 6••E D°Ð5Ñ5Ô5µaÑ8Ô8ˆØ×Ò Ñ&Ô&Ð&Ð&Ð&r   c                 óx   —  t          t          d¬¦  «        t          ¦  «        }|                      |¦  «         dS )zz
        Test the GIL can by released by a lifted loop even though the
        surrounding code uses object mode.
        T©rV   N)r   rP   r   rK   rQ   s     r   Ú$test_gil_released_inside_lifted_loopz3TestGILRelease.test_gil_released_inside_lifted_loop€   s:   € ð
 '••E Ð&Ñ&Ô&¥xÑ0Ô0ˆØ×Ò Ñ&Ô&Ð&Ð&Ð&r   c                 ó¾   ‡—  t          t          d¬¦  «        t          ¦  «        Št          t          dd¬¦  «        ˆfd„¦   «         }|                      |¦  «         dS )zh
        Releasing the GIL in the caller is sufficient to have it
        released in a callee.
        TrM   rU   c                 ó    •—  ‰| |¦  «         d S ©N© ©r   r:   Ú
compiled_fs     €r   Úcallerz:TestGILRelease.test_gil_released_by_caller.<locals>.callerŽ   ó   ø€ àˆJ�q˜!ÑÔÐÐÐr   NrW   ©r%   rb   ra   s     @r   Útest_gil_released_by_callerz*TestGILRelease.test_gil_released_by_callerˆ   sn   ø€ ð
 /•S�¨Ð.Ñ.Ô.­qÑ1Ô1ˆ
Ý	�U˜T¨Ð	.Ñ	.Ô	.ð	ð 	ð 	ð 	ñ 
/Ô	.ð	à×Ò Ñ'Ô'Ð'Ð'Ð'r   c                 óÀ   ‡—  t          t          dd¬¦  «        t          ¦  «        Št          t          dd¬¦  «        ˆfd„¦   «         }|                      |¦  «         dS )zR
        Same, but with both caller and callee asking to release the GIL.
        TrU   c                 ó    •—  ‰| |¦  «         d S r^   r_   r`   s     €r   rb   zETestGILRelease.test_gil_released_by_caller_and_callee.<locals>.caller˜   rc   r   NrW   rd   s     @r   Ú&test_gil_released_by_caller_and_calleez5TestGILRelease.test_gil_released_by_caller_and_callee“   sp   ø€ ð ;•S�¨°TÐ:Ñ:Ô:½1Ñ=Ô=ˆ
Ý	�U˜T¨Ð	.Ñ	.Ô	.ð	ð 	ð 	ð 	ñ 
/Ô	.ð	à×Ò Ñ'Ô'Ð'Ð'Ð'r   c                 ó¾   ‡—  t          t          dd¬¦  «        t          ¦  «        Št          t          d¬¦  «        ˆfd„¦   «         }|                      |¦  «         dS )zP
        When only the callee asks to release the GIL, it gets ignored.
        TrU   rM   c                 ó    •—  ‰| |¦  «         d S r^   r_   r`   s     €r   rb   z9TestGILRelease.test_gil_ignored_by_callee.<locals>.caller¢   rc   r   NrO   rd   s     @r   Útest_gil_ignored_by_calleez)TestGILRelease.test_gil_ignored_by_callee�   sn   ø€ ð ;•S�¨°TÐ:Ñ:Ô:½1Ñ=Ô=ˆ
Ý	�U˜TÐ	"Ñ	"Ô	"ð	ð 	ð 	ð 	ñ 
#Ô	"ð	à×Ò˜FÑ#Ô#Ð#Ð#Ð#r   c                 ól  — t          j        d¬¦  «        5 }t          j        dt          j        ¦  «          t          t          d¬¦  «        t          ¦  «        }ddd¦  «         n# 1 swxY w Y   |                      t          d„ |D ¦   «         ¦  «        |¦  «         |  
                    |d¦  «         dS )za
        When the function is compiled in object mode, a warning is
        printed out.
        T)ÚrecordÚalwaysrZ   Nc              3   óh   K  — | ]-}|j         t          j        u od t          |j        ¦  «        v V — Œ.dS )z:Code running in object mode won't allow parallel executionN)Úcategoryr   ÚNumbaWarningÚstrÚmessage)Ú.0Úws     r   ú	<genexpr>z2TestGILRelease.test_object_mode.<locals>.<genexpr>¯   s[   è è € ð ,ð ,à !ð œJ­&Ô*=Ð=ð oØ \Õ`cÐdeÔdmÑ`nÔ`nÐ nð,ð ,ð ,ð ,ð ,ð ,r   é   )ÚwarningsÚcatch_warningsÚsimplefilterr   rq   r   rP   r   Ú
assertTrueÚanyr<   )r%   ÚwlistrR   s      r   Útest_object_modezTestGILRelease.test_object_mode§   sý   € õ
 Ô$¨DÐ1Ñ1Ô1ð 	5°UÝÔ! (­FÔ,?Ñ@Ô@Ð@Ø*•C� TÐ*Ñ*Ô*­8Ñ4Ô4ˆEð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð 	�Š�ð ,ð ,à%*ð,ñ ,ô ,ñ ,ô ,à-2ñ	4ô 	4ð 	4ð 	×Ò˜E 1Ñ%Ô%Ð%Ð%Ð%s   –AA&Á&A*Á-A*N)Ú__name__Ú
__module__Ú__qualname__r'   r<   rC   rK   rS   rX   r[   re   rh   rk   r~   r_   r   r   r   r   D   s¹   € € € € € ð4ð 4ð 4ðð ð ð(5ð 5ð 5ð
ð ð ð#ð #ð #ð'ð 'ð 'ð'ð 'ð 'ð	(ð 	(ð 	(ð(ð (ð (ð$ð $ð $ð&ð &ð &ð &ð &r   r   Ú__main__)+ÚctypesÚctypes.utilÚosÚsysr1   rx   Únumpyr"   ÚunittestÚnumba.core.compilerr   r   Únumbar   Ú
numba.corer   Únumba.tests.supportr   r   Ú	pythonapir   Úc_longÚrestypeÚargtypesÚnameÚwindllÚkernel32ÚSleepr   Úc_uintr   ÚCDLLÚutilÚfind_libraryÚusleepÚc_intr   rP   r   r   r   r   Úmainr_   r   r   ú<module>rœ      sÉ  ðØ €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€à Ð Ð Ð à €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð #Ô,ÔFÐ Ø$*¤MÐ Ô !Ø%'Ð Ô "ð „7ˆd‚?€?ØŒMÔ"Ô(€EØ”m�_€E„NØ€E„MØ€L€LàˆFŒK˜œ×0Ò0°Ñ5Ô5Ñ6Ô6Ô=€EØ”m�_€E„NØ”L€E„MØ€Lð-ð -ð -ð 	"€ð-ð -ð -ð-ð -ð -ðo&ð o&ð o&ð o&ð o&�Xñ o&ô o&ð o&ðd ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   