§
    ƒÛgb[  ã                   ó6  — d dl mZmZm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mZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ  G d„ d	e¦  «        Z G d
„ dee¦  «        Ze                     ¦   «          e dk    r ej!        ¦   «          dS dS )é    )Úprint_functionÚabsolute_importÚdivisionN)ÚnjitÚset_num_threadsÚget_num_threadsÚprangeÚconfigÚthreading_layerÚguvectorize)Úget_thread_id)ÚTypingError)ÚTestCaseÚskip_parfors_unsupportedÚtag)ÚTestInSubprocessc                   ó¸  — e Zd ZdZd„ Zd„ Zed„ ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d	„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d
„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «        d„ ¦   «         ¦   «         Ze ej	        e
j        dk     d¦  «         ej	        ej                             d¦  «         d¦  «        d„ ¦   «         ¦   «         ¦   «         Zd„ Zed„ ¦   «         ZdS )ÚTestNumThreadsFc                 ó8   — t          t          j        ¦  «         d S ©N©r   r
   ÚNUMBA_NUM_THREADS©Úselfs    úR/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_num_threads.pyÚsetUpzTestNumThreads.setUp   s   € õ 	�Ô0Ñ1Ô1Ð1Ð1Ð1ó    c                 óø   — t          ¦   «         dk    r-|                      t          j        ||k    ¦  «        ¦  «         d S t          ¦   «         dv r"t          j                             ||¦  «         d S J d¦   «         ‚)NÚtbb)ÚompÚ	workqueuer   Úunreachable)r   Ú
assertTrueÚnpÚallÚtestingÚassert_equal)r   ÚexpectedÚresults      r   Ú
check_maskzTestNumThreads.check_mask   sz   € õ ÑÔ Ò%Ð%Ø�OŠO�BœF 6¨XÒ#5Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7ÝÑÔÐ"6Ð6Ð6ÝŒJ×#Ò# H¨fÑ5Ô5Ð5Ð5Ð5à#�mÑ#Ô#Ð#r   c                 ó"  — t           d„ ¦   «         }d}|t          f|j        t          ffD ]d\  }}|                      |¦  «        5 } |¦   «          d d d ¦  «         n# 1 swxY w Y   |                      |t          |j        ¦  «        ¦  «         Œed S )Nc                  ó$   — t          d¦  «         d S )NÚ
wrong_type)r   © r   r   Úfooz5TestNumThreads.test_set_num_threads_type.<locals>.foo)   s   € å˜LÑ)Ô)Ð)Ð)Ð)r   z2The number of threads specified must be an integer)r   r   Úpy_funcÚ	TypeErrorÚassertRaisesÚassertInÚstrÚ	exception)r   r/   r(   ÚfnÚerrtyÚraisess         r   Útest_set_num_threads_typez(TestNumThreads.test_set_num_threads_type&   sæ   € õ 
ð	*ð 	*ñ 
Œð	*ð HˆØ¥Ð,¨s¬{½IÐ.FÐGð 	;ð 	;‰IˆB�Ø×"Ò" 5Ñ)Ô)ð ¨VØ�‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�MŠM˜(¥C¨Ô(8Ñ$9Ô$9Ñ:Ô:Ð:Ð:ð	;ð 	;s   ÁAÁA	Á"A	é   zNot enough CPU coresc                 ó2  — t           j        }|                      t          ¦   «         |¦  «         t	          d¦  «         |                      t          ¦   «         d¦  «         t	          |¦  «         |                      t          ¦   «         |¦  «         |                      t          ¦  «        5  t	          d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          ¦  «        5  t	          |dz   ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr:   r   é   )r
   r   ÚassertEqualr   r   r2   Ú
ValueError)r   Úmax_threadss     r   Ú_test_set_num_threads_basicz*TestNumThreads._test_set_num_threads_basic3   s  € õ Ô.ˆà×Ò�Ñ*Ô*¨KÑ8Ô8Ð8Ý˜ÑÔÐØ×Ò�Ñ*Ô*¨AÑ.Ô.Ð.Ý˜Ñ$Ô$Ð$Ø×Ò�Ñ*Ô*¨KÑ8Ô8Ð8à×Ò�zÑ*Ô*ð 	ð 	Ý˜AÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ×Ò�zÑ*Ô*ð 	-ð 	-Ý˜K¨!™OÑ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-s$   Â+CÃCÃCÃ,DÄDÄDc                 óÊ  — t           j        }t          d„ ¦   «         }|                       |¦   «         |¦  «         t	          d¦  «         |                       |¦   «         d¦  «         t	          |¦  «         |                       |¦   «         |¦  «         t          d„ ¦   «         }|                       |d¦  «        d¦  «         |                       ||¦  «        |¦  «         d S )Nc                  ó   — t          ¦   «         S r   ©r   r.   r   r   Úget_nz=TestNumThreads._test_set_num_threads_basic_jit.<locals>.get_nI   ó   € å"Ñ$Ô$Ð$r   r:   c                 ó<   — t          | ¦  «         t          ¦   «         S r   ©r   r   ©Úns    r   Ú	set_get_nzATestNumThreads._test_set_num_threads_basic_jit.<locals>.set_get_nS   s   € å˜AÑÔÐÝ"Ñ$Ô$Ð$r   )r
   r   r   r=   r   )r   r?   rD   rJ   s       r   Ú_test_set_num_threads_basic_jitz.TestNumThreads._test_set_num_threads_basic_jitD   sö   € õ Ô.ˆå	ð	%ð 	%ñ 
