ó
\K]c           @  sã  d  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 Z d d l m	 Z	 d d l
 m Z m Z m Z m Z m Z m Z d d l
 m Z d d l
 m Z d d l m Z d	 d
 l m Z m Z m Z d	 d l m Z e j Z e j d ƒ pe j d ƒ pd e k Z e j  e d ƒ Z! e j" e d ƒ Z# e j$ ƒ  Z% e% d d h k Z& e j" e& d ƒ Z' e j( j) d d ƒ d k Z+ e j  e+ d ƒ Z, y e ƒ  e- Z. Wn e/ k
 rÊe0 Z. n Xd Z1 e j  e. e1 ƒ Z2 e d ƒ Z3 e d e- ƒ Z4 e d e- d e- ƒ Z5 d „  Z6 d „  Z7 d „  Z8 e' e! d e f d „  ƒ  Yƒ ƒ Z9 e' e! e2 d  e f d! „  ƒ  Yƒ ƒ ƒ Z: e: j; ƒ  e' e! e2 d" e f d# „  ƒ  Yƒ ƒ ƒ Z< e# d$ e f d% „  ƒ  Yƒ Z= e> d& k rße j? ƒ  n  d S('   s   
Tests gdb bindings
iÿÿÿÿ(   t   print_functionN(   t   permutations(   t   njitt   gdbt   gdb_initt   gdb_breakpointt   pranget   errors(   t   jit(   t   unittest_support(   t   _confirm_gdbi   (   t   TestCaset   captured_stdoutt   tag(   t   skip_unsupportedt   linuxt   darwint   bsds   unix-like OS is requireds   non unix-like OS is requiredt   aarch64t   armv7ls   testing disabled on ARMt   GDB_TESTt   1s   needs gdb harnesss;   functioning gdb with correct ptrace permissions is requiredt   long_runningt   debugt   forceobjc         C  sS   t  d d d d d d ƒ |  d } |  d } |  | | f } t |  | | | ƒ d  S(   Ns   -exs   set confirm offt   ct   qi   g¸…ëQ¸@(   R   t   print(   t   at   bR   t   d(    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   impl_gdb_call3   s
    

c         C  sZ   t  d d d d d d ƒ |  d } |  d } |  | | f } t ƒ  t |  | | | ƒ d  S(   Ns   -exs   set confirm offR   R   i   g¸…ëQ¸@(   R   R   R   (   R   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   impl_gdb_call_w_bp;   s    

c         C  s{   t  d d d d d d ƒ |  d 7}  xQ t d ƒ D]C } |  d } |  d } |  | | f } t ƒ  t |  | | | ƒ q0 Wd  S(	   Ns   -exs   set confirm offR   R   i   i   i   g¸…ëQ¸@(   R   R   R   R   (   R   t   iR   R   R   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt(   impl_gdb_split_init_and_break_w_parallelD   s    


t   TestGdbBindImplsc           B  s§   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e
 e d „  ƒ ƒ Z e
 e d „  ƒ ƒ Z e
 e d	 „  ƒ ƒ Z RS(
   s  
    Contains unit test implementations for gdb binding testing. Test must be
    decorated with `@needs_gdb_harness` to prevent their running under normal
    test conditions, the test methods must also end with `_impl` to be
    considered for execution. The tests themselves are invoked by the
    `TestGdbBinding` test class through the parsing of this class for test
    methods and then running the discovered tests in a separate process. Test
    names not including the word `quick` will be tagged as @tag('long_running')
    c         C  s   t  ƒ   t d ƒ Wd  QXd  S(   Ni
   (   R   R   (   t   self(    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt$   test_gdb_cmd_lang_cpython_quick_impl\   s    
c         C  s$   t  ƒ   t t ƒ d ƒ Wd  QXd  S(   Ni
   (   R   t	   _dbg_njitR   (   R$   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt%   test_gdb_cmd_lang_nopython_quick_impla   s    
c         C  s$   t  ƒ   t t ƒ d ƒ Wd  QXd  S(   Ni
   (   R   t   _dbg_jitR   (   R$   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt$   test_gdb_cmd_lang_objmode_quick_implf   s    
c         C  s   t  ƒ   t d ƒ Wd  QXd  S(   Ni
   (   R   R    (   R$   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt*   test_gdb_split_init_and_break_cpython_implk   s    
c         C  s$   t  ƒ   t t ƒ d ƒ Wd  QXd  S(   Ni
   (   R   R&   R    (   R$   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt+   test_gdb_split_init_and_break_nopython_implp   s    
c         C  s$   t  ƒ   t t ƒ d ƒ Wd  QXd  S(   Ni
   (   R   R(   R    (   R$   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt*   test_gdb_split_init_and_break_objmode_implu   s    
c         C  s   t  ƒ   t d ƒ Wd  QXd  S(   Ni
   (   R   R"   (   R$   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt5   test_gdb_split_init_and_break_w_parallel_cpython_implz   s    
c         C  s$   t  ƒ   t t ƒ d ƒ Wd  QXd  S(   Ni
   (   R   R&   R"   (   R$   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt6   test_gdb_split_init_and_break_w_parallel_nopython_impl€   s    
c         C  s$   t  ƒ   t t ƒ d ƒ Wd  QXd  S(   Ni
   (   R   R(   R"   (   R$   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt5   test_gdb_split_init_and_break_w_parallel_objmode_impl†   s    
(   t   __name__t
   __module__t   __doc__t   needs_gdb_harnessR%   R'   R)   R*   R+   R,   t   parfors_skip_unsupportedR-   R.   R/   (    (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyR#   O   s   t   TestGdbBindingc           B  sM   e  Z d  Z e Z e Z e d „ Z d „  Z e	 d „  ƒ Z
 e	 d „  ƒ Z RS(   s¿   
    This test class is used to generate tests which will run the test cases
    defined in TestGdbBindImpls in isolated subprocesses, this is for safety
    in case something goes awry.
    c   	   
     sÓ   t  j | d t  j d t  j d | d t ƒ‰  ‡  f d †  } t j d | ƒ } zs | j ƒ  ˆ  j ƒ  \ } } ˆ  j } | d k rª t	 d | | j
 ƒ  | j
 ƒ  f ƒ ‚ n  | j
 ƒ  | j
 ƒ  f SWd  | j ƒ  Xd	 S(
   Nt   stdoutt   stderrt   envt   shellc             s(   ˆ  j  j ƒ  ˆ  j j ƒ  ˆ  j ƒ  d  S(   N(   R6   t   flushR7   t   kill(    (   t   popen(    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyR;   ¤   s    g      4@i    s9   process failed with code %s: stderr follows
%s
stdout :%s(   NN(   t
   subprocesst   Popent   PIPEt   Truet	   threadingt   Timert   startt   communicatet
   returncodet   AssertionErrort   decodet   cancelt   None(	   R$   t   cmdlineR8   t
   kill_is_okR;   t   timeoutt   outt   errt   retcode(    (   R<   s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   run_cmdœ   s$    			
	"c         K  sT   t  j j ƒ  } d | d <d | d <t j d d | g } |  j d j | ƒ | |  S(   NR   t	   NUMBA_OPTR   s   -ms   numba.runtestst    (   t   ost   environt   copyt   syst
   executableRP   t   join(   R$   t   testt   kwargst   env_copyRJ   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   run_test_in_separate_process¶   s
    

c           s”   t  j } t  j } | j d ƒ s' t ‚ | j d d ƒ } d | | | f ‰  ‡  f d †  } d | k rz t |  | | ƒ n t |  | t | ƒ ƒ d  S(   Nt   _implt    s   %s.%s.%sc           s_   |  j  ˆ  ƒ \ } } |  j d | ƒ |  j d | ƒ |  j d | k ƒ |  j d | k ƒ d  S(   Ns   GNU gdbt   OKt   FAILt   ERROR(   R\   t   assertInt
   assertTrue(   R$   t   ot   e(   t   injected_method(    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   test_templateÈ   s
    t   quick(   R#   R1   R0   t   endswithRF   t   replacet   setattrR   (   t   clst   namet   themodt   theclst   methnameRg   (    (   Rf   s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   _inject¿   s    		c         C  s:   x3 t  t ƒ D]% } | j d ƒ r |  j | ƒ q q Wd  S(   Nt   test_gdb(   t   dirR#   t
   startswithRq   (   Rl   Rm   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   generateÓ   s    (   R0   R1   R2   t   Falset   _numba_parallel_test_R@   t   _DEBUGRP   R\   t   classmethodRq   Ru   (    (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyR5      s   		t   TestGdbMiscc           B  s   e  Z e d  „  ƒ Z RS(   c           sz   d „  } d ‰  ‡  ‡ f d †  } x9 t  t t g ƒ D]% \ } } | | | ƒ } | | ƒ q4 Wt d „  ƒ } | | ƒ d  S(   Nc           s   t  ‡  ‡ f d †  ƒ } | S(   Nc            s"   d }  ˆ  ƒ  d } ˆ ƒ  |  | S(   Ni   i   (    (   R   R   (   t   f1t   f2(    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   implå   s
    (   R   (   R{   R|   R}   (    (   R{   R|   s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   genä   s    s8   Calling either numba.gdb() or numba.gdb_init() more thanc           s?   ˆ j  t j ƒ  } |  ƒ  Wd  QXˆ j ˆ  t | j ƒ ƒ d  S(   N(   t   assertRaisesR   t   UnsupportedErrorRb   t   strt	   exception(   t   funct   raises(   t   msg_headR$   (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   checkð   s    c          S  s"   d }  t  ƒ  d } t ƒ  |  | S(   Ni   i   (   R   R   (   R   R   (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   use_globalsù   s
    (   R   R   R   R   (   R$   R~   R†   t   g1t   g2Rƒ   R‡   (    (   R…   R$   s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   test_call_gdb_twiceâ   s    	
(   R0   R1   R   RŠ   (    (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyRz   Ý   s   t   TestGdbExceptionsc           B  s   e  Z d  „  Z RS(   c           s   d „  } x | t  d t ƒ t g D]s } xj t t g D]\ ‰  ‡  f d †  } |  j t j ƒ  } | | ƒ ƒ  Wd  QXd } |  j | t	 | j
 ƒ ƒ q5 Wq" Wd  S(   Nc         S  s   |  S(   N(    (   t   x(    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   nop_compiler  s    R   c             s   ˆ  ƒ  d  S(   N(    (    (   t   meth(    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   python_func  s    s2   gdb support is only available on unix-like systems(   R   R@   R   R   R   R   R   t   TypingErrorRb   R   R‚   (   R$   R   t   compilerR   R„   t   msg(    (   RŽ   s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   test_call_gdb  s    	(   R0   R1   R“   (    (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyR‹     s   t   __main__(@   R2   t
   __future__R    RS   t   platformR=   RV   RA   t	   itertoolsR   t   numbaR   R   R   R   R   R   R   R	   t   unittestt   numba.targets.gdb_hookR
   t   supportR   R   R   t   test_parforsR   R4   t	   _platformRt   t
   _unix_liket
   skipUnlesst	   unix_onlyt   skipIft   not_unixt   machinet
   _arch_namet   _is_armt   not_armRT   t   getRI   t	   _gdb_condR3   R@   t	   _HAVE_GDBt	   ExceptionRv   t   _msgt	   needs_gdbR   R&   R(   R   R    R"   R#   R5   Ru   Rz   R‹   R0   t   main(    (    (    s3   lib/python2.7/site-packages/numba/tests/test_gdb.pyt   <module>   sj   .	

				<J
$