ó
    „ñ:iN  ã                   ót  • S SK r S SKr S SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  S SKJr  S SKJrJrJr  \ R"                  R$                  r\ R&                  \l        / \l        \R,                  S:X  a<  \ R.                  R0                  R2                  r\ R6                  /\l        S\l        SrOZ\ R:                  " \ R<                  R?                  S5      5      R@                  r\ R6                  /\l        \ RB                  \l        SrS	 r"S
r#S r$S r% " S S\5      r&\'S:X  a  \RP                  " 5         gg)é    N)Újit)Úerrors)ÚTestCaseÚtagÚskip_if_freethreadingÚnté   Úciè  c                 óR   • U H!  n[        S[        -  5        [        5       X'   M#     g )Né
   )ÚsleepÚsleep_factorÚPyThread_get_thread_ident©ÚaÚindicesÚidxs      ÚW/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/numba/tests/test_gil.pyÚfr   "   s%   € ó
 ˆäˆb”<ÑÔ Ü*Ó,ˆ‹ò ó    zvoid(int64[:], intp[:])c                 óf   • [        5         U H!  n[        S[        -  5        [        5       X'   M#     g)z'
Same as f(), but inside a lifted loop
r   N)Úobjectr   r   r   r   s      r   Úlifted_fr   .   s*   € ô „HÛˆäˆb”<ÑÔ Ü*Ó,ˆ‹ò r   c                 óf   • U H+  n[        S[        -  5        [        5         [        5       X'   M-     g)z!
Same as f(), but in object mode
r   N)r   r   r   r   r   s      r   Úobject_fr   8   s*   € ó ˆäˆb”<ÑÔ ÜŒÜ*Ó,ˆ‹ò	 r   c                   ój   • \ rS rSrS rS rS rS r\S 5       r	S r
S rS	 rS
 r\S 5       rS rSrg)ÚTestGILReleaseéC   c                 óH   • [         R                  " U[         R                  S9$ )N©Údtype)ÚnpÚarangeÚint64)ÚselfÚ	n_memberss     r   Úmake_test_arrayÚTestGILRelease.make_test_arrayE   s   € Ü�yŠy˜¬"¯(©(Ñ3Ð3r   c                 ó  • / nU" U R                  S5      [        R                  " S[        R                  S95        U R                  S5      n[	        U5       Hv  n[        R                  " UR
                  [        R                  S9n[        R                  R                  U5        [        R                  " XU4S9nUR                  U5        Mx     U H  nUR                  5         M     U H  nUR                  5         M     U$ )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_threadsÚTestGILRelease.run_in_threadsH   sÅ   € àˆñ 	ˆT×!Ñ! !Ó$¤b§i¢i°¼¿¹Ñ&AÔBØ×"Ñ" 2Ó&ˆÜ�yÖ!ˆAô —i’i §¡´·±Ñ8ˆGÜ�I‰I×Ñ˜gÔ&Ü× Ò ¨¸°>ÑBˆAØ�N‰N˜1Öñ "ó ˆAØ�G‰GŽIñ ãˆAØ�F‰FŽHñ àˆ
r   c                 ór   • U R                  USS9n[        U5      nU R                  [        U5      SU5        g )Né   )r8   r	   )r=   ÚsetÚassertEqualÚlen)r%   r7   r:   Údistincts       r   Úcheck_gil_heldÚTestGILRelease.check_gil_held\   s6   € Ø×!Ñ! $°!Ð!Ð4ˆÜ�s“8ˆØ×Ñœ˜X›¨¨8Õ4r   c                 ó¾   • S H<  nU R                  X5      n[        U5      n U R                  [        U5      SU5          g    We! [         a  nUn S nAMT  S nAff = f)N)r@   é   é    r	   )r=   rA   ÚassertGreaterrC   ÚAssertionError)r%   r7   r8   r:   rD   ÚeÚfailures          r   Úcheck_gil_releasedÚ!TestGILRelease.check_gil_releaseda   se   € Û$ˆIð ×%Ñ% dÓ6ˆCÜ˜3“xˆHðØ×"Ñ"¤3 x£=°!°XÔ>ñ ñ %ð ˆøô	 "ó Ø–ûðús   £AÁ
AÁAÁAc                 óV   • [        [        SS9" [        5      nU R                  U5        g)z]
Test the GIL is held by default, by checking serialized runs
produce deterministic results.
T©ÚnopythonN©r   Úf_sigr   rE   ©r%   Úcfuncs     r   Útest_gil_heldÚTestGILRelease.test_gil_heldo   s#   € ô ”E DÒ)¬!Ó,ˆØ×Ñ˜EÕ"r   c                 óX   • [        [        SSS9" [        5      nU R                  U5        g)zR
Test releasing the GIL, by checking parallel runs produce
unpredictable results.
T©rR   ÚnogilN©r   rT   r   rN   rU   s     r   Útest_gil_releasedÚ TestGILRelease.test_gil_releasedx   s%   € ô
 ”E D°Ò5´aÓ8ˆØ×Ñ Õ&r   c                 óX   • [        [        SSS9" [        5      nU R                  U5        g)zb
Test the GIL can by released by a lifted loop even though the
surrounding code uses object mode.
T©Úforceobjr[   N)r   rT   r   rN   rU   s     r   Ú$test_gil_released_inside_lifted_loopÚ3TestGILRelease.test_gil_released_inside_lifted_loop€   s%   € ô
 ”E D°Ò5´hÓ?ˆØ×Ñ Õ&r   c                 óˆ   ^• [        [        SS9" [        5      m[        [        SSS9U4S j5       nU R                  U5        g)zP
Releasing the GIL in the caller is sufficient to have it
released in a callee.
TrQ   rZ   c                 ó   >• T" X5        g ©N© ©r   r;   Ú
compiled_fs     €r   ÚcallerÚ:TestGILRelease.test_gil_released_by_caller.<locals>.callerŽ   ó   ø€ á�qÕr   Nr\   ©r%   rj   ri   s     @r   Útest_gil_released_by_callerÚ*TestGILRelease.test_gil_released_by_callerˆ   s?   ø€ ô
 œ¨Ò.¬qÓ1ˆ
Ü	ŒU˜T¨Ñ	.ô	ó 
/ð	à×Ñ Õ'r   c                 óŠ   ^• [        [        SSS9" [        5      m[        [        SSS9U4S j5       nU R                  U5        g)zB
Same, but with both caller and callee asking to release the GIL.
TrZ   c                 ó   >• T" X5        g rf   rg   rh   s     €r   rj   ÚETestGILRelease.test_gil_released_by_caller_and_callee.<locals>.caller˜   rl   r   Nr\   rm   s     @r   Ú&test_gil_released_by_caller_and_calleeÚ5TestGILRelease.test_gil_released_by_caller_and_callee“   sA   ø€ ô œ¨°TÒ:¼1Ó=ˆ
Ü	ŒU˜T¨Ñ	.ô	ó 
/ð	à×Ñ Õ'r   c                 óˆ   ^• [        [        SSS9" [        5      m[        [        SS9U4S j5       nU R                  U5        g)z@
When only the callee asks to release the GIL, it gets ignored.
TrZ   rQ   c                 ó   >• T" X5        g rf   rg   rh   s     €r   rj   Ú9TestGILRelease.test_gil_ignored_by_callee.<locals>.caller£   rl   r   NrS   rm   s     @r   Útest_gil_ignored_by_calleeÚ)TestGILRelease.test_gil_ignored_by_callee�   s?   ø€ ô
 œ¨°TÒ:¼1Ó=ˆ
Ü	ŒU˜TÑ	"ô	ó 
#ð	à×Ñ˜FÕ#r   c                 óD  • [         R                  " SS9 n[         R                  " S[        R                  5        [        [        SSS9" [        5      nSSS5        U R                  [        S W 5       5      U5        U R                  WS5        g! , (       d  f       NC= f)zI
When the function is compiled in object mode, a warning is
printed out.
T)ÚrecordÚalwaysr`   Nc              3   ó˜   #   • U  H@  nUR                   [        R                  L =(       a    S [        UR                  5      ;   v •  MB     g7f)z:Code running in object mode won't allow parallel executionN)Úcategoryr   ÚNumbaWarningÚstrÚmessage)Ú.0Úws     r   Ú	<genexpr>Ú2TestGILRelease.test_object_mode.<locals>.<genexpr>°   sG   é € ð ,â%* ð ŸJ™J¬&×*=Ñ*=Ð=÷ oØ \Ô`cÐde×dmÑdmÓ`nÑ nôoâ%*ùs   ‚AA
é   )ÚwarningsÚcatch_warningsÚsimplefilterr   r   r   rT   r   Ú
assertTrueÚanyr=   )r%   ÚwlistrV   s      r   Útest_object_modeÚTestGILRelease.test_object_mode¨   s‚   € ô
 ×$Ò$¨DÒ1°UÜ×!Ò! (¬F×,?Ñ,?Ô@Üœ¨°DÒ9¼(ÓCˆE÷ 2ð 	�‰œñ ,á%*ó,ó ,à-2ô	4ð 	×Ñ˜E 1Õ%÷ 2Õ1ús   •?BÂ
Brg   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r'   r=   rE   rN   r   rW   r]   rb   rn   rs   rx   r�   Ú__static_attributes__rg   r   r   r   r   C   sW   † ò4òò(5ò
ð ñ#ó ð#ò'ò'ò	(ò(ð ñ$ó ð$õ&r   r   Ú__main__))ÚctypesÚctypes.utilÚosÚsysr2   r‡   Ú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   rT   r   r   r   r�   Úmainrg   r   r   Ú<module>r­      s  ðÛ Û Û 	Û 
Û Û ã ã Ý Ý ß DÑ Dð #×,Ñ,×FÑFÐ Ø$*§M¡MÐ Ô !Ø%'Ð Ô "ð ‡7�7ˆdƒ?Ø�M‰M×"Ñ"×(Ñ(€EØ—m‘m�_€E„NØ€E„MØ�Là�KŠK˜Ÿ™×0Ñ0°Ó5Ó6×=Ñ=€EØ—m‘m�_€E„NØ—L‘L€E„MØ€Lò-ð 	"€ò-ò-ôq&�Xô q&ðh ˆzÓØ‡M‚M…Oð r   