Œð	%ð 	×Ò˜˜™œ +Ñ.Ô.Ð.Ý˜ÑÔÐØ×Ò˜˜™œ !Ñ$Ô$Ð$Ý˜Ñ$Ô$Ð$Ø×Ò˜˜™œ +Ñ.Ô.Ð.å	ð	%ð 	%ñ 
Œð	%ð 	×Ò˜˜ 1™œ qÑ)Ô)Ð)Ø×Ò˜˜ ;Ñ/Ô/°Ñ=Ô=Ð=Ð=Ð=r   c                 óÐ  — t           j        }t          dgddd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        } ||¦  «         t          j                             ||¦  «         t          d	¦  «         t          j        dt          j        ¬¦  «        } ||¦  «         t          j                             |d	¦  «         t          |¦  «         t          j        dt          j        ¬¦  «        } ||¦  «         t          j                             ||¦  «         t          dgddd¬¦  «        d
„ ¦   «         }t          j        dt          j        ¬¦  «        }d	|d<    ||¦  «         t          j                             |d	¦  «         t          j        dt          j        ¬¦  «        }||d<    ||¦  «         t          j                             ||¦  «         d S )Núvoid(int64[:])ú(n)TÚparallel©ÚnopythonÚtargetc                 ó,   — t          ¦   «         | d d …<   d S r   rC   ©Úxs    r   rD   zETestNumThreads._test_set_num_threads_basic_guvectorize.<locals>.get_n`   ó   € õ
 #Ñ$Ô$ˆAˆaˆaˆa‰DˆDˆDr   ©é@KL ©Údtyper:   c                 óV   — t          | d         ¦  «         t          ¦   «         | d d …<   d S ©Nr   rG   rH   s    r   rJ   zITestNumThreads._test_set_num_threads_basic_guvectorize.<locals>.set_get_ns   ó-   € õ
 ˜A˜aœDÑ!Ô!Ð!Ý"Ñ$Ô$ˆAˆaˆaˆa‰DˆDˆDr   r   )	r
   r   r   r$   ÚzerosÚint64r&   r'   r   )r   r?   rD   rU   rJ   s        r   Ú'_test_set_num_threads_basic_guvectorizez6TestNumThreads._test_set_num_threads_basic_guvectorize[   sß  € õ Ô.ˆå	Ð&Ð'ØØ"Ø&ð
(ñ 
(ô 
(ð	%ð 	%ñ	
(ô 
(ð	%õ ŒH�Z¥r¤xÐ0Ñ0Ô0ˆØˆˆa‰ŒˆÝ
Œ
×Ò  ;Ñ/Ô/Ð/Ý˜ÑÔÐÝŒH�Z¥r¤xÐ0Ñ0Ô0ˆØˆˆa‰ŒˆÝ
Œ
×Ò  1Ñ%Ô%Ð%Ý˜Ñ$Ô$Ð$ÝŒH�Z¥r¤xÐ0Ñ0Ô0ˆØˆˆa‰ŒˆÝ
Œ
×Ò  ;Ñ/Ô/Ð/å	Ð&Ð'ØØ"Ø&ð
(ñ 
(ô 
(ð	%ð 	%ñ	
(ô 
(ð	%õ ŒH�Z¥r¤xÐ0Ñ0Ô0ˆØˆˆ!‰Øˆ	�!‰ŒˆÝ
Œ
×Ò  1Ñ%Ô%Ð%ÝŒH�Z¥r¤xÐ0Ñ0Ô0ˆØˆˆ!‰Øˆ	�!‰ŒˆÝ
Œ
×Ò  ;Ñ/Ô/Ð/Ð/Ð/r   c                 óz  — t          d¦  «         t          d¬¦  «        d„ ¦   «         }t          dgddd¬¦  «        d	„ ¦   «         } |¦   «         }t          j                             |d¦  «         t          j        d
t          j        ¬¦  «        } ||¦  «         t          j                             |d¦  «         d S )Nr:   T©rO   c                  óz   — d} t          j        | f¦  «        }t          | ¦  «        D ]}t          ¦   «         ||<   Œ|S ©Né   )r$   Úemptyr	   r   ©rU   ÚbufÚis      r   Ú	test_funczCTestNumThreads._test_set_num_threads_outside_jit.<locals>.test_func‹   sA   € àˆAÝ”(˜A˜4‘.”.ˆCÝ˜A‘Y”Yð +ð +�Ý(Ñ*Ô*��A‘�ØˆJr   rM   rN   rO   rP   c                 ó,   — t          ¦   «         | d d …<   d S r   rC   rT   s    r   Útest_gufunczETestNumThreads._test_set_num_threads_outside_jit.<locals>.test_gufunc“   rV   r   rW   rY   )r   r   r   r$   r&   r'   r^   r_   )r   rj   rl   ÚoutrU   s        r   Ú!_test_set_num_threads_outside_jitz0TestNumThreads._test_set_num_threads_outside_jit„   sÙ   € õ
 	˜ÑÔÐå	�tÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	õ 
Ð&Ð'ØØ"Ø&ð
(ñ 
(ô 
(ð	%ð 	%ñ	
(ô 
(ð	%ð ˆi‰kŒkˆÝ
Œ
×Ò  QÑ'Ô'Ð'åŒH�Z¥r¤xÐ0Ñ0Ô0ˆØˆ�A‰ŒˆÝ
Œ
×Ò  1Ñ%Ô%Ð%Ð%Ð%r   c                 ó’   — t          d¬¦  «        d„ ¦   «         }d} ||¦  «        }t          j                             ||¦  «         d S )NTrb   c                 ó˜   — d}t          j        |f¦  «        }t          | ¦  «         t          |¦  «        D ]}t	          ¦   «         ||<   Œ|S rd   )r$   rf   r   r	   r   )ÚnthreadsrU   rh   ri   s       r   rj   zBTestNumThreads._test_set_num_threads_inside_jit.<locals>.test_func¥   sO   € àˆAÝ”(˜A˜4‘.”.ˆCÝ˜HÑ%Ô%Ð%Ý˜A‘Y”Yð +ð +�Ý(Ñ*Ô*��A‘�ØˆJr   r:   )r   r$   r&   r'   )r   rj   Úmaskrm   s       r   Ú _test_set_num_threads_inside_jitz/TestNumThreads._test_set_num_threads_inside_jit¡   s[   € õ 
�tÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð ˆØˆi˜‰oŒoˆÝ
Œ
×Ò  TÑ*Ô*Ð*Ð*Ð*r   c                 óä   — t          dgddd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        }d	}||d
<    ||¦  «         t          j                             ||¦  «         d S )NrM   rN   TrO   rP   c                 óV   — t          | d         ¦  «         t          ¦   «         | d d …<   d S r\   rG   rT   s    r   rj   zJTestNumThreads._test_set_num_threads_inside_guvectorize.<locals>.test_func¶   r]   r   rW   rY   r:   r   )r   r$   r^   r_   r&   r'   )r   rj   rU   rr   s       r   Ú(_test_set_num_threads_inside_guvectorizez7TestNumThreads._test_set_num_threads_inside_guvectorize²   s�   € õ 
Ð&Ð'ØØ"Ø&ð
(ñ 
(ô 
(ð	%ð 	%ñ	
(ô 
(ð	%õ ŒH�Z¥r¤xÐ0Ñ0Ô0ˆØˆØˆˆ!‰Øˆ	�!‰ŒˆÝ
Œ
×Ò  4Ñ(Ô(Ð(Ð(Ð(r   c           	      óŠ  — t          dt          dt          j        dz   ¦  «        ¦  «        D �]}t	          |¦  «         t          d¬¦  «        d„ ¦   «         } |¦   «         }|                      ||f|¦  «         t          dgddd	¬
¦  «        d„ ¦   «         }t          j	        ddt          j
        ¬¦  «                             d¦  «        }t          j        dt          j
        ¬¦  «        } |||¦  «         |                      ||¦  «         |                      |t          t          j        |¦  «        ¦  «        ¦  «         �Œd S )Nr:   é   r<   Trb   c                  óÔ   — d} t          j        | f¦  «        }t          | ¦  «        D ]}t          ¦   «         ||<   Œt	          t          j        |¦  «        ¦  «        t          ¦   «         fS ©NrX   )r$   rf   r	   r   ÚlenÚuniquer   rg   s      r   rj   zITestNumThreads._test_get_num_threads_truth_outside_jit.<locals>.test_funcÍ   s[   € à�Ý”h ˜t‘n”n�Ý ™œð -ð -�AÝ*™_œ_�C˜‘F�FÝ�2œ9 S™>œ>Ñ*Ô*­OÑ,=Ô,=Ð=Ð=r   úvoid(int64[:], int64[:])ú(n), (m)rO   rP   c                 óN   — t          ¦   «         | d d …<   t          ¦   «         |d<   d S r\   )r   r   )rU   rm   s     r   rl   zKTestNumThreads._test_get_num_threads_truth_outside_jit.<locals>.test_gufuncØ   s(   € õ
 %‘”��!�!�!‘Ý(Ñ*Ô*��A‘��r   rW   éÿÿÿÿrY   ©éd   iPÃ  ©r<   )ÚrangeÚminr
   r   r   r   r*   r   r$   Úfullr_   Úreshaper^   r{   r|   )r   rr   rj   rm   rl   rU   s         r   Ú'_test_get_num_threads_truth_outside_jitz6TestNumThreads._test_get_num_threads_truth_outside_jitÄ   sX  € õ ˜!�S ¥FÔ$<¸qÑ$@ÑAÔAÑBÔBð 	5ñ 	5ˆDÝ˜DÑ!Ô!Ð!õ ˜4Ð Ñ Ô ð>ð >ñ !Ô ð>ð �)‘+”+ˆCØ�OŠO˜T 4˜L¨#Ñ.Ô.Ð.åÐ4Ð5Ø#Ø"&Ø *ð,ñ ,ô ,ð+ð +ñ	,ô ,ð+õ
 ”˜
 B­b¬hÐ7Ñ7Ô7×?Ò?ÀÑMÔMˆAÝ”(˜4¥r¤xÐ0Ñ0Ô0ˆCØˆK˜˜3ÑÔÐØ�OŠO˜D #Ñ&Ô&Ð&Ø�OŠO˜D¥#¥b¤i°¡l¤lÑ"3Ô"3Ñ4Ô4Ð4Ñ4ð;	5ð 	5r   c           	      óv  ‡— t          dt          dt          j        dz   ¦  «        ¦  «        D �]
Št	          d¬¦  «        ˆfd„¦   «         } |¦   «         }|                      ‰‰f|¦  «         t          dgddd	¬
¦  «        ˆfd„¦   «         }t          j        ddt          j	        ¬¦  «         
                    d¦  «        }t          j        dt          j	        ¬¦  «        } |||¦  «         |                      ‰|¦  «         |                      ‰t          t          j        |¦  «        ¦  «        ¦  «         �Œd S )Nr:   rx   r<   Trb   c                  óô   •— t          ‰¦  «         d} t          j        | f¦  «        }t          | ¦  «        D ]}t	          ¦   «         ||<   Œt          t          j        |¦  «        ¦  «        t          ¦   «         fS rz   )r   r$   rf   r	   r   r{   r|   r   )rU   rh   ri   rr   s      €r   rj   zHTestNumThreads._test_get_num_threads_truth_inside_jit.<locals>.test_funcï   sj   ø€ å Ñ%Ô%Ð%Ø�Ý”h ˜t‘n”n�Ý ™œð -ð -�AÝ*™_œ_�C˜‘F�FÝ�2œ9 S™>œ>Ñ*Ô*­OÑ,=Ô,=Ð=Ð=r   r}   r~   rO   rP   c                 ón   •— t          ‰¦  «         t          ¦   «         | d d …<   t          ¦   «         |d<   d S r\   )r   r   r   )rU   rm   rr   s     €r   rl   zJTestNumThreads._test_get_num_threads_truth_inside_jit.<locals>.test_gufuncû   s7   ø€ õ
   Ñ%Ô%Ð%Ý$‘”��!�!�!‘Ý(Ñ*Ô*��A‘��r   rW   r€   rY   r�   rƒ   )r„   r…   r
   r   r   r*   r   r$   r†   r_   r‡   r^   r{   r|   )r   rj   rm   rl   rU   rr   s        @r   Ú&_test_get_num_threads_truth_inside_jitz5TestNumThreads._test_get_num_threads_truth_inside_jitç   s_  ø€ õ ˜!�S ¥FÔ$<¸qÑ$@ÑAÔAÑBÔBð 	5ñ 	5ˆDõ ˜4Ð Ñ Ô ð>ð >ð >ð >ñ !Ô ð>ð �)‘+”+ˆCØ�OŠO˜T 4˜L¨#Ñ.Ô.Ð.åÐ4Ð5Ø#Ø"&Ø *ð,ñ ,ô ,ð+ð +ð +ð +ñ	,ô ,ð+õ ”˜
 B­b¬hÐ7Ñ7Ô7×?Ò?ÀÑMÔMˆAÝ”(˜4¥r¤xÐ0Ñ0Ô0ˆCØˆK˜˜3ÑÔÐØ�OŠO˜D #Ñ&Ô&Ð&Ø�OŠO˜D¥#¥b¤i°¡l¤lÑ"3Ô"3Ñ4Ô4Ð4Ñ4ð=	5ð 	5r   c                 óN  ‡‡‡‡— t          ¦   «         dk    r|                      d¦  «         t          j        dz
  Št          j        Šdt          j        z  Št	          d¬¦  «        d„ ¦   «         Šˆˆˆˆfd„}d	D �]*} ||¦  «        } |‰¦  «        \  }} |‰d¬
¦  «        \  }}t
          j                             ||¦  «         t
          j                             ||¦  «         dt          j        ‰¦  «        ‰z  z   }|dk    r| 	                    ‰df¦  «        }	nt          j
        |¦  «        }	t
          j                             |	|¦  «         t          j        ‰‰f¦  «        }
t          d‰¦  «        D ]}||
|d d …f<   Œt
          j                             |
|¦  «         �Œ,d S )Nr!   úworkqueue is not threadsafer<   r:   Trb   c                 ód   — | j         \  }}t          |¦  «        D ]}t          ¦   «         | ||f<   Œd S r   )Úshaper	   r   ©rh   ÚfidÚMÚNri   s        r   Ú
child_funcz=TestNumThreads._test_nested_parallelism_1.<locals>.child_func  sA   € à”9‰DˆAˆqÝ˜A‘Y”Yð 0ð 0�Ý-Ñ/Ô/��C˜�F‘�ð0ð 0r   c                 óF   •— | dk    r
dˆˆˆˆfd„	}n| dk    r	dˆˆˆˆfd„	}|S )Nr   Fc                 ó„   •— t          d¬¦  «        ˆˆˆˆfd„¦   «         }|r|                     | ¦  «        S  || ¦  «        S )NTrb   c                 óò   •— d}t          j        ‰‰f¦  «        }t          | ¦  «         t          ‰¦  «        D ]<}d|‰z  z   }t          |¦  «         |‰k     r ‰||¦  «         |t	          ¦   «         z  }Œ=||fS ©Nr   r<   )r$   r^   r   r	   r   )	rq   Úaccrh   ri   Ú
local_maskr“   r”   r•   rr   s	        €€€€r   Ú
_test_funczbTestNumThreads._test_nested_parallelism_1.<locals>.get_test.<locals>.test_func.<locals>._test_func"  s�   ø€ à˜Ý œh¨¨1 vÑ.Ô.˜Ý'¨Ñ1Ô1Ð1Ý!'¨¡¤ð 5ð 5˜AØ)*¨Q°©X©˜Jå+¨JÑ7Ô7Ð7Ø)¨Aš~˜~Ø * 
¨3°
Ñ ;Ô ;Ð ;Ø¥?Ñ#4Ô#4Ñ4˜C˜CØ" C˜x˜r   )r   r0   )rq   r0   rœ   r“   r”   r•   rr   s      €€€€r   rj   zNTestNumThreads._test_nested_parallelism_1.<locals>.get_test.<locals>.test_func!  so   ø€ Ý 4Ð(Ñ(Ô(ð(ð (ð (ð (ð (ð (ð (ñ )Ô(ð(ð ð 4Ø)×1Ò1°(Ñ;Ô;Ð;à)˜z¨(Ñ3Ô3Ð3r   r   c                 óš  •‡ — ˆ	ˆ
ˆ fd„}t          j        ‰‰	ft           j        ¬¦  «        }t          j        ‰dft           j        ¬¦  «        }dt          j        ‰¦  «        ‰z  z                        ‰df¦  «        }dg}d}|s t          ||dd¬¦  «        |¦  «        }n t          ||d¬	¦  «        |¦  «        } ||||¦  «         ||fS )
Nc                 óÄ   •— t          ‰¦  «         t          |d         ¦  «         |d         ‰k     r ‰||d         ¦  «         | dxx         t          ¦   «         z  cc<   d S r\   rG   )rš   rh   r›   r”   r•   rq   s      €€€r   rœ   zbTestNumThreads._test_nested_parallelism_1.<locals>.get_test.<locals>.test_func.<locals>._test_func6  sh   ø€ Ý'¨Ñ1Ô1Ð1å'¨
°1¬Ñ6Ô6Ð6Ø% aœ=¨1Ò,Ð,Ø&˜J s¨J°q¬MÑ:Ô:Ð:Ø˜A˜˜œ¥/Ñ"3Ô"3Ñ3˜˜™˜˜r   rY   r<   z%void(int64[:], int64[:, :], int64[:])z(p), (n, m), (p)TrO   rP   ©Úforceobj)r$   r^   r_   Úaranger‡   r   )rq   r0   rœ   rh   rš   r›   ÚsigÚlayoutr“   r”   r•   rr   s   `       €€€€r   rj   zNTestNumThreads._test_nested_parallelism_1.<locals>.get_test.<locals>.test_func5  s!  øø€ ð4ð 4ð 4ð 4ð 4ð 4ð 4õ œ( A q 6µ´Ð:Ñ:Ô:�CÝœ( A q 6µ´Ð:Ñ:Ô:�CØ"#¥b¤i°¡l¤l°TÑ&9Ñ"9×!BÒ!BÀAÀqÀ6Ñ!JÔ!J�JØBÐC�CØ/�FØ"ð Lð&D¥[°°fÀtØ8Bð&Dñ &Dô &DØDNñ&Pô &P˜
˜
ð&@¥[°°fØ:>ð&@ñ &@ô &@Ø@Jñ&Lô &L˜
à�J˜s C¨Ñ4Ô4Ð4Ø ˜8�Or   )Fr.   )Ú	test_typerj   r“   r”   r•   rr   s     €€€€r   Úget_testz;TestNumThreads._test_nested_parallelism_1.<locals>.get_test  s‚   ø€ Ø˜FÒ"Ð"ð4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð& ˜mÒ+Ð+ð$ð $ð $ð $ð $ð $ð $ð $ð $ð. Ðr   ©r   r   )r0   r   )r   ÚskipTestr
   r   r   r$   r&   r'   r¡   r‡   Úsumr^   r„   )r   r¥   r¤   rj   Úgot_accÚgot_arrÚexp_accÚexp_arrÚmath_acc_expÚmath_accÚmath_arrri   r“   r”   r•   rr   s               @@@@r   Ú_test_nested_parallelism_1z)TestNumThreads._test_nested_parallelism_1  sß  øøøø€ õ ÑÔ Ò+Ð+Ø�MŠMÐ7Ñ8Ô8Ð8õ Ô'¨!Ñ+ˆåÔ$ˆØ•Ô(Ñ(ˆå	�tÐ	Ñ	Ô	ð	0ð 	0ñ 
Ô	ð	0ð
-	ð -	ð -	ð -	ð -	ð -	ð -	ð -	ð^ 1ð 	7ñ 	7ˆIØ ˜ Ñ+Ô+ˆIØ(˜y¨™œÑˆG�WØ(˜y¨°tÐ<Ñ<Ô<ÑˆG�WÝŒJ×#Ò# G¨WÑ5Ô5Ð5ÝŒJ×#Ò# G¨WÑ5Ô5Ð5ð �rœy¨™|œ|¨dÑ2Ñ2ˆLØ˜MÒ)Ð)Ø'×/Ò/°°A°Ñ7Ô7��åœ6 ,Ñ/Ô/�åŒJ×#Ò# H¨gÑ6Ô6Ð6å”x  A Ñ'Ô'ˆHÝ˜1˜a‘[”[ð #ð #�à!"�˜˜A˜A˜A˜‘�ÝŒJ×#Ò# H¨gÑ6Ô6Ð6Ñ6ð)	7ð 	7r   c                 ó‚  ‡	‡
‡— t          ¦   «         dk    r|                      d¦  «         t          j        dz   Š
dt          j        z  dz   Š	ˆ	ˆ
ˆfd„}t          j        dz
  Ši }dD ]=}dD ]8}|dk    r|dk    rŒt	          ‰¦  «           |||¦  «        ‰¦  «        |||f<   Œ9Œ>|d	         }|                     ¦   «         D ]"}t          j                             ||¦  «         Œ#t          j	        ‰	‰
