
    Ti              
       (   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j        dZd Zd Zd Zd  Z dS )"    )assert_equalassert_)raisesN)_ccallback_c)_test_ccallback)LowLevelCallable       @c                 N    | t           k    rt          d          || dz   S | |z   S )Nz	bad value   )ERROR_VALUE
ValueError)a	user_datas     w/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/scipy/_lib/tests/test_ccallback.pycallback_pythonr      s4    K%%%1u9}    c                     t          j        d          }t          j        | t          j                  }|j        }|                                }|                    ||          }|S )Ncffi)pytestimportorskipctypescastc_void_pvalueFFI)base	signaturer   voidpaddressffifuncs          r   _get_cffi_funcr"      sU    v&&D 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          j        d          } |                                 }|                    dd          S )Nr   zdouble *r	   )r   r   r   new)r   r    s     r   _get_cffi_datar+   +   s3    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    &23I3AC C r   c                      t           j        S r1   )r:   plus1_ctypesr2   r   r   r3   r3   >   s
    ,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H H r   c                  (    t          j                    S r1   )r   test_get_plus1b_capsuler2   r   r   r3   r3   A   s    @BB r   c                  6    t          j        t          d          S )Nplus1b_cythonr8   r2   r   r   r3   r3   B   s    (45K5DF 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%PR 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DD r   c                  6    t          j        t          d          S )Nplus1bc_cythonr8   r2   r   r   r3   r3   L   s    )56L6FH 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                                                    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$   r2   xr!   s    r   func2z,test_callbacks.<locals>.check.<locals>.func2c       tAs||#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55E#D))D 	VVD#&&,,, 	j&$<<< 	VVE3''-----r   )sortedr^   keysr_   r`   rc   rb   r!   r   s       r   test_callbacksrg   \   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$   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   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)rd   r^   re   rk   r`   rf   s       r   test_bad_callbacksrp   x   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_simpler5   r   r   r   ra   r   )rb   r!   
llcallables      r   test_signature_overriderv      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 r1   r2   rZ   callbackrb   s    r   r3   z5test_threadsafety.<locals>.callback.<locals>.<lambda>   s    88Av#6#6 r      r2   )r   rb   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 r1   r2   rz   s    r   r3   z?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>   s    !V!4!4 r   )timesleepappend)rr{   rb   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)rb   threadsthreadr   r   r   r{   s   `  @@@r   rc   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^   re   )rc   rb   r{   s     @r   test_threadsafetyr      sg        9 9 9 9 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 2 2 2    
 
 
> > >
$ $ $ ..2$5	  &%??C C99H HBBF F<<R R	 	$ EDH H>> 	 		 4 
/ / /8/ / /D
+ 
+ 
+    r   