U
    9%ek                  
   @   sR  d dl mZmZ d dlmZ d dlZd dlZd dlZd dlZd dl	m
Z d dl	mZ d dlmZ zd dlZdZW n ek
r   dZY nX d	Zd,d
dZdd Zdd Zdd ZejejejejdZdd dd dd dd dd dd dd dd dd d	Zdd dd d d d!d d"Zeeejd#Zd$d% Z d&d' Z!d(d) Z"d*d+ Z#dS )-    )assert_equalassert_)raisesN)_ccallback_c)_test_ccallback)LowLevelCallableTF       @c                 C   s,   | t krtd|d kr | d S | | S d S )Nz	bad value   )ERROR_VALUE
ValueError)a	user_data r   ^/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/scipy/_lib/tests/test_ccallback.pycallback_python   s
    r   c                 C   s:   t std t| tj}|j}t }|||}|S )Ncffi not installed)		HAVE_CFFIpytestskipctypescastZc_void_pvaluecffiFFI)base	signatureZvoidpaddressffifuncr   r   r   _get_cffi_func   s    
r   c                  C   s   t d} t t | t jS Nr   )r   Zc_doubler   ZpointerZc_voidp)r   r   r   r   _get_ctypes_data-   s    
r!   c                  C   s"   t std t } | ddS )Nr   zdouble *r   )r   r   r   r   r   new)r   r   r   r   _get_cffi_data2   s    
r#   )simpleZnodatanonlocalcythonc                   C   s   t S N)r   r   r   r   r   <lambda>B       r(   c                   C   s   t  S r'   )r   test_get_plus1_capsuler   r   r   r   r(   C   r)   c                   C   s   t tdS )NZplus1_cythonr   Zfrom_cython_test_ccallback_cythonr   r   r   r   r(   D   r)   c                   C   s   t jS r'   )r,   plus1_ctypesr   r   r   r   r(   E   r)   c                   C   s   t tjdS )Nz!double (*)(double, int *, void *))r   r,   r-   r   r   r   r   r(   F   s   c                   C   s   t  S r'   )r   Ztest_get_plus1b_capsuler   r   r   r   r(   H   r)   c                   C   s   t tdS )NZplus1b_cythonr+   r   r   r   r   r(   I   r)   c                   C   s   t jS r'   )r,   plus1b_ctypesr   r   r   r   r(   J   r)   c                   C   s   t tjdS )Nz)double (*)(double, double, int *, void *))r   r,   r.   r   r   r   r   r(   K   s   )	pythoncapsuler&   r   r   Z	capsule_bZcython_bZctypes_bZcffi_bc                   C   s   t  S r'   )r   Ztest_get_plus1bc_capsuler   r   r   r   r(   Q   r)   c                   C   s   t tdS )NZplus1bc_cythonr+   r   r   r   r   r(   R   r)   c                   C   s   t jS r'   )r,   plus1bc_ctypesr   r   r   r   r(   S   r)   c                   C   s   t tjdS )Nz1double (*)(double, double, double, int *, void *))r   r,   r1   r   r   r   r   r(   T   s   )Z
capsule_bcZ	cython_bcZ	ctypes_bcZcffi_bc)r   r   r0   c                  C   sN   dd } t t D ]4}t t D ]"}t t D ]}| ||| q4q$qd S )Nc                    sv   t |  } t    t|  } tkr2 fdd}nt |}t  t|  dd tt|  t t| |dd d S )Nc                    s
    | dS r    r   xr   r   r   r(   f   r)   z/test_callbacks.<locals>.check.<locals>.<lambda>      ?r   g      @)	CALLERSFUNCS
USER_DATASr   r   r   assert_raisesr   r
   )callerr   r   func2r   r4   r   check`   s    


ztest_callbacks.<locals>.check)sortedr6   keysr7   r8   r<   r:   r   r   r   r   r   test_callbacks_   s
    r@   c                  C   sN   dd } t t D ]4}t t D ]"}t t D ]}| ||| q4q$qd S )Nc              
      s   t |  } t|  }t     tkr2 fdd}nt |}t  tt| t d tt| |d t }z| |d W nH tk
r } z*t|}t|j	|k| td|k| W 5 d }~X Y nX d S )Nc                    s
    | dS r    r   r2   r4   r   r   r(      r)   z3test_bad_callbacks.<locals>.check.<locals>.<lambda>r5   z&double (double, double, int *, void *))
r6   r8   	BAD_FUNCSr   r   r9   r   strr   r   )r:   r   r   r;   Zllfuncerrmsgr   r4   r   r<   {   s     


z!test_bad_callbacks.<locals>.check)r=   r6   r>   rA   r8   r?   r   r   r   test_bad_callbacksz   s
    rE   c                  C   s`   t j} t  }t|dd}t|jd tt| |d t|dd}t|jd t| |dd d S )Nzbad signature)r      zdouble (double, int *, void *)   )r   test_call_simpler*   r   r   r   r9   r   )r:   r   Z
llcallabler   r   r   test_signature_override   s    rI   c                     s2    fdd  fdd} t  D ]}| | q d S )Nc                    s0   | dkrdS   fdd| d }d| S d S )Nr   r	   c                    s
    | S r'   r   r2   callbackr:   r   r   r(      r)   z5test_threadsafety.<locals>.callback.<locals>.<lambda>   r   )r   r:   resrK   )r:   r   rK      s    z#test_threadsafety.<locals>.callbackc                    sx   t    g d fddfddtdD }|D ]}|  q<|D ]}|  qNtd gt|  d S )N
   c                     s,   t d  fdd} |  d S )Ng{Gz?c                    s
    | S r'   r   r2   rJ   r   r   r(      r)   z?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>)timesleepappend)r)rK   r:   countresultsr   r   run   s    
z-test_threadsafety.<locals>.check.<locals>.runc                    s   g | ]}t j d qS ))target)	threadingThread).0j)rV   r   r   
<listcomp>   s     z4test_threadsafety.<locals>.check.<locals>.<listcomp>   r   )r6   rangestartjoinr   len)r:   threadsthreadrN   )r:   rT   rU   rV   r   r<      s    

z test_threadsafety.<locals>.check)r6   r>   )r<   r:   r   rN   r   test_threadsafety   s    rd   )N)$Znumpy.testingr   r   r   r   r9   rP   r   rX   Z
scipy._libr   r,   r   Zscipy._lib._ccallbackr   r   r   ImportErrorr
   r   r   r!   r#   rH   Ztest_call_nodataZtest_call_nonlocalZtest_call_cythonr6   r7   rA   Ztest_get_data_capsuler8   r@   rE   rI   rd   r   r   r   r   <module>   s\   

			!