f¦  «        }t          dt          j        ¦  «        D ]}|||d d …f<   Œt          j                             ||¦  «         d S )
Nr!   rŽ   r<   é   c                 ó¢  •‡‡— | dk    rt          d¬¦  «        }n | dk    rt          d¬¦  «        }n	| dk    rd„ }|d„ ¦   «         Š|d	v rH|dk    rt          d¬¦  «        Šn |dk    rt          d¬¦  «        Šn	|dk    rd
„ Š‰ˆˆˆˆfd„¦   «         }n=|dk    rt          dgddd¬¦  «        Šn|dk    rt          dgdd¬¦  «        Šˆˆˆˆˆfd„}|S )NrO   Trb   r   FÚnonec                 ó   — | S r   r.   rT   s    r   Ú	child_deczNTestNumThreads._test_nested_parallelism_2.<locals>.get_impl.<locals>.child_decx  s   € Ø�Hr   c                 ó‚   — | j         \  }}t          |¦  «         t          |¦  «        D ]}t          ¦   «         | ||f<   Œd S r   )r�   r   r	   r   r‘   s        r   ÚchildzJTestNumThreads._test_nested_parallelism_2.<locals>.get_impl.<locals>.child{  sO   € à”y‘��1Ý Ñ$Ô$Ð$Ý ™œð 4ð 4�AÝ"1Ñ"3Ô"3�C˜˜Q˜‘K�Kð4ð 4r   ©rO   r   r´   c                 ó   — | S r   r.   rT   s    r   Útest_deczMTestNumThreads._test_nested_parallelism_2.<locals>.get_impl.<locals>.test_decˆ  s   € Ø ˜r   c                 óæ   •— t          j        ‰‰f¦  «        }t          | ¦  «         t          ‰¦  «        D ]:}d|‰z  z   }|t          j        k     r  ‰||¦  «         t          ¦   «         |k    sJ ‚Œ;|S )Nr<   )r$   r^   r   r	   r
   r   r   )rq   rh   ri   r›   r“   r”   r¸   rr   s       €€€€r   rj   zNTestNumThreads._test_nested_parallelism_2.<locals>.get_impl.<locals>.test_func‹  s‡   ø€ åœ( A q 6Ñ*Ô*�CÝ# HÑ-Ô-Ð-Ý# A™YœYð Cð C˜Ø%&¨¨T©¡\˜
ð &­Ô(@Ò@Ð@Ø!˜E # zÑ2Ô2Ð2Ý#2Ñ#4Ô#4¸
Ò#BÐ#BÐ#BÐ#BøØ�Jr   r   zint64[:,:], int64[:]z(n, m), (k)rP   úguvectorize-objrŸ   c                 óà   •‡ — ‰ˆˆ fd„¦   «         }t          j        ‰‰ft           j        ¬¦  «        }dt          j        ‰¦  «        ‰z  z                        ‰df¦  «        } |||¦  «         |S )Nc                 ó®   •— t          ‰¦  «         |d         t          j        k     r, ‰| |d         ¦  «         t          ¦   «         |d         k    sJ ‚d S d S r\   )r   r
   r   r   )rh   r›   r¸   rq   s     €€r   rœ   zbTestNumThreads._test_nested_parallelism_2.<locals>.get_impl.<locals>.test_func.<locals>._test_func¢  se   ø€ å'¨Ñ1Ô1Ð1ð & aœ=­6Ô+CÒCÐCØ!˜E # z°!¤}Ñ5Ô5Ð5Ý#2Ñ#4Ô#4¸
À1¼Ò#EÐ#EÐ#EÐ#Eð DÐCà#EÐ#Er   rY   r<   )r$   r^   r_   r¡   r‡   )	rq   rœ   rh   r›   r“   r”   r¸   rr   r»   s	   `   €€€€€r   rj   zNTestNumThreads._test_nested_parallelism_2.<locals>.get_impl.<locals>.test_func¡  sŽ   øø€ ØðFð Fð Fð Fð Fñ ”XðFõ œ( A q 6µ´Ð:Ñ:Ô:�CØ"#¥b¤i°¡l¤l°TÑ&9Ñ"9×!BÒ!BÀAÀqÀ6Ñ!JÔ!J�JØ�J˜s JÑ/Ô/Ð/Ø�Jr   r¦   )	Ú
child_typer¤   r¶   rj   r¸   r»   r“   r”   rr   s	       @@€€€r   Úget_implz;TestNumThreads._test_nested_parallelism_2.<locals>.get_implq  s¥  øøø€ à˜ZÒ'Ð'Ý ¨$Ð/Ñ/Ô/�	�	Ø˜vÒ%Ð%Ý ¨%Ð0Ñ0Ô0�	�	Ø˜vÒ%Ð%ðð ð ð ð4ð 4ñ ŒYð4ð Ð8Ð8Ð8Ø 
Ò*Ð*Ý#¨TÐ2Ñ2Ô2�H�HØ &Ò(Ð(Ý#¨UÐ3Ñ3Ô3�H�HØ &Ò(Ð(ð!ð !ð !ð ðð ð ð ð ð ð ñ ”ðð ð  Ò-Ð-Ý*Ð,BÐ+CØ+8À4Ø2<ð >ñ  >ô  >�H�Hð Ð"3Ò3Ð3Ý*Ð,BÐ+CØ+8À4ð Iñ  Iô  I�Hðð ð ð ð ð ð ð ð ð  Ðr   )rO   r   r´   r   r½   r¹   r´   )r´   r´   )r   r§   r
   r   r   Úvaluesr$   r&   r'   r^   r„   )r   rÁ   Ú
res_arraysr¤   rÀ   Úpy_arrÚarrr¯   ri   r“   r”   rr   s            @@@r   Ú_test_nested_parallelism_2z)TestNumThreads._test_nested_parallelism_2f  s®  øøø€ õ ÑÔ Ò+Ð+Ø�MŠMÐ7Ñ8Ô8Ð8õ Ô$ qÑ(ˆØ•Ô(Ñ(¨1Ñ,ˆð@	ð @	ð @	ð @	ð @	ð @	ð @	õD Ô'¨!Ñ+ˆàˆ
ð<ð 	1ð 	1ˆIà:ð 1ð 1�
Ø Ò'Ð'¨I¸Ò,?Ð,?ØÝ Ñ%Ô%Ð%ð5+°H°HØ 	ñ5+ô 5+Ø+/ñ51ô 51�
˜9 jÐ0Ñ1Ð1ð	1ð ˜NÔ+ˆØ×$Ò$Ñ&Ô&ð 	1ð 	1ˆCÝŒJ×#Ò# C¨Ñ0Ô0Ð0Ð0õ ”8˜Q ˜FÑ#Ô#ˆå�q�&Ô2Ñ3Ô3ð 	ð 	ˆAØˆH�Q˜˜˜�T‰NˆNå
Œ
×Ò ¨&Ñ1Ô1Ð1Ð1Ð1r   é   c                 óÒ  ‡‡	— t          ¦   «         dk    r|                      d¦  «         dŠt          d¬¦  «        ˆfd„¦   «         Š	t          d¬¦  «        ˆ	fd„¦   «         }d}‰|z  }|d	z   } ||¦  «        \  }}|                      ||¦  «         |                      ||¦  «         ˆ	fd
„} ||¦  «        \  }}|                      ||¦  «         |                      ||¦  «         d S )Nr!   rŽ   i@B Trb   c                 óÊ   •— t          j        ‰¦  «        }d}t          | ¦  «         t          ‰¦  «        D ]}|dz  }t	          ¦   «         ||<   Œ|t          j        |¦  «        fS r™   )r$   r^   r   r	   r   r|   )Úlocal_ntÚtidrš   ri   ÚBIGs       €r   Úworkz7TestNumThreads._test_nested_parallelism_3.<locals>.workÙ  sc   ø€ å”(˜3‘-”-ˆCØˆCÝ˜HÑ%Ô%Ð%Ý˜C‘[”[ð )ð )�Ø�q‘�Ý&™œ��A‘�Ø�œ	 #™œÐ&Ð&r   c                 óî   •— t          | ¦  «         t          j        | ¦  «        }d}t          | ¦  «        D ]*} ‰| dz   ¦  «        \  }}t	          |¦  «        ||<   ||z  }Œ+|t          j        |¦  «        fS r™   )r   r$   r^   r	   r{   r|   )rq   ÚlensÚtotalri   Úmy_accÚtidsrÍ   s         €r   Útest_func_jitz@TestNumThreads._test_nested_parallelism_3.<locals>.test_func_jitã  s€   ø€ å˜HÑ%Ô%Ð%Ý”8˜HÑ%Ô%ˆDØˆEÝ˜HÑ%Ô%ð  ð  �Ø#˜t H¨q¡LÑ1Ô1‘�˜Ý˜d™)œ)��Q‘Ø˜‘��Ø�"œ) D™/œ/Ð)Ð)r   r:   r<   c                 ó\  •‡ — t          dgddd¬¦  «        ˆ ˆfd„¦   «         }t          j        ‰ dft          j        ¬¦  «        }t          j        ‰ t          j        ¬¦  «                             ‰ df¦  «        } |||¦  «         |                     ¦   «         t          j        |¦  «        fS )	Nzint64[:], int64[:]z(n), (n)TrO   rP   c                 ón   •—  ‰‰dz   ¦  «        \  }}t          |¦  «        |d<   | dxx         |z  cc<   d S )Nr<   r   )r{   )rÐ   rÏ   rÑ   rÒ   rq   rÍ   s       €€r   Útest_func_guvectorizezbTestNumThreads._test_nested_parallelism_3.<locals>.test_guvectorize.<locals>.test_func_guvectorize÷  sE   ø€ ð
  $˜t H¨q¡LÑ1Ô1‘�˜Ý˜d™)œ)��Q‘Ø�a��”˜FÑ"��‘��r   r<   rY   )r   r$   r^   r_   r‡   r¨   r|   )rq   rÖ   rÐ   rÏ   rÍ   s   `   €r   Útest_guvectorizezCTestNumThreads._test_nested_parallelism_3.<locals>.test_guvectorizeö  s¿   øø€ ÝÐ.Ð/Ø#Ø"&Ø *ð,ñ ,ô ,ð#ð #ð #ð #ð #ñ	,ô ,ð#õ
 ”H˜h¨˜]µ"´(Ð;Ñ;Ô;ˆEÝ”8˜H­B¬HÐ5Ñ5Ô5×=Ò=¸xÈ¸mÑLÔLˆDà!Ð! %¨Ñ.Ô.Ð.à—9’9‘;”;¥¤	¨$¡¤Ð/Ð/r   )r   r§   r   r=   r*   )
