o
    ۾i                     @   sx   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dl	Z	G dd de	j
ZG dd de	j
Zedkr:e	  dS dS )	    N)captured_stdout)	vectorizeguvectorizec                   @   s    e Zd ZdZdd Zdd ZdS )TestParUfuncIssuesFc                 C   sh   t ddddd }d}|dkr2t| td }}tj|| ||| |d	 }|dksd
S d
S )z
        Related to #89.
        This does not test #89 but tests the fix for it.
        We want to make sure the worker threads can be used multiple times
        and with different time gap between each execution.
        zfloat64(float64, float64)parallel)targetc                 S   s   | | S N )abr	   r	   c/home/ubuntu/.local/lib/python3.10/site-packages/numba/tests/npyufunc/test_parallel_ufunc_issues.pyfnv   s   z4TestParUfuncIssues.test_thread_response.<locals>.fnv   gh㈵>i    N)r   timesleepnparangetestingassert_equal)selfr   
sleep_timer
   r   r	   r	   r   test_thread_response   s   


z'TestParUfuncIssues.test_thread_responsec              	      s  t dt j}dfdd}|| tdgddd fd	d
}dD ]a}tj|tjd}| }t }||}W d   n1 sCw   Y  |	 }	|
  ttdd |	 }
dd t|D }|fddt|D 7 }t|}| |
| tj|d|  q#dS )z<
        Testing issue #1998 due to GIL reacquiring
        N
abcdefghijc                       t  |   d S r   printx
charactersr	   r   bar+      z;TestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.barzint32(int32)r   Tr   nopythonc                    s    t | d   | d  | d S )N
   r   r   r   cbarr	   r   foo1   s   z;TestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.foor   r%   d   i  dtypec                 S      |   S r   stripr   r	   r	   r   <lambda>D       z@TestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.<lambda>c                 S      g | ]}t |d  qS r%   str.0r   r	   r	   r   
<listcomp>F       zBTestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.<listcomp>c                       g | ]} |d   qS r3   r	   r6   r   r	   r   r8   G   r9   r   )ctypes	CFUNCTYPEc_int32r   r   r   int32copyr   getvalueclosesortedmap
splitlinesrangeassertEqualr   r   r   protor!   r(   nelemr
   acopybufgotstdout
got_outputexpected_outputr	   r'   r    r   test_gil_reacquire_deadlock#   s*   
z.TestParUfuncIssues.test_gil_reacquire_deadlockN)__name__
__module____qualname___numba_parallel_test_r   rQ   r	   r	   r	   r   r      s    r   c                   @   s   e Zd ZdZdd ZdS )TestParGUfuncIssuesFc              	      s  t dt j}dfdd}|| tdgdddd	 fd
d}dD ]a}tj|tjd}| }t }||}W d   n1 sDw   Y  |	 }	|
  ttdd |	 }
dd t|D }|fddt|D 7 }t|}| |
| tj|d|  q$dS )zR
        Testing similar issue to #1998 due to GIL reacquiring for Gufunc
        Nr   c                    r   r   r   r   r   r	   r   r!   [   r"   z<TestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.barz(int32, int32[:])z()->()r   Tr#   c                    s(   t | d   | d  | d |d< d S )Nr%   r   r   r   )r   outr&   r	   r   r(   a   s   z<TestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.foor)   r+   c                 S   r-   r   r.   r   r	   r	   r   r0   u   r1   zATestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.<lambda>c                 S   r2   r3   r4   r6   r	   r	   r   r8   w   r9   zCTestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.<listcomp>c                    r:   r3   r	   r6   r   r	   r   r8   x   r9   r   )r;   r<   r=   r   r   r   r>   r?   r   r@   rA   rB   rC   rD   rE   rF   r   r   rG   r	   rP   r   rQ   S   s.   
z/TestParGUfuncIssues.test_gil_reacquire_deadlockN)rR   rS   rT   rU   rQ   r	   r	   r	   r   rV   O   s    rV   __main__)r   r;   numpyr   numba.tests.supportr   numbar   r   unittestTestCaser   rV   rR   mainr	   r	   r	   r   <module>   s    D0