๓
๎&]\c           @` s  d  d l  m Z m Z m Z 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 y d  d l Z e Z Wn e k
 rั e Z n Xd Z d d	  Z d
   Z d   Z d   Z i e j d 6e j d 6e j  d 6e j! d 6Z" i	 d   d 6d   d 6d   d 6d   d 6d   d 6d   d 6d   d 6d   d 6d    d! 6Z# i d"   d# 6d$   d% 6d&   d' 6d(   d) 6Z$ i e d 6e d 6e j% d 6Z& d*   Z' d+   Z( d,   Z) d-   Z* d S(.   i    (   t   divisiont   print_functiont   absolute_import(   t   assert_equalt   assert_(   t   raisesN(   t   _ccallback_c(   t   _test_ccallback(   t   LowLevelCallableg       @c         C` s;   |  t  k r t d   n  | d  k r/ |  d S|  | Sd  S(   Ns	   bad valuei   (   t   ERROR_VALUEt
   ValueErrort   None(   t   at	   user_data(    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   callback_python   s
    c         C` sV   t  s t j d  n  t j |  t j  } | j } t j   } | j | |  } | S(   Ns   cffi not installed(	   t	   HAVE_CFFIt   pytestt   skipt   ctypest   castt   c_void_pt   valuet   cffit   FFI(   t   baset	   signaturet   voidpt   addresst   ffit   func(    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   _get_cffi_func!   s    	c          C` s+   t  j d  }  t  j t  j |   t  j  S(   Ng       @(   R   t   c_doubleR   t   pointert   c_voidp(   R   (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   _get_ctypes_data/   s    c          C` s2   t  s t j d  n  t j   }  |  j d d  S(   Ns   cffi not installeds   double *g       @(   R   R   R   R   R   t   new(   R   (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   _get_cffi_data4   s    t   simplet   nodatat   nonlocalt   cythonc           C` s   t  S(   N(   R   (    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   <lambda>D   s    t   pythonc           C` s
   t  j   S(   N(   R   t   test_get_plus1_capsule(    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   E   s    t   capsulec           C` s   t  j t d  S(   Nt   plus1_cython(   R   t   from_cythont   _test_ccallback_cython(    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   F   s    c           C` s   t  j S(   N(   R/   t   plus1_ctypes(    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   G   s    R   c           C` s   t  t j d  S(   Ns!   double (*)(double, int *, void *)(   R   R/   R0   (    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   H   s   	R   c           C` s
   t  j   S(   N(   R   t   test_get_plus1b_capsule(    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   J   s    t	   capsule_bc           C` s   t  j t d  S(   Nt   plus1b_cython(   R   R.   R/   (    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   K   s    t   cython_bc           C` s   t  j S(   N(   R/   t   plus1b_ctypes(    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   L   s    t   ctypes_bc           C` s   t  t j d  S(   Ns)   double (*)(double, double, int *, void *)(   R   R/   R5   (    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   M   s   	t   cffi_bc           C` s
   t  j   S(   N(   R   t   test_get_plus1bc_capsule(    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   S   s    t
   capsule_bcc           C` s   t  j t d  S(   Nt   plus1bc_cython(   R   R.   R/   (    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   T   s    t	   cython_bcc           C` s   t  j S(   N(   R/   t   plus1bc_ctypes(    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   U   s    t	   ctypes_bcc           C` s   t  t j d  S(   Ns1   double (*)(double, double, double, int *, void *)(   R   R/   R<   (    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   V   s   	t   cffi_bcc          C` st   d   }  xd t  t j    D]P } xG t  t j    D]3 } x* t  t j    D] } |  | | |  qN Wq5 Wq Wd  S(   Nc         ` s    t  |  }  t       t |   }   t k rB   f d   } n t   |  } t      t |    d  d  t t |    t  t |  | d  d  d  S(   Nc         ` s     |  d  S(   Ng       @(    (   t   x(   R   (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   h   s    g      ๐?g       @g      @(	   t   CALLERSt   FUNCSt
   USER_DATASR   R   R   t   assert_raisesR
   R	   (   t   callerR   R   t   func2(    (   R   s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   checkb   s    
(   t   sortedR@   t   keysRA   RB   (   RF   RD   R   R   (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   test_callbacksa   s
    	c          C` st   d   }  xd t  t j    D]P } xG t  t j    D]3 } x* t  t j    D] } |  | | |  qN Wq5 Wq Wd  S(   Nc         ` s๕   t  |  }  t |   } t         t k rB   f d   } n t   |  } t      t t |  t    d  t t |  | d  t    } y |  | d  WnH t k
 r๐ } t |  } t | j	 | k |  t d | k |  n Xd  S(   Nc         ` s     |  d  S(   Ng       @(    (   R?   (   R   (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)      s    g      ๐?s&   double (double, double, int *, void *)(
   R@   RB   t	   BAD_FUNCSR   R   RC   R
   t   strR   R   (   RD   R   R   RE   t   llfunct   errt   msg(    (   R   s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyRF   }   s     
(   RG   R@   RH   RJ   RB   (   RF   RD   R   R   (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   test_bad_callbacks|   s
    	c          C` s   t  j }  t  j   } t | d d } t | j d  t t |  | d  t | d d } t | j d  t |  | d  d  d  S(   NR   s   bad signaturei   s   double (double, int *, void *)i   (   R   t   test_call_simpleR+   R   R   R   RC   R
   (   RD   R   t
   llcallable(    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   test_signature_override   s    	c          ` sC     f d       f d   }  x t  j   D] } |  |  q+ Wd  S(   Nc         ` s;   |  d k r d S     f d   |  d  } d | Sd  S(   Ni    i   c         ` s     |    S(   N(    (   R?   (   t   callbackRD   (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   ฏ   s    i   (    (   R   RD   t   res(   RS   (   RD   s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyRS   ซ   s    c         ` sฑ   t      g   d       f d   } g  t d  D] } t j d |  ^ q; } x | D] } | j   q` Wx | D] } | j   q{ Wt  d  g t |   d  S(   Ni
   c          ` s9   t  j d      f d     }   j |   d  S(   Ng{ฎGแz?c         ` s     |    S(   N(    (   R?   (   RS   RD   (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyR)   ป   s    (   t   timet   sleept   append(   t   r(   RS   RD   t   countt   results(    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   runน   s    i   t   targetg       @(   R@   t   ranget	   threadingt   Threadt   startt   joinR   t   len(   RD   R[   t   jt   threadst   thread(   RS   (   RD   RY   RZ   s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyRF   ฒ   s    
+(   R@   RH   (   RF   RD   (    (   RS   s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   test_threadsafetyช   s    (+   t
   __future__R    R   R   t   numpy.testingR   R   R   R   RC   RU   R   R^   t
   scipy._libR   R/   R   t   scipy._lib._ccallbackR   R   t   TrueR   t   ImportErrort   FalseR	   R   R   R   R"   R$   RP   t   test_call_nodatat   test_call_nonlocalt   test_call_cythonR@   RA   RJ   t   test_get_data_capsuleRB   RI   RO   RR   Rf   (    (    (    s>   lib/python2.7/site-packages/scipy/_lib/tests/test_ccallback.pyt   <module>   s^   

				













		!	