o
    gi#                     @   s|   d dl Z d dlZd dlZd dlmZ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skip_if_freethreading)	vectorizeguvectorizec                   @   s$   e Zd ZdZdd Ze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
   b/home/kuhnn/.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   foo2   s   z;TestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.foor   r&   d   i  dtypec                 S      |   S r	   stripr   r
   r
   r   <lambda>E       z@TestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.<lambda>c                 S      g | ]}t |d  qS r&   str.0r   r
   r
   r   
<listcomp>G       zBTestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.<listcomp>c                       g | ]} |d   qS r4   r
   r7   r    r
   r   r9   H   r:   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   r   rR   r
   r
   r
   r   r      s
    r   c                   @   s   e Zd ZdZe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)   c   s   z<TestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.foor*   r,   c                 S   r.   r	   r/   r   r
   r
   r   r1   w   r2   zATestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.<lambda>c                 S   r3   r4   r5   r7   r
   r
   r   r9   y   r:   zCTestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.<listcomp>c                    r;   r4   r
   r7   r    r
   r   r9   z   r:   r   )r<   r=   r>   r   r   r   r?   r@   r   rA   rB   rC   rD   rE   rF   rG   r   r   rH   r
   rQ   r   rR   T   s.   
z/TestParGUfuncIssues.test_gil_reacquire_deadlockN)rS   rT   rU   rV   r   rR   r
   r
   r
   r   rW   P   s    rW   __main__)r   r<   numpyr   numba.tests.supportr   r   numbar   r   unittestTestCaser   rW   rS   mainr
   r
   r
   r   <module>   s    E1