o
    Ö­j  ã                
   @   sP  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yC   dZY nw 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 u r| d S | | S )Nz	bad valueé   )ÚERROR_VALUEÚ
ValueError)ÚaÚ	user_data© r   ú\/var/www/html/CropPilot/venv/lib/python3.10/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ÚcastÚc_void_pÚvalueÚcffiÚFFI)ÚbaseÚ	signatureÚvoidpÚaddressÚffiÚfuncr   r   r   Ú_get_cffi_func   s   
r!   c                  C   s   t  d¡} t  t  | ¡t j¡S ©Nr   )r   Úc_doubler   ÚpointerÚ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(   )ÚsimpleÚnodataÚnonlocalÚcythonc                   C   s   t S ©N)r   r   r   r   r   Ú<lambda>B   s    r.   c                   C   ó   t  ¡ S r-   )r   Útest_get_plus1_capsuler   r   r   r   r.   C   ó    c                   C   ó   t  td¡S )NÚplus1_cython©r   Úfrom_cythonÚ_test_ccallback_cythonr   r   r   r   r.   D   ó    ÿc                   C   ó   t jS r-   )r6   Úplus1_ctypesr   r   r   r   r.   F   ó    c                   C   ó   t tjdƒS )Nz!double (*)(double, int *, void *))r!   r6   r9   r   r   r   r   r.   G   r7   c                   C   r/   r-   )r   Útest_get_plus1b_capsuler   r   r   r   r.   I   r1   c                   C   r2   )NÚplus1b_cythonr4   r   r   r   r   r.   J   r7   c                   C   r8   r-   )r6   Úplus1b_ctypesr   r   r   r   r.   L   r:   c                   C   r;   )Nz)double (*)(double, double, int *, void *))r!   r6   r>   r   r   r   r   r.   M   r7   )	ÚpythonÚcapsuler,   r   r   Ú	capsule_bÚcython_bÚctypes_bÚcffi_bc                   C   r/   r-   )r   Útest_get_plus1bc_capsuler   r   r   r   r.   S   r1   c                   C   r2   )NÚplus1bc_cythonr4   r   r   r   r   r.   T   r7   c                   C   r8   r-   )r6   Úplus1bc_ctypesr   r   r   r   r.   V   r:   c                   C   r;   )Nz1double (*)(double, double, double, int *, void *))r!   r6   rG   r   r   r   r   r.   W   s    þ)Ú
capsule_bcÚ	cython_bcÚ	ctypes_bcÚcffi_bc)r   r   r@   c                  C   óN   dd„ } t t ¡ ƒD ]}t t ¡ ƒD ]}t t ¡ ƒD ]}| |||ƒ qqq
d S )Nc                    sv   t |  } tˆ  ƒ ‰ t| ƒ }ˆ tu r‡ fdd„}n	tˆ |ƒ}tˆ ƒ‰ t| ˆ dƒdƒ tt| ˆ tƒ t| |dƒdƒ d S )Nc                    ó
   ˆ | dƒS r"   r   ©Úx©r    r   r   Úfunc2k   ó   
z,test_callbacks.<locals>.check.<locals>.func2ç      ð?r   g      @)	ÚCALLERSÚFUNCSÚ
USER_DATASr   r   r   Úassert_raisesr   r
   )Úcallerr    r   rQ   r   rP   r   Úchecke   s   


ztest_callbacks.<locals>.check)ÚsortedrT   ÚkeysrU   rV   ©rY   rX   r    r   r   r   r   Útest_callbacksd   s   ÿÿÿr]   c                  C   rL   )Nc              
      sÊ   t |  } t| ƒ }tˆ  ƒ ‰ ˆ tu r‡ fdd„}n	tˆ |ƒ}tˆ ƒ‰ tt| tˆ ƒdƒ tt| |dƒ tˆ ƒ}z| |dƒ W d S  tyd } zt|ƒ}t|j	|v |ƒ td|v |ƒ W Y d }~d S d }~ww )Nc                    rM   r"   r   rN   rP   r   r   rQ   ‡   rR   z0test_bad_callbacks.<locals>.check.<locals>.func2rS   z&double (double, double, int *, void *))
rT   rV   Ú	BAD_FUNCSr   r   rW   r   Ústrr   r   )rX   r    r   rQ   ÚllfuncÚerrÚmsgr   rP   r   rY   �   s$   


€ýz!test_bad_callbacks.<locals>.check)rZ   rT   r[   r^   rV   r\   r   r   r   Útest_bad_callbacks€   s   ÿÿÿrc   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_simpler0   r   r   r   rW   r   )rX   r    Ú
llcallabler   r   r   Útest_signature_override¢   s   rh   c                     s2   ‡ fdd„‰ ‡ fdd„} t  ¡ D ]}| |ƒ qd S )Nc                    s,   | dkrdS ˆ ‡‡ fdd„| d ƒ}d| S )Nr   r	   c                    ó
   ˆ | ˆƒS r-   r   rN   ©ÚcallbackrX   r   r   r.   ´   ó   
 z5test_threadsafety.<locals>.callback.<locals>.<lambda>é   r   )r   rX   Úres©rk   )rX   r   rk   °   s   z#test_threadsafety.<locals>.callbackc                    sx   t ˆ  ‰ g ‰d‰‡‡ ‡‡fdd„‰‡fdd„tdƒD ƒ}|D ]}| ¡  q|D ]}| ¡  q'tˆdˆ gt|ƒ ƒ d S )Né
   c                     s,   t  d¡ ˆ‡ ‡fdd„ˆƒ} ˆ | ¡ d S )Ng{®Gáz„?c                    ri   r-   r   rN   rj   r   r   r.   À   rl   z?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>)ÚtimeÚsleepÚappend)Úr)rk   rX   ÚcountÚresultsr   r   Úrun¾   s   
z-test_threadsafety.<locals>.check.<locals>.runc                    s   g | ]}t jˆ d �‘qS ))Útarget)Ú	threadingÚThread)Ú.0Új)rw   r   r   Ú
<listcomp>Ã   s    z4test_threadsafety.<locals>.check.<locals>.<listcomp>é   r   )rT   ÚrangeÚstartÚjoinr   Úlen)rX   ÚthreadsÚthreadro   )rX   ru   rv   rw   r   rY   ·   s   

z test_threadsafety.<locals>.check)rT   r[   )rY   rX   r   ro   r   Útest_threadsafety¯   s
   
ÿr…   r-   )$Únumpy.testingr   r   r   r   rW   rq   r   ry   Ú
scipy._libr   r6   r   Úscipy._lib._ccallbackr   r   r   ÚImportErrorr
   r   r!   r&   r(   rf   Útest_call_nodataÚtest_call_nonlocalÚtest_call_cythonrT   rU   r^   Útest_get_data_capsulerV   r]   rc   rh   r…   r   r   r   r   Ú<module>   s`    ÿ
	ü	ôûý"