
    9i              
       Z   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rS!S jrS	 rS
 rS r\R(                  \R*                  \R,                  \R.                  S.rS S S S S S S S S S.	rS S S S S.r\\\R6                  S.rS rS rS rS  r g)"    )assert_equalassert_)raisesN)_ccallback_c)_test_ccallback)LowLevelCallable       @c                 D    U [         :X  a  [        S5      eUc  U S-   $ X-   $ )Nz	bad value   )ERROR_VALUE
ValueError)a	user_datas     _/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/scipy/_lib/tests/test_ccallback.pycallback_pythonr      s,    K%%1u}    c                     [         R                  " S5      n[        R                  " U [        R                  5      nUR
                  nUR                  5       nUR                  X5      nU$ )Ncffi)pytestimportorskipctypescastc_void_pvalueFFI)base	signaturer   voidpaddressffifuncs          r   _get_cffi_funcr"      sQ    v&D 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                  r    [         R                  " S5      n U R                  5       nUR                  SS5      $ )Nr   zdouble *r	   )r   r   r   new)r   r    s     r   _get_cffi_datar+   +   s.    v&D
((*C77:s##r   )simplenodatanonlocalcythonc                      [         $ N)r    r   r   <lambda>r3   :   s    or   c                  ,    [         R                  " 5       $ r1   )r   test_get_plus1_capsuler2   r   r   r3   r3   ;   s    ==?r   c                  8    [         R                  " [        S5      $ )Nplus1_cythonr   from_cython_test_ccallback_cythonr2   r   r   r3   r3   <   s    &223I3ACr   c                  "    [         R                  $ r1   )r:   plus1_ctypesr2   r   r   r3   r3   >   s    ,99r   c                  6    [        [        R                  S5      $ )Nz!double (*)(double, int *, void *))r"   r:   r<   r2   r   r   r3   r3   ?   s    N#9#F#F#FHr   c                  ,    [         R                  " 5       $ r1   )r   test_get_plus1b_capsuler2   r   r   r3   r3   A   s    @@Br   c                  8    [         R                  " [        S5      $ )Nplus1b_cythonr8   r2   r   r   r3   r3   B   s    (445K5DFr   c                  "    [         R                  $ r1   )r:   plus1b_ctypesr2   r   r   r3   r3   D   s    .<<r   c                  6    [        [        R                  S5      $ )Nz)double (*)(double, double, int *, void *))r"   r:   rC   r2   r   r   r3   r3   E   s    n%;%I%I%PRr   )	pythoncapsuler/   r   r   	capsule_bcython_bctypes_bcffi_bc                  ,    [         R                  " 5       $ r1   )r   test_get_plus1bc_capsuler2   r   r   r3   r3   K   s    /BBDr   c                  8    [         R                  " [        S5      $ )Nplus1bc_cythonr8   r2   r   r   r3   r3   L   s    )556L6FHr   c                  "    [         R                  $ r1   )r:   plus1bc_ctypesr2   r   r   r3   r3   N   s    />>r   c                  6    [        [        R                  S5      $ )Nz1double (*)(double, double, double, int *, void *))r"   r:   rP   r2   r   r   r3   r3   O   s    ~--;r   )
capsule_bc	cython_bc	ctypes_bccffi_bc)r   r   rF   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$   r2   xr!   s    r   func2,test_callbacks.<locals>.check.<locals>.func2c       As|#r         ?r	   g      @)	CALLERSFUNCS
USER_DATASr   r   r   assert_raisesr   r   )callerr!   r   r[   s    `  r   checktest_callbacks.<locals>.check]   s    T{}y)+	?"$ %T95E#D)D 	VD#&, 	j&$< 	VE3'-r   )sortedr_   keysr`   ra   rd   rc   r!   r   s       r   test_callbacksri   \   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$   r2   rY   s    r   r[   0test_bad_callbacks.<locals>.check.<locals>.func2   r]   r   r^   z&double (double, double, int *, void *))
r_   ra   	BAD_FUNCSr   r   rb   r   strr   r   )rc   r!   r   r[   llfuncerrmsgs    `     r   rd   !test_bad_callbacks.<locals>.checky   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)rf   r_   rg   rn   ra   rh   s       r   test_bad_callbacksrt   x   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_simpler5   r   r   r   rb   r   )rc   r!   
llcallables      r   test_signature_overriderz      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      $ r1   r2   rZ   callbackrc   s    r   r3   5test_threadsafety.<locals>.callback.<locals>.<lambda>   s    8Av#6r      r2   )r   rc   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      $ r1   r2   r~   s    r   r3   ?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>   s    !V!4r   )timesleepappend)rr   rc   countresultss    r   run-test_threadsafety.<locals>.check.<locals>.run   s(    JJt4e<ANN1r      )targetr	   )r_   range	threadingThreadstartjoinr   len)rc   r   jthreadsthreadr   r   r   s   `    @@r   rd    test_threadsafety.<locals>.check   s    	 	
 :?rCA9##3/CFLLN FKKM  	WsEzl3w<78 Ds   B)r_   rg   )rd   rc   r   s     @r   test_threadsafetyr      s&    9( ,,.f !r   r1   )!numpy.testingr   r   r   r   rb   r   r   r   
scipy._libr   r:   r   scipy._lib._ccallbackr   r   r   r"   r(   r+   rx   test_call_nodatatest_call_nonlocaltest_call_cythonr_   r`   rn   test_get_data_capsulera   ri   rt   rz   r   r2   r   r   <module>r      s    / *     = & 2 
>
$ ....22$55	 &?C9HBF<R	$ EH>		 44
/8/D
+r   