§
    2@Äj  ã                   ó  — 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
 d dlmZ d dlmZ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)Újit)Úerrors)ÚTestCaseÚtagÚskip_if_freethreadingÚnté   Úciè  c                 ó`   — |D ]*}t          dt          z  ¦  «         t          ¦   «         | |<   Œ+d S )Né
   )ÚsleepÚsleep_factorÚPyThread_get_thread_ident©ÚaÚindicesÚidxs      úEC:\Projects\Historical\venv\Lib\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   8   sJ   € ð ð -ð -ˆåˆb•<ÑÑ Ô Ð Ý‰ŒˆÝ*Ñ,Ô,ˆˆ#‰ˆð	-ð -r   c                   óp   — e Zd Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zd„ Z	d„ Z
d„ Zd	„ Ze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_arrayE   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_threadsH   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é   )r6   r	   )r;   ÚsetÚassertEqualÚlen)r$   r5   r8   Ú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>   ÚassertGreaterr@   ÚAssertionError)r$   r5   r6   r8   rA   ÚeÚfailures          r   Úcheck_gil_releasedz!TestGILRelease.check_gil_releaseda   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   rB   ©r$   Úcfuncs     r   Útest_gil_heldzTestGILRelease.test_gil_heldo   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©rM   ÚnogilN©r   rO   r   rJ   rP   s     r   Útest_gil_releasedz TestGILRelease.test_gil_releasedx   s<   € ð
 6••E D°Ð5Ñ5Ô5µaÑ8Ô8ˆØ×Ò Ñ&Ô&Ð&Ð&Ð&r   c                 óz   —  t          t          dd¬¦  «        t          ¦  «        }|                      |¦  «         dS )zz
        Test the GIL can by released by a lifted loop even though the
        surrounding code uses object mode.
        T©ÚforceobjrU   N)r   rO   r   rJ   rP   s     r   Ú$test_gil_released_inside_lifted_loopz3TestGILRelease.test_gil_released_inside_lifted_loop€   s<   € ð
 6••E D°Ð5Ñ5Ô5µhÑ?Ô?ˆØ×Ò Ñ&Ô&Ð&Ð&Ð&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.
        TrL   rT   c                 ó    •—  ‰| |¦  «         d S ©N© ©r   r9   Ú
compiled_fs     €r   Úcallerz:TestGILRelease.test_gil_released_by_caller.<locals>.callerŽ   ó   ø€ àˆJ�q˜!ÑÔÐÐÐr   NrV   ©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.
        TrT   c                 ó    •—  ‰| |¦  «         d S r^   r_   r`   s     €r   rb   zETestGILRelease.test_gil_released_by_caller_and_callee.<locals>.caller˜   rc   r   NrV   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.
        TrT   rL   c                 ó    •—  ‰| |¦  «         d S r^   r_   r`   s     €r   rb   z9TestGILRelease.test_gil_ignored_by_callee.<locals>.caller£   rc   r   NrN   rd   s     @r   Útest_gil_ignored_by_calleez)TestGILRelease.test_gil_ignored_by_callee�   sn   ø€ ð
 ;•S�¨°TÐ:Ñ:Ô:½1Ñ=Ô=ˆ
Ý	�U˜TÐ	"Ñ	"Ô	"ð	ð 	ð 	ð 	ñ 
#Ô	"ð	à×Ò˜FÑ#Ô#Ð#Ð#Ð#r   c                 ón  — t          j        d¬¦  «        5 }t          j        dt          j        ¦  «          t          t          d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ÚalwaysrY   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   rO   r   Ú
assertTrueÚanyr;   )r$   ÚwlistrQ   s      r   Útest_object_modezTestGILRelease.test_object_mode¨   s  € õ
 Ô$¨DÐ1Ñ1Ô1ð 	D°UÝÔ! (­FÔ,?Ñ@Ô@Ð@Ø9•C�¨°DÐ9Ñ9Ô9½(ÑCÔCˆEð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð 	�Š�ð ,ð ,à%*ð,ñ ,ô ,ñ ,ô ,à-2ñ	4ô 	4ð 	4ð 	×Ò˜E 1Ñ%Ô%Ð%Ð%Ð%s   –AA'Á'A+Á.A+N)Ú__name__Ú
__module__Ú__qualname__r&   r;   rB   rJ   r   rR   rW   r[   re   rh   rk   r~   r_   r   r   r   r   C   sÓ   € € € € € ð4ð 4ð 4ðð ð ð(5ð 5ð 5ð
ð ð ð ð#ð #ñ Ôð#ð'ð 'ð 'ð'ð 'ð 'ð	(ð 	(ð 	(ð(ð (ð (ð ð$ð $ñ Ôð$ð&ð &ð &ð &ð &r   r   Ú__main__))ÚctypesÚctypes.utilÚosÚsysr0   rx   Únumpyr!   ÚunittestÚnumbar   Ú
numba.corer   Únumba.tests.supportr   r   r   Ú	pythonapir   Úc_longÚrestypeÚargtypesÚnameÚwindllÚkernel32ÚSleepr   Úc_uintr   ÚCDLLÚutilÚfind_libraryÚusleepÚc_intr   rO   r   r   r   r   Úmainr_   r   r   ú<module>r›      s·  ðØ €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€à Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dð #Ô,Ô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ð-ð -ð -ð 	"€ð-ð -ð -ð-ð -ð -ðq&ð q&ð q&ð q&ð q&�Xñ q&ô q&ð q&ðh ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   