§
    ƒÛgã
  ã                   óÀ   — d Z ddlZddlZddlZddlmZmZmZ ddl	m
Z
mZ ddlmZ ddlZd„ Zd„ Zd„ Z G d	„ d
ej        ¦  «        Zedk    r ej        ¦   «          dS dS )zJ
Test threadsafety for compiler.
These tests will cause segfault if fail.
é    N)ÚjitÚ	vectorizeÚguvectorize)Útemp_directoryÚoverride_config)Úconfigc                 ó*   — t          j        | ¦  «        S ©N)ÚnpÚones)ÚnÚvs     úS/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_threadsafety.pyÚfoor      s   € ÝŒ7�1‰:Œ:Ðó    c                 ó   — | |z   S r
   © )ÚaÚbs     r   Ú	ufunc_foor      s   € Øˆq‰5€Lr   c                 ó   — | |z   |d<   d S )Nr   r   )r   r   Úouts      r   Ú
gufunc_foor      s   € Ø�‰U€Cˆ�F€F€Fr   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 )ÚTestThreadSafetyc                 ó   ‡— ˆfd„}|S )Nc                  óP   •—  t          di ‰¤Žt          ¦  «        }  | dd¦  «        S )Né   é
   r   )r   r   )ÚcfuncÚoptionss    €r   Úrunnerz(TestThreadSafety.run_jit.<locals>.runner!   s,   ø€ Ø"•C�N�N˜'�N�N¥3Ñ'Ô'ˆEà�5˜˜B‘<”<Ðr   r   ©Úselfr!   r"   s    ` r   Úrun_jitzTestThreadSafety.run_jit    s#   ø€ ð	 ð 	 ð 	 ð 	 ð 	 ð ˆr   c                 óH  ‡‡— t          | j        j        ¦  «        | _        t	          d| j        ¦  «        5  ˆfd„Šˆfd„t          d¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|D ]}|                     ¦   «          Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )NÚ	CACHE_DIRc                  óh   •— t          d¦  «        D ] } t          j        ‰¦  «        } |¦   «          Œ!d S )Nr   )ÚrangeÚrandomÚchoice)Ú_ÚfnÚfnlists     €r   Úchooserz-TestThreadSafety.run_compile.<locals>.chooser*   s>   ø€ Ý˜r™œð ð �AÝœ vÑ.Ô.�BØ�B‘D”D�D�Dðð r   c                 ó:   •— g | ]}t          j        ‰¬ ¦  «        ‘ŒS ))Útarget)Ú	threadingÚThread)Ú.0Úir/   s     €r   ú
<listcomp>z0TestThreadSafety.run_compile.<locals>.<listcomp>/   s7   ø€ ð &ð &ð &Øõ Ô#¨7Ð3Ñ3Ô3ð &ð &ð &r   r   )r   Ú	__class__Ú__name__Ú
_cache_dirr   r)   ÚstartÚjoin)r$   r.   ÚthsÚthr/   s    `  @r   Úrun_compilezTestThreadSafety.run_compile'   s  øø€ Ý(¨¬Ô)@ÑAÔAˆŒÝ˜[¨$¬/Ñ:Ô:ð 	ð 	ðð ð ð ð ð
&ð &ð &ð &Ý! !™HœHð&ñ &ô &ˆCàð ð �Ø—’‘
”
�
�
Øð ð �Ø—’‘	”	�	�	ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ¶ABÂBÂBc                 óZ   — |                       |                      d¬¦  «        g¦  «         d S ©NT©Únopython©r>   r%   ©r$   s    r   Útest_concurrent_jitz$TestThreadSafety.test_concurrent_jit6   s-   € Ø×Ò˜$Ÿ,š,°˜,Ñ5Ô5Ð6Ñ7Ô7Ð7Ð7Ð7r   c                 ó\   — |                       |                      dd¬¦  «        g¦  «         d S ©NT©rB   ÚcacherC   rD   s    r   Útest_concurrent_jit_cachez*TestThreadSafety.test_concurrent_jit_cache9   s/   € Ø×Ò˜$Ÿ,š,°¸D˜,ÑAÔAÐBÑCÔCÐCÐCÐCr   c                 ó   ‡— ˆfd„}|S )Nc                  óÐ   •—  t          dgfi ‰¤Žt          ¦  «        } t          j                             d¦  «                             t          j        ¦  «        x}} | ||¦  «        S )Nz(f4, f4)r   )r   r   r   r*   ÚastypeÚfloat32)r    r   r   r!   s      €r   r"   z.TestThreadSafety.run_vectorize.<locals>.runner=   s^   ø€ Ø6•I˜z˜lÐ6Ð6¨gÐ6Ð6µyÑAÔAˆEÝ”I×$Ò$ RÑ(Ô(×/Ò/µ´
Ñ;Ô;Ð;ˆA�Ø�5˜˜A‘;”;Ðr   r   r#   s    ` r   Úrun_vectorizezTestThreadSafety.run_vectorize<   s#   ø€ ð	ð 	ð 	ð 	ð 	ð ˆr   c                 óZ   — |                       |                      d¬¦  «        g¦  «         d S r@   ©r>   rO   rD   s    r   Útest_concurrent_vectorizez*TestThreadSafety.test_concurrent_vectorizeC   s0   € Ø×Ò˜$×,Ò,°dÐ,Ñ;Ô;Ð<Ñ=Ô=Ð=Ð=Ð=r   c                 ó\   — |                       |                      dd¬¦  «        g¦  «         d S rG   rQ   rD   s    r   Útest_concurrent_vectorize_cachez0TestThreadSafety.test_concurrent_vectorize_cacheF   s2   € Ø×Ò˜$×,Ò,°dÀ$Ð,ÑGÔGÐHÑIÔIÐIÐIÐIr   c                 ó   ‡— ˆfd„}|S )Nc                  óÖ   •— dg}  t          | dfi ‰¤Žt          ¦  «        }t          j                             d¦  «                             t          j        ¦  «        x}} |||¦  «        S )Nz(f4, f4, f4[:])z	(),()->()r   )r   r   r   r*   rM   rN   )Úsigr    r   r   r!   s       €r   r"   z0TestThreadSafety.run_guvectorize.<locals>.runnerJ   sf   ø€ Ø$Ð%ˆCØ<•K  [Ð<Ð<°GÐ<Ð<½ZÑHÔHˆEÝ”I×$Ò$ RÑ(Ô(×/Ò/µ´
Ñ;Ô;Ð;ˆA�Ø�5˜˜A‘;”;Ðr   r   r#   s    ` r   Úrun_guvectorizez TestThreadSafety.run_guvectorizeI   s#   ø€ ð	ð 	ð 	ð 	ð 	ð
 ˆr   c                 óZ   — |                       |                      d¬¦  «        g¦  «         d S r@   ©r>   rX   rD   s    r   Útest_concurrent_guvectorizez,TestThreadSafety.test_concurrent_guvectorizeQ   s0   € Ø×Ò˜$×.Ò.¸Ð.Ñ=Ô=Ð>Ñ?Ô?Ð?Ð?Ð?r   c                 ó\   — |                       |                      dd¬¦  «        g¦  «         d S rG   rZ   rD   s    r   Ú!test_concurrent_guvectorize_cachez2TestThreadSafety.test_concurrent_guvectorize_cacheT   s2   € Ø×Ò˜$×.Ò.¸ÀDÐ.ÑIÔIÐJÑKÔKÐKÐKÐKr   c           
      ó2  — |                       |                      dd¬¦  «        |                      d¬¦  «        |                      dd¬¦  «        |                      d¬¦  «        |                      dd¬¦  «        |                      d¬¦  «        g¦  «         d S )NTrH   rA   )r>   r%   rO   rX   rD   s    r   Útest_concurrent_mix_usez(TestThreadSafety.test_concurrent_mix_useW   s¥   € Ø×Ò˜$Ÿ,š,°¸D˜,ÑAÔAØŸ,š,°˜,Ñ5Ô5Ø×,Ò,°dÀ$Ð,ÑGÔGØ×,Ò,°dÐ,Ñ;Ô;Ø×.Ò.¸ÀDÐ.ÑIÔIØ×.Ò.¸Ð.Ñ=Ô=ð?ñ 	@ô 	@ð 	@ð 	@ð 	@r   N)r8   Ú
__module__Ú__qualname__r%   r>   rE   rJ   rO   rR   rT   rX   r[   r]   r_   r   r   r   r   r      sÊ   € € € € € ðð ð ðð ð ð8ð 8ð 8ðDð Dð Dðð ð ð>ð >ð >ðJð Jð Jðð ð ð@ð @ð @ðLð Lð Lð@ð @ð @ð @ð @r   r   Ú__main__)Ú__doc__r2   r*   Únumpyr   Únumbar   r   r   Únumba.tests.supportr   r   Ú
numba.corer   Úunittestr   r   r   ÚTestCaser   r8   Úmainr   r   r   ú<module>rk      s  ððð ð Ð Ð Ð Ø €€€à Ð Ð Ð à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø Ð Ð Ð Ð Ð Ø €€€ðð ð ðð ð ðð ð ð
?@ð ?@ð ?@ð ?@ð ?@�xÔ(ñ ?@ô ?@ð ?@ðD ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   