
    `i                         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e	j
                  Z G d de	j
                  Zedk    r e	j                     dS dS )	    N)captured_stdout)	vectorizeguvectorizec                       e Zd ZdZd Zd ZdS )TestParUfuncIssuesFc                    t          dd          d             }d}|dk    rdt          j        |           t          j        d          x}}t          j                            ||z    |||                     |dz  }|dk    bd	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                     | |z   S N )abs     /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/numba/tests/npyufunc/test_parallel_ufunc_issues.pyfnvz4TestParUfuncIssues.test_thread_response.<locals>.fnv   s    q5L       gh㈵>i    N)r   timesleepnparangetestingassert_equal)selfr   
sleep_timer   r   s        r   test_thread_responsez'TestParUfuncIssues.test_thread_response   s     
.z	B	B	B	 	 
C	B	 
7""Jz"""Ie$$$AJ##AE33q!99555!OJ 7""""""r   c                 .   t          j        dt           j                  }dfd} ||          t          dgdd          fd            }d	D ]?}t	          j        |t          j        
          }|                                }t                      5 } ||          }ddd           n# 1 swxY w Y   |	                                }	|
                                 t          t          d |	                                                    }
d t          |          D             }|fdt          |          D             z  }t          |          }|                     |
|           t          j                            |d|z             AdS )z<
        Testing issue #1998 due to GIL reacquiring
        N
abcdefghijc                 2    t          |                     d S r   printx
characterss    r   barz;TestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.bar+       *Q-     r   zint32(int32)r	   Tr
   nopythonc                 N    t          | dz              | dz             | dz  S )N
   r   r!   )r$   cbars    r   fooz;TestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.foo1   s,    !b&MMMDRLLLq5Lr   r   r+   d   i  dtypec                 *    |                                  S r   stripr$   s    r   <lambda>z@TestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.<lambda>D       aggii r   c                 2    g | ]}t          |d z            S r+   str.0r$   s     r   
<listcomp>zBTestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.<listcomp>F   "    AAAqs1r6{{AAAr   c                 &    g | ]}|d z           S r9   r   r=   r$   r%   s     r   r>   zBTestParUfuncIssues.test_gil_reacquire_deadlock.<locals>.<listcomp>G   "    IIIq
1r6 2IIIr   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%   s               @@r   test_gil_reacquire_deadlockz.TestParUfuncIssues.test_gil_reacquire_deadlock#   s   
  v~66!
	! 	! 	! 	! 	! uSzz 
N#J	F	F	F	 	 	 	 
G	F	 ( 	4 	4E	%rx000AFFHHE "" cc!ff              \\^^FIIKKK$7$79J9J9L9L M MNNJAAE%LLAAAOIIIIE%LLIIIIO$_55OZ999J##CU3333#	4 	4s   B11B5	8B5	N)__name__
__module____qualname___numba_parallel_test_r   rX   r   r   r   r   r      s8        !  ((4 (4 (4 (4 (4r   r   c                       e Zd ZdZd ZdS )TestParGUfuncIssuesFc                 0   t          j        dt           j                  }dfd} ||          t          dgddd          fd	            }d
D ]?}t	          j        |t          j                  }|                                }t                      5 } ||          }ddd           n# 1 swxY w Y   |	                                }	|
                                 t          t          d |	                                                    }
d t          |          D             }|fdt          |          D             z  }t          |          }|                     |
|           t          j                            |d|z             AdS )zR
        Testing similar issue to #1998 due to GIL reacquiring for Gufunc
        Nr   c                 2    t          |                     d S r   r!   r#   s    r   r&   z<TestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.bar[   r'   r   z(int32, int32[:])z()->()r	   Tr(   c                 X    t          | dz              | dz             | dz  |d<   d S )Nr+   r   r   r!   )r$   outr,   s     r   r-   z<TestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.fooa   s6     !b&MMMDRLLLUCFFFr   r.   r0   c                 *    |                                  S r   r3   r5   s    r   r6   zATestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.<lambda>u   r7   r   c                 2    g | ]}t          |d z            S r9   r:   r<   s     r   r>   zCTestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.<listcomp>w   r?   r   c                 &    g | ]}|d z           S r9   r   rA   s     r   r>   zCTestParGUfuncIssues.test_gil_reacquire_deadlock.<locals>.<listcomp>x   rB   r   r   )rC   rD   rE   r   r   r   rF   rG   r   rH   rI   rJ   rK   rL   rM   rN   r   r   rO   s               @@r   rX   z/TestParGUfuncIssues.test_gil_reacquire_deadlockS   s   
  v~66!
	! 	! 	! 	! 	! uSzz 
)*H&
7 
7 
7	 	 	 	
7 
7	 ( 	4 	4E	%rx000AFFHHE "" cc!ff              \\^^FIIKKK$7$79J9J9L9L M MNNJAAE%LLAAAOIIIIE%LLIIIIO$_55OZ999J##CU3333#	4 	4s   B22B6	9B6	N)rY   rZ   r[   r\   rX   r   r   r   r^   r^   O   s)        !)4 )4 )4 )4 )4r   r^   __main__)r   rC   numpyr   numba.tests.supportr   numbar   r   unittestTestCaser   r^   rY   mainr   r   r   <module>rm      s          / / / / / / ( ( ( ( ( ( ( ( @4 @4 @4 @4 @4* @4 @4 @4H-4 -4 -4 -4 -4(+ -4 -4 -4` zHMOOOOO r   