r   rÓ   ÚNTÚexpected_accÚexpected_thread_countr©   Úgot_tcr×   rÌ   rÍ   s
           @@r   Ú_test_nested_parallelism_3z)TestNumThreads._test_nested_parallelism_3Ï  sI  øø€ õ ÑÔ Ò+Ð+Ø�MŠMÐ7Ñ8Ô8Ð8ð ˆå	�tÐ	Ñ	Ô	ð	'ð 	'ð 	'ð 	'ñ 
Ô	ð	'õ 
�tÐ	Ñ	Ô	ð	*ð 	*ð 	*ð 	*ñ 
Ô	ð	*ð ˆØ˜R‘xˆØ " Q¡Ðà'˜-¨Ñ+Ô+‰ˆ�Ø×Ò˜ wÑ/Ô/Ð/Ø�ŠÐ-¨vÑ6Ô6Ð6ð	0ð 	0ð 	0ð 	0ð 	0ð" +Ð*¨2Ñ.Ô.‰ˆ�à×Ò˜ wÑ/Ô/Ð/Ø�ŠÐ-¨vÑ6Ô6Ð6Ð6Ð6r   Úlinuxz
Linux onlyc                 ó   ‡— t          j        d¦  «        }t          d„ ¦   «         Šˆfd„}d}|                       ‰¦   «         t          j        ¦  «         t          |¦  «         |                       ‰¦   «         |¦  «         |                     ¦   «         }|                     ||f¬¦  «        }| 	                    ¦   «          | 
                    ¦   «          |                      |                     ¦   «         |¦  «         d S )NÚforkc                  ó   — t          ¦   «         S r   rC   r.   r   r   r/   z8TestNumThreads._test_threadmask_across_fork.<locals>.foo  rE   r   c                 óB   •— |                        ‰¦   «         ¦  «         d S r   )Úput)Úqueuer/   s    €r   Úwrapz9TestNumThreads._test_threadmask_across_fork.<locals>.wrap  s!   ø€ Ø�IŠI�c�c‘e”eÑÔÐÐÐr   r<   )rR   Úargs)ÚmultiprocessingÚget_contextr   r=   r
   r   r   ÚQueueÚProcessÚstartÚjoinÚget)r   Úforkctxrä   rr   Úshared_queueÚpr/   s         @r   Ú_test_threadmask_across_forkz+TestNumThreads._test_threadmask_across_fork  sý   ø€ õ "Ô-¨fÑ5Ô5ˆå	ð	%ð 	%ñ 
