
    ^Mh              
       R   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 	 d dlZdZn# e$ r dZY nw xY wd	Zd#d
Zd Zd Zd Zej        ej        ej        ej        dZd d d d d d d d d d	Zd d d d dZeeej        dZd Z d  Z!d! Z"d" Z#dS )$    )assert_equalassert_)raisesN)_ccallback_c)_test_ccallback)LowLevelCallableTF       @c                 N    | t           k    rt          d          || dz   S | |z   S )Nz	bad value   )ERROR_VALUE
ValueError)a	user_datas     _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/_lib/tests/test_ccallback.pycallback_pythonr      s4    K%%%1u9}    c                     t           st          j        d           t          j        | t          j                  }|j        }t          j                    }|                    ||          }|S )Ncffi not installed)		HAVE_CFFIpytestskipctypescastc_void_pvaluecffiFFI)base	signaturevoidpaddressffifuncs         r   _get_cffi_funcr$      s\     *())) Kfo..EkG (**C88Iw''DKr   c                      t          j        d          } t          j        t          j        |           t           j                  S Nr	   )r   c_doubler   pointerc_voidp)r   s    r   _get_ctypes_datar*   -   s/    OC  E;v~e,,fn===r   c                      t           st          j        d           t          j                    } |                     dd          S )Nr   zdouble *r	   )r   r   r   r   r   new)r"   s    r   _get_cffi_datar-   2   s:     *()))
(**C77:s###r   )simplenodatanonlocalcythonc                      t           S N)r    r   r   <lambda>r5   B   s    o r   c                  (    t          j                    S r3   )r   test_get_plus1_capsuler4   r   r   r5   r5   C   s    =?? r   c                  6    t          j        t          d          S )Nplus1_cythonr   from_cython_test_ccallback_cythonr4   r   r   r5   r5   D   s    &23I3AC C r   c                      t           j        S r3   )r<   plus1_ctypesr4   r   r   r5   r5   F   s
    ,9 r   c                  6    t          t          j        d          S )Nz!double (*)(double, int *, void *))r$   r<   r>   r4   r   r   r5   r5   G   s    N#9#F#FH H r   c                  (    t          j                    S r3   )r   test_get_plus1b_capsuler4   r   r   r5   r5   I   s    @BB r   c                  6    t          j        t          d          S )Nplus1b_cythonr:   r4   r   r   r5   r5   J   s    (45K5DF F r   c                      t           j        S r3   )r<   plus1b_ctypesr4   r   r   r5   r5   L   s
    .< r   c                  6    t          t          j        d          S )Nz)double (*)(double, double, int *, void *))r$   r<   rE   r4   r   r   r5   r5   M   s    n%;%I%PR R r   )	pythoncapsuler1   r   r   	capsule_bcython_bctypes_bcffi_bc                  (    t          j                    S r3   )r   test_get_plus1bc_capsuler4   r   r   r5   r5   S   s    /BDD r   c                  6    t          j        t          d          S )Nplus1bc_cythonr:   r4   r   r   r5   r5   T   s    )56L6FH H r   c                      t           j        S r3   )r<   plus1bc_ctypesr4   r   r   r5   r5   V   s
    /> r   c                  6    t          t          j        d          S )Nz1double (*)(double, double, double, int *, void *))r$   r<   rR   r4   r   r   r5   r5   W   s    ~-;  r   )
