
    (ph              
          S SK JrJr  S SKJr  S SKrS SKrS SKrS SKrS SK	J
r  S SK	Jr  S SKJr   S SKrSrS	rS#S
 jrS rS rS r\R.                  \R0                  \R2                  \R4                  S.rS S S S S S S S S S.	rS S S S S.r\\\R<                  S.rS r S  r!S! r"S" r#g! \ a    Sr Nf = f)$    )assert_equalassert_)raisesN)_ccallback_c)_test_ccallback)LowLevelCallableTF       @c                 D    U [         :X  a  [        S5      eUc  U S-   $ X-   $ )Nz	bad value   )ERROR_VALUE
ValueError)a	user_datas     R/var/www/html/venv/lib/python3.13/site-packages/scipy/_lib/tests/test_ccallback.pycallback_pythonr      s,    K%%1u}    c                     [         (       d  [        R                  " S5        [        R                  " U [        R
                  5      nUR                  n[        R                  " 5       nUR	                  X5      nU$ )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$      sS    9() KKfoo.EkkG ((*C88I'DKr   c                      [         R                  " S5      n [         R                  " [         R                  " U 5      [         R                  5      $ Nr	   )r   c_doubler   pointerc_voidp)r   s    r   _get_ctypes_datar*   -   s.    OOC E;;v~~e,fnn==r   c                      [         (       d  [        R                  " S5        [        R                  " 5       n U R                  SS5      $ )Nr   zdouble *r	   )r   r   r   r   r   new)r"   s    r   _get_cffi_datar-   2   s0    9()
((*C77:s##r   )simplenodatanonlocalcythonc                      [         $ N)r    r   r   <lambda>r5   B   s    or   c                  ,    [         R                  " 5       $ r3   )r   test_get_plus1_capsuler4   r   r   r5   r5   C   s    ==?r   c                  8    [         R                  " [        S5      $ )Nplus1_cythonr   from_cython_test_ccallback_cythonr4   r   r   r5   r5   D   s    &223I3ACr   c                  "    [         R                  $ r3   )r<   plus1_ctypesr4   r   r   r5   r5   F   s    ,99r   c                  6    [        [        R                  S5      $ )Nz!double (*)(double, int *, void *))r$   r<   r>   r4   r   r   r5   r5   G   s    N#9#F#F#FHr   c                  ,    [         R                  " 5       $ r3   )r   test_get_plus1b_capsuler4   r   r   r5   r5   I   s    @@Br   c                  8    [         R                  " [        S5      $ )Nplus1b_cythonr:   r4   r   r   r5   r5   J   s    (445K5DFr   c                  "    [         R                  $ r3   )r<   plus1b_ctypesr4   r   r   r5   r5   L   s    .<<r   c                  6    [        [        R                  S5      $ )Nz)double (*)(double, double, int *, void *))r$   r<   rE   r4   r   r   r5   r5   M   s    n%;%I%I%PRr   )	pythoncapsuler1   r   r   	capsule_bcython_bctypes_bcffi_bc                  ,    [         R                  " 5       $ r3   )r   test_get_plus1bc_capsuler4   r   r   r5   r5   S   s    /BBDr   c                  8    [         R                  " [        S5      $ )Nplus1bc_cythonr:   r4   r   r   r5   r5   T   s    )556L6FHr   c                  "    [         R                  $ r3   )r<   plus1bc_ctypesr4   r   r   r5   r5   V   s    />>r   c                  6    [        [        R                  S5      $ )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                      S n [        [        R                  5       5       HT  n[        [        R                  5       5       H0  n[        [        R                  5       5       H  nU " XU5        M     M2     MV     g )Nc                   ^ [         U    n [        T   " 5       m[        U   " 5       nT[        L a  U4S jnO[	        TU5      n[	        T5      m[        U " TS5      S5        [        [        U T[        5        [        U " US5      S5        g )Nc                    > T" U S5      $ r&   r4   xr#   s    r   func2,test_callbacks.<locals>.check.<locals>.func2k       As|#r         ?r	   g      @)	CALLERSFUNCS
USER_DATASr   r   r   assert_raisesr   r   )callerr#   r   r]   s    `  r   checktest_callbacks.<locals>.checke   s    T{}y)+	?"$ %T95E#D)D 	VD#&, 	j&$< 	VE3'-r   )sortedra   keysrb   rc   rf   re   r#   r   s       r   test_callbacksrk   d   sS    .* (5::<(D#JOO$56	fI. 7 ) )r   c                      S n [        [        R                  5       5       HT  n[        [        R                  5       5       H0  n[        [        R                  5       5       H  nU " XU5        M     M2     MV     g )Nc                   ^ [         U    n [        U   " 5       n[        T   " 5       mT[        L a  U4S jnO[	        TU5      n[	        T5      m[        [        U [	        T5      S5        [        [        XS5        [	        T5      n U " US5        g ! [         a=  n[        U5      n[        UR                  U;   U5        [        SU;   U5         S nAg S nAff = f)Nc                    > T" U S5      $ r&   r4   r[   s    r   r]   0test_bad_callbacks.<locals>.check.<locals>.func2   r_   r   r`   z&double (double, double, int *, void *))
ra   rc   	BAD_FUNCSr   r   rd   r   strr   r   )re   r#   r   r]   llfuncerrmsgs    `     r   rf   !test_bad_callbacks.<locals>.check   s    y)+	 ?"$ %T95E#D)D 	j&*:4*@#F 	j&5 "$'	J63 	Jc(CF$$+S1<CSII	Js   	B 
C3CC)rh   ra   ri   rp   rc   rj   s       r   test_bad_callbacksrv      sU    J6 (9>>+,D#JOO$56	fI. 7 - )r   c                     [         R                  n [         R                  " 5       n[        USS9n[	        UR
                  S5        [        [        XS5        [        USS9n[	        UR
                  S5        [	        U " US5      S5        g )Nzbad signature)r      zdouble (double, int *, void *)   )r   test_call_simpler7   r   r   r   rd   r   )re   r#   
llcallables      r   test_signature_overrider|      sr    --F113D!$/BJ%%7*f!4!$2RSJ%%'GH
A&*r   c                  d   ^ U4S jmU4S jn [         R                  5        H  nU " U5        M     g )Nc                 @   >^ U S::  a  gT" UU4S jU S-
  5      nSU-  $ )Nr   r   c                    > T" U T5      $ r3   r4   r\   callbackre   s    r   r5   5test_threadsafety.<locals>.callback.<locals>.<lambda>   s    8Av#6r      r4   )r   re   resr   s    ` r   r   #test_threadsafety.<locals>.callback   s'    66A>CS5Lr   c                 8  >^ ^^ [         T    m / mSmUU UU4S jn[        S5       Vs/ s H  n[        R                  " US9PM     nnU H  nUR	                  5         M     U H  nUR                  5         M     [        TST-  /[        U5      -  5        g s  snf )N
   c                  p   > [         R                  " S5        T" UU4S jT5      n TR                  U 5        g )Ng{Gz?c                    > T" U T5      $ r3   r4   r   s    r   r5   ?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>   s    !V!4r   )timesleepappend)rr   re   countresultss    r   run-test_threadsafety.<locals>.check.<locals>.run   s(    JJt4e<ANN1r      )targetr	   )ra   range	threadingThreadstartjoinr   len)re   r   jthreadsthreadr   r   r   s   `    @@r   rf    test_threadsafety.<locals>.check   s    	 	
 :?rCA9##3/CFLLN FKKM  	WsEzl3w<78 Ds   B)ra   ri   )rf   re   r   s     @r   test_threadsafetyr      s&    9( ,,.f !r   r3   )$numpy.testingr   r   r   r   rd   r   r   r   
scipy._libr   r<   r   scipy._lib._ccallbackr   r   r   ImportErrorr   r   r$   r*   r-   rz   test_call_nodatatest_call_nonlocaltest_call_cythonra   rb   rp   test_get_data_capsulerc   rk   rv   r|   r   r4   r   r   <module>r      s   / *     = & 2I
 >
$ ....22$55	 &?C9HBF<R	$ EH>		 44
/8/D
+A  Is   B4 4B?>B?