Œð	%ð	ð 	ð 	ð 	ð 	ð ˆØ×Ò˜˜™œ¥Ô 8Ñ9Ô9Ð9Ý˜ÑÔÐØ×Ò˜˜™œ Ñ%Ô%Ð%Ø—}’}‘”ˆà�OŠO 4¨|¨oˆOÑ>Ô>ˆØ	�Š‰	Œ	ˆ	Ø	�Š‰ŒˆØ×Ò˜×)Ò)Ñ+Ô+¨TÑ2Ô2Ð2Ð2Ð2r   c                 ó8   — t          t          j        ¦  «         d S r   r   r   s    r   ÚtearDownzTestNumThreads.tearDown$  s   € Ý�Ô0Ñ1Ô1Ð1Ð1Ð1r   c                 óÆ  — t          ¦   «         }d}t          d¬¦  «        d„ ¦   «         }t          d¬¦  «        d„ ¦   «         }|                      |d¦  «          ||¦  «        \  }}|                      |d¦  «         t          j                             |d¦  «          ||¦  «        \  }}|                      |d¦  «         t          j                             |d¦  «         d S )Né   Frb   c                 ó”   — t          ¦   «         }t          j        | ¦  «        }t          | ¦  «        D ]}t          ¦   «         ||<   Œ||fS r   )r   r$   Úonesr	   )ÚsizeÚnjit_par_false_tidÚresri   s       r   Ú	par_falsezBTestNumThreads._test_get_thread_id_not_parallel.<locals>.par_false,  sH   € å!.¡¤ÐÝ”'˜$‘-”-ˆCÝ˜D‘\”\ð )ð )�Ý&™œ��A‘�Ø% sÐ*Ð*r   Tc                 ó”   — t          ¦   «         }t          j        | ¦  «        }t          | ¦  «        D ]}t          ¦   «         ||<   Œ||fS r   )r   r$   rö   r„   )r÷   Únjit_par_true_tidrù   ri   s       r   Úpar_truezATestNumThreads._test_get_thread_id_not_parallel.<locals>.par_true4  sH   € å -¡¤ÐÝ”'˜$‘-”-ˆCÝ˜4‘[”[ð )ð )�Ý&™œ��A‘�Ø$ cÐ)Ð)r   r   )r   r   r=   r$   r&   r'   )	r   Úpython_get_thread_idÚcheck_array_sizerú   rý   rø   Únjit_par_false_arrrü   Únjit_par_true_arrs	            r   Ú _test_get_thread_id_not_parallelz/TestNumThreads._test_get_thread_id_not_parallel'  s  € å,™œÐØÐå	�uÐ	Ñ	Ô	ð	+ð 	+ñ 
Ô	ð	+õ 
�tÐ	Ñ	Ô	ð	*ð 	*ñ 
Ô	ð	*ð 	×ÒÐ-¨qÑ1Ô1Ð1Ø1:°Ð;KÑ1LÔ1LÑ.ÐÐ.Ø×ÒÐ+¨QÑ/Ô/Ð/Ý
Œ
×ÒÐ 2°AÑ6Ô6Ð6Ø/7¨xÐ8HÑ/IÔ/IÑ,ÐÐ,Ø×ÒÐ*¨AÑ.Ô.Ð.Ý
Œ
×ÒÐ 1°1Ñ5Ô5Ð5Ð5Ð5r   N)Ú__name__Ú
__module__Ú__qualname__Ú_numba_parallel_test_r   r*   r   r9   ÚunittestÚskipIfr
   r   r@   rK   r`   rn   rs   rv   rˆ   rŒ   r°   rÆ   rÜ   ÚsysÚplatformÚ
startswithrð   rò   r  r.   r   r   r   r      s¬  € € € € € Ø!Ðð2ð 2ð 2ð
$ð $ð $ð ð
;ð 
;ñ Ôð
;ð Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð-ð -ñ KÔJñ Ôð-ð Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð>ð >ñ KÔJñ Ôð>ð* Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð%0ð %0ñ KÔJñ Ôð%0ðN Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð&ð &ñ KÔJñ Ôð&ð6 Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð+ð +ñ KÔJñ Ôð+ð Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð)ð )ñ KÔJñ Ôð)ð  Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð5ð 5ñ KÔJñ Ôð5ðB Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð 5ð  5ñ KÔJñ Ôð 5ðH Ø€X„_�VÔ-°Ò1Ð3IÑJÔJðS7ð S7ñ KÔJñ ÔðS7ðn Ø€X„_�VÔ-°Ò1Ð3IÑJÔJða2ð a2ñ KÔJñ Ôða2ðN Ø€X„_�VÔ-°Ò1Ð3IÑJÔJð97ð 97ñ KÔJñ Ôð97ðv Ø€X„_�VÔ-°Ò1Ð3IÑJÔJØ€X„_˜œ×0Ò0°Ñ9Ô9Ð9¸<ÑHÔHð3ð 3ñ IÔHñ KÔJñ Ôð3ð*2ð 2ð 2ð ð6ð 6ñ Ôð6ð 6ð 6r   r   c                   ó`   — e Zd ZeZdZd„ dD ¦   «         Zd„ Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )ÚTestNumThreadsBackendsFc                 ó2   — g | ]}|t           j        k    ¯|‘ŒS r.   )r
   r   )Ú.0ri   s     r   ú
