
    tKg              
          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d	Zd#d
Zd Zd Zd Zej.                  ej0                  ej2                  ej4                  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#y# e$ r dZY w xY w)$    )assert_equalassert_)raisesN)_ccallback_c)_test_ccallback)LowLevelCallableTF       @c                 B    | t         k(  rt        d      || dz   S | |z   S )Nz	bad value   )ERROR_VALUE
ValueError)a	user_datas     c/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/_lib/tests/test_ccallback.pycallback_pythonr      s.    K%%1u9}    c                     t         st        j                  d       t        j                  | t        j
                        }|j                  }t        j                         }|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$      sS    () 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                      t         st        j                  d       t        j                         } | 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    or   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    &223I3ACr   c                  "    t         j                  S r3   )r<   plus1_ctypesr4   r   r   r5   r5   F   s    ,99r   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#FHr   c                  *    t        j                         S r3   )r   test_get_plus1b_capsuler4   r   r   r5   r5   I   s    @@Br   c                  6    t        j                  t        d      S )Nplus1b_cythonr:   r4   r   r   r5   r5   J   s    (445K5D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%I%P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BDr   c                  6    t        j                  t        d      S )Nplus1bc_cythonr:   r4   r   r   r5   r5   T   s    )556L6F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        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&   r4   xr#   s    r   func2z,test_callbacks.<locals>.check.<locals>.func2k       As|#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5E#D)D 	VD#&, 	j&$< 	VE3'-r   )sortedr`   keysra   rb   re   rd   r#   r   s       r   test_callbacksri   d   sU    .* (5::<(D#JOO$56	fdI. 7 ) )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&   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   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)rf   r`   rg   rm   rb   rh   s       r   test_bad_callbacksrr      sW    J6 (9>>+,D#JOO$56	fdI. 7 - )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_simpler7   r   r   r   rc   r   )rd   r#   
llcallables      r   test_signature_overriderx      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 r3   r4   r\   callbackrd   s    r   r5   z5test_threadsafety.<locals>.callback.<locals>.<lambda>   s    8Av#6r      r4   )r   rd   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 r3   r4   r|   s    r   r5   z?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>   s    !V!4r   )timesleepappend)rr}   rd   countresultss    r   runz-test_threadsafety.<locals>.check.<locals>.run   s(    JJt4e<ANN1r      )targetr	   )r`   range	threadingThreadstartjoinr   len)rd   r   jthreadsthreadr   r   r}   s   `    @@r   re   z test_threadsafety.<locals>.check   s    	
 :?rCA9##3/CFLLN FKKM  	WsEzl3w<78 Ds   B)r`   rg   )re   rd   r}   s     @r   test_threadsafetyr      s&    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I
 >
$ ....22$55	 &?C9HBF<R	$ EH>		 44
/8/D
+A  Is   B3 3B=<B=