
    Џkh              
       X   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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j6                  dZd Zd Zd Zd  Z y)"    )assert_equalassert_)raisesN)_ccallback_c)_test_ccallback)LowLevelCallable       @c                 B    | t         k(  rt        d      || dz   S | |z   S )Nz	bad value   )ERROR_VALUE
ValueError)a	user_datas     [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/_lib/tests/test_ccallback.pycallback_pythonr      s.    K%%1u9}    c                     t        j                  d      }t        j                  | t        j                        }|j
                  }|j                         }|j                  ||      }|S )Ncffi)pytestimportorskipctypescastc_void_pvalueFFI)base	signaturer   voidpaddressffifuncs          r   _get_cffi_funcr"      sS    v&D KKfoo.EkkG ((*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.    OOC E;;v~~e,fnn==r   c                  p    t        j                  d      } | j                         }|j                  dd      S )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                      t         S N)r    r   r   <lambda>r3   :   s    o r   c                  *    t        j                         S r1   )r   test_get_plus1_capsuler2   r   r   r3   r3   ;   s    ==? r   c                  6    t        j                  t        d      S )Nplus1_cythonr   from_cython_test_ccallback_cythonr2   r   r   r3   r3   <   s    &223I3AC r   c                  "    t         j                  S r1   )r:   plus1_ctypesr2   r   r   r3   r3   >   s    ,99 r   c                  6    t        t        j                  d      S )Nz!double (*)(double, int *, void *))r"   r:   r<   r2   r   r   r3   r3   ?   s    N#9#F#F#FH r   c                  *    t        j                         S r1   )r   test_get_plus1b_capsuler2   r   r   r3   r3   A   s    @@B r   c                  6    t        j                  t        d      S )Nplus1b_cythonr8   r2   r   r   r3   r3   B   s    (445K5DF r   c                  "    t         j                  S r1   )r:   plus1b_ctypesr2   r   r   r3   r3   D   s    .<< r   c                  6    t        t        j                  d      S )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                  *    t        j                         S r1   )r   test_get_plus1bc_capsuler2   r   r   r3   r3   K   s    /BBD r   c                  6    t        j                  t        d      S )Nplus1bc_cythonr8   r2   r   r   r3   r3   L   s    )556L6FH r   c                  "    t         j                  S r1   )r:   plus1bc_ctypesr2   r   r   r3   r3   N   s    />> r   c                  6    t        t        j                  d      S )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                      d } t        t        j                               D ]P  }t        t        j                               D ].  }t        t        j                               D ]  } | |||        0 R y )Nc                    t         |    } t                  t        |          }t        u rfd}nt	        |      }t	              t         | d      d       t        t        | t               t         | |d      d       y )Nc                      | d      S r$   r2   xr!   s    r   func2z,test_callbacks.<locals>.check.<locals>.func2c       As|#r         ?r	   g      @)	CALLERSFUNCS
USER_DATASr   r   r   assert_raisesr   r   )callerr!   r   r[   s    `  r   checkztest_callbacks.<locals>.check]   s    T{}y)+	?"$ %T95E#D)D 	VD#&, 	j&$< 	VE3'-r   )sortedr^   keysr_   r`   rc   rb   r!   r   s       r   test_callbacksrg   \   sd    .* ( /5::<( 	/D#JOO$56 /	fdI./	//r   c                      d } t        t        j                               D ]P  }t        t        j                               D ].  }t        t        j                               D ]  } | |||        0 R y )Nc                    t         |    } t        |          }t                  t        u rfd}nt	        |      }t	              t        t        | t	              d       t        t        | |d       t	              }	  | |d       y # t        $ r;}t        |      }t        |j                  |v |       t        d|v |       Y d }~y d }~ww xY w)Nc                      | d      S r$   r2   rY   s    r   r[   z0test_bad_callbacks.<locals>.check.<locals>.func2   r\   r   r]   z&double (double, double, int *, void *))
r^   r`   	BAD_FUNCSr   r   ra   r   strr   r   )rb   r!   r   r[   llfuncerrmsgs    `     r   rc   z!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1CC)rd   r^   re   rk   r`   rf   s       r   test_bad_callbacksrp   x   sf    J6 ( /9>>+, 	/D#JOO$56 /	fdI./	//r   c                  "   t         j                  } t        j                         }t        |d      }t	        |j
                  d       t        t        | |d       t        |d      }t	        |j
                  d       t	         | |d      d       y )Nzbad signature)r      zdouble (double, int *, void *)   )r   test_call_simpler5   r   r   r   ra   r   )rb   r!   
llcallables      r   test_signature_overriderv      st    --F113D!$/BJ%%7*fj!4!$2RSJ%%'GH
A&*r   c                  \    fdfd} t         j                         D ]
  } | |        y )Nc                 <    | dk  ry fd| dz
        }d|z  S )Nr   r   c                      |       S r1   r2   rZ   callbackrb   s    r   r3   z5test_threadsafety.<locals>.callback.<locals>.<lambda>   s    8Av#6 r      r2   )r   rb   resr{   s    ` r   r{   z#test_threadsafety.<locals>.callback   s'    66A>CS5Lr   c                 ,    t              g d fd}t        d      D cg c]  }t        j                  |       }}|D ]  }|j	                           |D ]  }|j                           t        dz  gt        |      z         y c c}w )N
   c                  l    t        j                  d        fd      } j                  |        y )Ng{Gz?c                      |       S r1   r2   rz   s    r   r3   z?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>   s    !V!4 r   )timesleepappend)rr{   rb   countresultss    r   runz-test_threadsafety.<locals>.check.<locals>.run   s(    JJt4e<ANN1r      )targetr	   )r^   range	threadingThreadstartjoinr   len)rb   r   jthreadsthreadr   r   r{   s   `    @@r   rc   z test_threadsafety.<locals>.check   s    	
 :?rCA9##3/CC 	FLLN	 	FKKM	 	WsEzl3w<78 Ds   B)r^   re   )rc   rb   r{   s     @r   test_threadsafetyr      s+    9( ,,. fr   r1   )!numpy.testingr   r   r   r   ra   r   r   r   
scipy._libr   r:   r   scipy._lib._ccallbackr   r   r   r"   r(   r+   rt   test_call_nodatatest_call_nonlocaltest_call_cythonr^   r_   rk   test_get_data_capsuler`   rg   rp   rv   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   