capsule_bc	cython_bc	ctypes_bccffi_bc)r   r   rH   c                     d } t          t                                                    D ]a}t          t                                                    D ]8}t          t                                                    D ]} | |||           9bd S )Nc                 n   t           |          } t                               t          |                     }t          u rfd}nt	          |          }t	                    t           | d          d           t          t          | t                     t           | |d          d           d S )Nc                      | d          S r&   r4   xr#   s    r   func2z,test_callbacks.<locals>.check.<locals>.func2k       tAs||#r         ?r	   g      @)	CALLERSFUNCS
USER_DATASr   r   r   assert_raisesr   r   )callerr#   r   r]   s    `  r   checkztest_callbacks.<locals>.checke   s    T{}}y)++	?""$ $ $ $ $ $ %T955E#D))D 	VVD#&&,,, 	j&$<<< 	VVE3''-----r   )sortedr`   keysra   rb   re   rd   r#   r   s       r   test_callbacksri   d   s    . . .* (( / /5::<<(( 	/ 	/D#JOO$5$566 / /	fdI..../	// /r   c                     d } t          t                                                    D ]a}t          t                                                    D ]8}t          t                                                    D ]} | |||           9bd S )Nc                    t           |          } t          |                     }t                               t          u rfd}nt	          |          }t	                    t          t          | t	                    d           t          t          | |d           t	                    }	  | |d           d S # t          $ rC}t          |          }t          |j	        |v |           t          d|v |           Y d }~d S d }~ww xY w)Nc                      | d          S r&   r4   r[   s    r   r]   z0test_bad_callbacks.<locals>.check.<locals>.func2   r^   r   r_   z&double (double, double, int *, void *))
r`   rb   	BAD_FUNCSr   r   rc   r   strr   r   )rd   r#   r   r]   llfuncerrmsgs    `     r   re   z!test_bad_callbacks.<locals>.check   sB   y)++	  ?""$ $ $ $ $ $ %T955E#D))D 	j&*:4*@*@#FFF 	j&%555 "$''	JF63 	J 	J 	Jc((CF$+S111<CSIIIIIIIII	Js   0B> >
D8DD)rf   r`   rg   rm   rb   rh   s       r   test_bad_callbacksrr      s    J J J6 (( / /9>>++,, 	/ 	/D#JOO$5$566 / /	fdI..../	// /r   c                  >   t           j        } t          j                    }t          |d          }t	          |j        d           t          t          | |d           t          |d          }t	          |j        d           t	           | |d          d           d S )Nzbad signature)r      zdouble (double, int *, void *)   )r   test_call_simpler7   r   r   r   rc   r   )rd   r#   
llcallables      r   test_signature_overriderx      s    -F133D!$/BBBJ%777*fj!444!$2RSSSJ%'GHHH
A&&*****r   c                  j    fdfd} t                                           D ]} | |           d S )Nc                 F    | dk    rdS  fd| dz
            }d|z  S )Nr   r   c                      |           S r3   r4   r\   callbackrd   s    r   r5   z5test_threadsafety.<locals>.callback.<locals>.<lambda>   s    88Av#6#6 r      r4   )r   rd   resr}   s    ` r   r}   z#test_threadsafety.<locals>.callback   s=    661&66666A>>CS5Lr   c                 $    t                      g d fdfdt          d          D             }|D ]}|                                 |D ]}|                                 t	          dz  gt          |          z             d S )N
   c                  z    t          j        d            fd          }                     |            d S )Ng{Gz?c                      |           S r3   r4   r|   s    r   r5   z?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>   s    !V!4!4 r   )timesleepappend)rr}   rd   countresultss    r   runz-test_threadsafety.<locals>.check.<locals>.run   sI    Jt44444e<<ANN1r   c                 :    g | ]}t          j                   S ))target)	threadingThread).0jr   s     r   
<listcomp>z4test_threadsafety.<locals>.check.<locals>.<listcomp>   s'    CCCA9#3///CCCr      r	   )r`   rangestartjoinr   len)rd   threadsthreadr   r   r   r}   s   `  @@@r   re   z test_threadsafety.<locals>.check   s    	 	 	 	 	 	 	 	
 DCCCrCCC 	 	FLLNNNN 	 	FKKMMMMWsEzl3w<<788888r   )r`   rg   )re   rd   r}   s     @r   test_threadsafetyr      sg        9 9 9 9 9( ,,..  f r   r3   )$numpy.testingr   r   r   r   rc   r   r   r   
scipy._libr   r<   r   scipy._lib._ccallbackr   r   r   ImportErrorr   r   r$   r*   r-   rv   test_call_nodatatest_call_nonlocaltest_call_cythonr`   ra   rm   test_get_data_capsulerb   ri   rr   rx   r   r4   r   r   <module>r      s!   / / / / / / / / * * * * * *        = = = = = = & & & & & & 2 2 2 2 2 2KKKII   III      > > >
$ $ $ ..2$5	  &%??C C99H HBBF F<<R R	 	$ EDH H>> 	 		 4 
/ / /8/ / /D
+ 
+ 
+    s   9 AA