<listcomp>z!TestNumThreadsBackends.<listcomp>J  s%   € ÐPÐPÐP˜°!µvÔ7OÒ2OÐ2O�1Ð2OÐ2OÐ2Or   )r<   r:   r²   rô   é   c                 óÔ   — t           j                             ¦   «         }t          |¦  «        |d<   t          |¦  «        |d<   t          j        ddd|g}|                      ||¦  «        S )NÚNUMBA_THREADING_LAYERr   z-mznumba.runtestsz-v)ÚosÚenvironÚcopyr4   r	  Ú
executableÚrun_cmd)r   Útestr   Únum_threadsÚenv_copyÚcmdlines         r   Úrun_test_in_separate_processz3TestNumThreadsBackends.run_test_in_separate_processL  s`   € Ý”:—?’?Ñ$Ô$ˆÝ,/°Ñ,@Ô,@ˆÐ(Ñ)Ý(+¨KÑ(8Ô(8ˆÐ$Ñ%Ý”> 4Ð)9¸4ÀÐFˆØ�|Š|˜G XÑ.Ô.Ð.r   c           	      óÚ   ‡‡‡	— | j         }| j        j        }|›d|›d|›�Š	ˆˆ	ˆfd„}|dd …         ›d‰›d‰›d�}t          | | t	          d¦  «         ||¦  «        ¦  «        ¦  «         d S )Nú.c                 ó€  •— |                       ‰‰‰¦  «        \  }}| j        rt          d|›d|›d�¦  «         |                      d|¦  «         |                      d|v¦  «         |                      d|v¦  «         t          j        d|¦  «        }|r*|                      |                     d¦  «        ¦  «         d S d S )	Nz
stdout:
 "z"
 stderr:
 "ú"ÚOKÚFAILÚERRORz\.\.\. skipped '(.*?)'r<   )	r  Ú_DEBUGÚprintr3   r#   ÚreÚsearchr§   Úgroup)r   ÚoÚeÚmÚbackendÚinjected_methodr  s       €€€r   Útest_templatez5TestNumThreadsBackends._inject.<locals>.test_templateY  sÔ   ø€ Ø×4Ò4°_ÀgØ5@ñBô B‰DˆAˆqàŒ{ð BÝ�¸1¸1¸1¸a¸a¸aÐ@ÑAÔAÐAØ�MŠM˜$ Ñ"Ô"Ð"Ø�OŠO˜F¨!˜OÑ,Ô,Ð,Ø�OŠO˜G¨1Ð,Ñ-Ô-Ð-Ý”	Ð3°QÑ7Ô7ˆAØð *Ø—’˜aŸgšg a™jœjÑ)Ô)Ð)Ð)Ð)ð*ð *r   r<   Ú_Ú_threadsÚlong_running)r  Ú_classr  Úsetattrr   )
ÚclsÚnamer-  Úbackend_guardr  ÚthemodÚtheclsr/  Úinjected_testr.  s
     ` `    @r   Ú_injectzTestNumThreadsBackends._injectS  sµ   øøø€ à”ˆØ”Ô$ˆØ(.¨¨°°°¸¸Ð=ˆð
	*ð 
	*ð 
	*ð 
	*ð 
	*ð 
	*ð 
	*ð /3°1°2°2¬h¨h¨h¸¸¸ÀÀÀÐMˆÝ��]Ø#•�NÑ#Ô# M M°-Ñ$@Ô$@ÑAÔAñ	Cô 	Cð 	Cð 	Cð 	Cr   c           	      óö   — | j         j                             ¦   «         D ]Y}| j                             ¦   «         D ]=\  }}| j        D ]0}|                     d¦  «        sŒ|                      ||||¦  «         Œ1Œ>ŒZd S )NÚ_test_)r3  Ú__dict__r  ÚbackendsÚitemsr  r  r;  )r5  r6  r-  r7  r  s        r   ÚgeneratezTestNumThreadsBackends.generatei  s¥   € à”JÔ'×,Ò,Ñ.Ô.ð 	Kð 	KˆDØ*-¬,×*<Ò*<Ñ*>Ô*>ð Kð KÑ&�˜Ø#&¤?ð Kð K�KØŸ?š?¨8Ñ4Ô4ð !Ø Ø—K’K  g¨}¸kÑJÔJÐJÐJðKðKð	Kð 	Kr   N)r  r  r  r   r3  r%  r  r  Úclassmethodr;  rA  r.   r   r   r  r  E  s‚   € € € € € Ø€FØ€Fð QÐPÐ.ÐPÑPÔP€Kð/ð /ð /ð ðCð Cñ „[ðCð* ðKð Kñ „[ðKð Kð Kr   r  Ú__main__)"Ú
__future__r   r   r   r	  r  r'  ræ   r  Únumpyr$   Únumbar   r   r   r	   r
   r   r   Únumba.np.ufunc.parallelr   Únumba.core.errorsr   Únumba.tests.supportr   r   r   Ú!numba.tests.test_parallel_backendr   r   r  rA  r  Úmainr.   r   r   ú<module>rL     s®  ðà @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @à 
€
€
€
Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ø €€€à Ð Ð Ð ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø )Ð )Ð )Ð )Ð )Ð )Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ >Ð >Ð >Ð >Ð >Ð >ðn6ð n6ð n6ð n6ð n6�Xñ n6ô n6ð n6ðb+Kð +Kð +Kð +Kð +KÐ-¨xñ +Kô +Kð +Kð\ × Ò Ñ !Ô !Ð !àˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   