
V]c           @  s@  d  Z  d d l m Z y
 e Z Wn e k
 r3 n Xd d l Z d d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l Z d d l Z y e Z e Z Wn e k
 r e Z e Z n Xy d d l m Z e Z Wn e k
 rne Z y d d l m Z Wqoe k
 rjy d d l m Z Wqke k
 rfy d d l Z Wqge k
 rbd d l j Z qgXqkXqoXn Xy d d l Z d d l Z Wn' e k
 rd Z e j  j! d  n Xe" e d  rd d	 l m# Z# n d d
 l$ m% Z# d d l& m' Z' d Z( d Z) e* d e( d e)  Z+ e j,   p'd Z- d   Z. e d  Z/ d   Z0 d d  Z1 d   Z2 d   Z3 d e4 f d     YZ5 d e4 f d     YZ6 d e6 f d     YZ7 d e4 f d     YZ8 d e4 f d     YZ9 d e j: f d      YZ; d! e; f d"     YZ< d# e< f d$     YZ= d% e j> f d&     YZ? d' e? f d(     YZ@ d) e? f d*     YZA d+ e? f d,     YZB d- e4 f d.     YZC eC   ZD d/ e jE e8 f d0     YZF d1 eF f d2     YZG d3 eF f d4     YZH d5 eF f d6     YZI d7 e8 e' jJ f d8     YZK d9 eF e' jL f d:     YZM d; eM e' jN f d<     YZO d= eO f d>     YZP d? eM f d@     YZQ dA eM f dB     YZR dC eM f dD     YZS dE eF f dF     YZT dG eT f dH     YZU dI eF f dJ     YZV dK eF f dL     YZW dM eF f dN     YZX dO eF f dP     YZY dQ   ZZ dR eF f dS     YZ[ dT e[ f dU     YZ\ dV e4 f dW     YZ] dX eF e' j^ e] f dY     YZ_ dZ eF f d[     YZ` d\ e ja e8 f d]     YZb d^ eb f d_     YZc d` e ja e8 f da     YZd db e ja e8 e] f dc     YZe eK   Zf eG jg   Zh eh ef _h dd   Zi ei   d S(e   s)   
GDB extension that adds Cython support.
i(   t   print_functionN(   t   etree(   t   cElementTree(   t   ElementTrees,   Install pygments for colorized source code.
t   string_to_argv(   R   (   t   split(   t	   libpythont   CObjectt   PythonObjects   UTF-8c           s"   t  j      f d    } | S(   s   *sigh*, readlinec            s6   y   |  |   SWn t  k
 r1 t j     n Xd  S(   N(   t	   Exceptiont	   tracebackt	   print_exc(   t   argst   kwargs(   t   function(    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   wrapperJ   s
    
(   t	   functoolst   wraps(   R   R   (    (   R   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   dont_suppress_errorsH   s    c           s     f d   } | S(   Nc           s(   t  j    d     f d   } | S(   Nc           sp   y | p t  j   } Wn  t k
 r8 t  j d   n X  r] | j   d  k r] t    n   |  | | |  S(   Ns   No frame is currently selected.(   t   gdbt   selected_framet   RuntimeErrort   GdbErrort   namet   Nonet   NoFunctionNameInFrameError(   t   selft   frameR   R   (   t   errR   (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR   W   s    (   R   R   R   (   R   R   (   R   (   R   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt	   decoratorV   s    
(    (   R   R   (    (   R   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   default_selected_gdb_frameU   s    c           s(   t  j    t   f d     } | S(   Nc           sL   | j  d  p t j   } |  j |  s< t j d   n    |  | |  S(   NR   sH   Selected frame does not correspond with a Cython function we know about.(   t   getR   R   t   is_cython_functionR   (   R   R   R   R   (   R   (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR   g   s    (   R   R   t   require_running_program(   R   R   (    (   R   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   require_cython_framef   s    c           s      f d   } | S(   Nc           s(   t  j        f d    } | S(   Nc           s   |  j    } |  j   } | s+ | r>  r>  |  | |  nA | rT t j   n+ |  j   rp t j    n t j d   d  S(   NsF   Not a function cygdb knows about. Use the normal GDB commands instead.(   R    t   is_python_functionR   t   executet   is_relevant_functionR   (   R   R   R   t   is_cyt   is_py(   t	   c_commandR   t   python_command(    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR   t   s    (   R   R   (   R   R   (   R(   R)   (   R   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR   s   s    $(    (   R(   R)   R   (    (   R(   R)   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   dispatch_on_framer   s    c           s"   t  j      f d    } | S(   Nc            s>   y t  j   Wn  t k
 r0 t  j d   n X  |  |   S(   Ns   No frame is currently selected.(   R   R   R   R   (   R   R   (   R   (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR      s
    (   R   R   (   R   R   (    (   R   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR!      s    c           s"   t  j      f d    } | S(   Nc           s4   t  | t j  r! | j   } n    |  | | |  S(   N(   t
   isinstanceR   t   Valuet   string(   R   R-   R   R   (   R   (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR      s    (   R   R   (   R   R   (    (   R   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   gdb_function_value_to_unicode   s    t   CythonModulec           B  s   e  Z d    Z RS(   c         C  sC   | |  _  | |  _ | |  _ i  |  _ i  |  _ i  |  _ i  |  _ d  S(   N(   R   t   filenamet
   c_filenamet   globalst   lineno_cy2ct   lineno_c2cyt	   functions(   R   t   module_nameR0   R1   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   __init__   s    						(   t   __name__t
   __module__R7   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR/      s   t   CythonVariablec           B  s   e  Z d    Z RS(   c         C  s7   | |  _  | |  _ | |  _ | |  _ t |  |  _ d  S(   N(   R   t   cnamet   qualified_namet   typet   intt   lineno(   R   R   R;   R<   R=   R?   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR7      s
    				(   R8   R9   R7   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR:      s   t   CythonFunctionc           B  s   e  Z e d  d  Z RS(   t   Falsec	   	      C  se   t  t |   j | | | | |  | |  _ | |  _ | d k |  _ i  |  _ g  |  _ t   |  _	 d  S(   Nt   True(
   t   superR@   R7   t   modulet   pf_cnamet   is_initmodule_functiont   localst	   argumentst   sett   step_into_functions(	   R   RD   R   R;   RE   R<   R?   R=   RF   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR7      s    					(   R8   R9   R   R7   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR@      s   t
   CythonBasec           B  s   e  Z e d  e  d    Z e d  e  d    Z e   d    Z e   d    Z e   d    Z e   d    Z	 e   d    Z
 e   d    Z e   d	    Z e d  e  e d
   Z d   Z d   Z d d d  Z d   Z RS(   R   c         C  s   | j    |  j j k S(   N(   R   t   cyt   functions_by_cname(   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR       s    c         C  s<   | j    d k r8 t j |  j   } | o7 | j   St S(   s   
        Tells if a frame is associated with a Python function.
        If we can't read the Python frame information, don't regard it as such.
        t   PyEval_EvalFrameEx(   R   R   t   Framet   get_pyopt   is_optimized_outRA   (   R   R   t   pyframe(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR#      s    c         C  s
   | j    S(   N(   R   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   get_c_function_name   s    c         C  s   | j    j S(   N(   t   find_salt   line(   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   get_c_lineno   s    c         C  s7   |  j  j j | j    } | d  k r3 t    n  | S(   N(   RL   RM   R   R   R   t   NoCythonFunctionInFrameError(   R   R   t   result(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   get_cython_function   s    c         C  s.   |  j  |  } | j j j |  j |  d  S(   s   
        Get the current Cython line number. Returns 0 if there is no
        correspondence between the C and Cython code.
        i    (   RY   RD   R4   R   RV   (   R   R   t   cyfunc(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   get_cython_lineno   s    c         C  sL  d  } } } |  j |  rb |  j |  j j } |  j |  } t r9t j j d t	  } q9n |  j
 |  r t j |  j   } | s t j d   n  | j   } | j   } t r9t j j d t	  } q9nb | j   } | s | j rd  } d } n6 | j j   } | j } t r9t j j d t	  } n  t | |  | f S(   Nt   stripalls*   Unable to read information on python framei    (   R   R    RY   RD   R0   R[   t   pygmentst   lexerst   CythonLexerRA   R#   R   RO   RP   R   R   t   current_line_numt   PythonLexerRT   t   symtabt   fullnameRU   t   CLexert   SourceFileDescriptor(   R   R   R0   R?   t   lexert   pyframeobjectt   symbol_and_line_obj(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   get_source_desc   s0    		c         C  s   |  j    \ } } | j |  S(   N(   Ri   t
   get_source(   R   R   t   source_descR?   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   get_source_line  s    c         C  so   | j    } | j   } |  j |  s6 |  j |  r: t S| rk |  j |  rk |  j |  } | | j k St S(   sl   
        returns whether we care about a frame on the user-level when debugging
        Cython code
        (   R   t   olderR    R#   RB   RY   RJ   RA   (   R   R   R   t   older_framet   cython_func(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR%      s    c           s~  t  j   }   j   y  j    \ } } Wn  t k
 rQ t d |  d SX| r  j    r t j    j	   } | d k s | j   r  j   | d t S| j } d }	 g  }
 nx  j    r j    }    f d   } | j } | j }	 g  }
 n-  j    \ } }   j   } | }	 g  }
 y t  j |	  } Wn t k
 rgd } nY X| j } t | t  st | t t f  st |  } n  t | j   d d  } n  d j d   |
 D  } t j j d	 | | | | f  | j d k	 r(t j j d
 | j | f  n  t j j d  y! t j j d | j  |   Wn t  j! k
 ron X| j   d S(   sk   
        Print a C, Cython or Python stack frame and the line of source code
        if available.
        s%   #%-2d Unknown Frame (compile with -g)Nt   is_cRN   c           s    j  j j |  d   S(   NR   (   RL   t	   cy_cvaluet   invoke(   t   arg(   R   R   (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   <lambda>M  t    i    s   , c         s  s%   |  ] \ } } d  | | f Vq d S(   s   %s=%sN(    (   t   .0R   t   val(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pys	   <genexpr>d  s    s   #%-2d 0x%016x in %s(%s)s	    at %s:%ss   
s       ("   R   R   t   selectRi   R   t   printR#   R   RO   RP   R   RQ   t   print_stackframeRB   t   co_nameR    RY   R   R;   t   parse_and_evalR   t   addressR+   R>   t   strt   bytesR   t   joint   syst   stdoutt   writeR0   Rj   R   (   R   R   t   indexRp   R   Rk   R?   RR   t	   func_namet
   func_cnamet	   func_argsRZ   t   ft	   gdb_valuet   func_addresst   a(    (   R   R   s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRz   1  sV    
					
	  !c         C  sk   t  j d  } y t  j d  } Wn) t k
 rM t  j t j d    n X| j | j    } | d S(   Nt   __pyx_mt   PyModuleObjectsy                   Unable to lookup type PyModuleObject, did you compile python
                with debugging support (-g)?t   md_dict(	   R   R|   t   lookup_typeR   R   t   textwrapt   dedentt   castt   pointer(   R   t   mR   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   get_remote_cython_globals_dicts  s    c         C  sa   |  j    } t j j |  } i  } t   } x- | j   D] \ } } | | | j |  <q: W| S(   sk   
        Get the Cython globals dict where the remote names are turned into
        local strings.
        (   R   R   t   PyObjectPtrt   from_pyobject_ptrRI   t   itemst   proxyval(   R   t   remote_dictt   pyobject_dictRX   t   seent   kt   v(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   get_cython_globals_dict  s    	Ru   c         C  sr   t  j |  r d } n d | j f } | d  k rQ t d | | | | f  n t d | | | | | f  d  S(   NRu   s   (%s) s   %s%s = %s%ss   %s%-*s = %s%s(   R   t   pretty_printer_lookupR=   R   Ry   (   R   R   t   valuet   max_name_lengtht   prefixt   typename(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   print_gdb_value  s    	c         C  sq   | j  | } |  j   } d | j k rd | | j k r` | j t k r\ t t j | j   St	 St
 S| | j k S(   Ns   ->(   RG   R[   R;   R?   R=   R   R>   R   R|   RB   RA   (   R   Ro   t
   local_namet   cyvart
   cur_lineno(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   is_initialized  s    N(   R8   R9   R   RA   R    R#   RS   RV   RY   R[   Ri   Rl   R%   Rz   R   R   R   R   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRK      s   	!A		Re   c           B  sD   e  Z d d   Z d   Z d   Z d   Z d e d e d  Z	 RS(   c         C  s   | |  _  | |  _ | |  _ d  S(   N(   R0   Rf   t	   formatter(   R   R0   Rf   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR7     s    		c         C  s   |  j  d  k	 S(   N(   R0   R   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   valid  s    c         C  sn   t  rj |  j rj t j rj t j j } |  j d  k rK t  j j	 d |  } n	 |  j } t  j
 | |  j |  S| S(   Nt   bg(   R]   Rf   t
   parameterst   colorize_codet   terminal_backgroundR   R   R   t
   formatterst   TerminalFormattert	   highlight(   R   t   codeR   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   lex  s    	c      	   c  s   t  |  j   } | r< | r< |  j | j    j   } n  t j | | d | d  } xt t |  D]f \ } }	 | | | k r d }
 n d }
 | r | r |  j |	  }	 n  d |
 | | |	 j   f Vqf WWd  QXd  S(   Ni   t   >t    s   %s %4d    %s(	   t   openR0   R   t   readt
   splitlinest	   itertoolst   islicet	   enumeratet   rstrip(   R   t   startt   stopt
   lex_sourcet	   mark_linet
   lex_entireR   t   slicet   idxRU   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   _get_source  s    	i    c         C  s   t  j d  } |  j s! |  n  t | d  } | d  k rI | d } n  y& d j |  j | | | | |   SWn t k
 r |  n Xd  S(   Ns   Unable to retrieve source codei   s   
(   R   R   R0   t   maxR   R   R   t   IOError(   R   R   R   R   R   R   t   exc(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRj     s    		 N(
   R8   R9   R   R7   R   R   R   RB   RA   Rj   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRe     s   				t
   CyGDBErrorc           B  s   e  Z d  Z d   Z RS(   s6   
    Base class for Cython-command related errors
    c         G  s,   | p |  j  f } t t |   j |   d  S(   N(   t   msgRC   R   R7   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR7     s    (   R8   R9   t   __doc__R7   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR     s   RW   c           B  s   e  Z d  Z d Z RS(   s]   
    raised when the user requests the current cython function, which is
    unavailable
    s7   Current function is a function cygdb doesn't know about(   R8   R9   R   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRW     s   R   c           B  s   e  Z d  Z d Z RS(   si   
    raised when the name of the C function could not be determined
    in the current C stack frame
    sD   C function name could not be determined in the current C stack frame(   R8   R9   R   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR     s   t   CythonParameterc           B  s)   e  Z d  Z d d  Z d   Z e Z RS(   s*   
    Base class for cython parameters
    c         C  sN   |  j  j |  _ |  _ t t |   j | | |  | d  k	 rJ | |  _ n  d  S(   N(	   t	   __class__R   t   show_doct   set_docRC   R   R7   R   R   (   R   R   t   command_classt   parameter_classt   default(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR7     s
    c         C  s   t  |  j  S(   N(   t   boolR   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   __bool__  s    N(   R8   R9   R   R   R7   R   t   __nonzero__(    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR     s   	t    CompleteUnqualifiedFunctionNamesc           B  s   e  Z d  Z RS(   sH   
    Have 'cy break' complete unqualified function or method names.
    (   R8   R9   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR     s   t   ColorizeSourceCodec           B  s   e  Z d  Z RS(   s5   
    Tell cygdb whether to colorize source code.
    (   R8   R9   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR     s   t   TerminalBackgroundc           B  s   e  Z d  Z RS(   sJ   
    Tell cygdb about the user's terminal background (light or dark).
    (   R8   R9   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR   %  s   t   CythonParametersc           B  s   e  Z d  Z d   Z RS(   s   
    Simple container class that might get more functionality in the distant
    future (mostly to remind us that we're dealing with parameters).
    c         C  s^   t  d t j t j t  |  _ t d t j t j t  |  _ t	 d t j t j
 d  |  _ d  S(   Nt   cy_complete_unqualifiedt   cy_colorize_codet   cy_terminal_background_colort   dark(   R   R   t   COMMAND_BREAKPOINTSt   PARAM_BOOLEANRB   t   complete_unqualifiedR   t   COMMAND_FILESR   R   t   PARAM_STRINGR   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR7   1  s    (   R8   R9   R   R7   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR   +  s   t   CythonCommandc           B  s5   e  Z d  Z e j Z e d    Z e d    Z RS(   s(   
    Base class for Cython commands
    c         C  sE   t  |  d  s% |  | |  j | |  S|  | |  j |  j | |  Sd  S(   Nt   completer_class(   t   hasattrR   R   (   t   clst   clsnameR   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt	   _registerN  s    c         O  sG   t  |  d d   } | r1 |  j |  j | |  n  |  j |  j | |  S(   Nt   alias(   t   getattrR   R   R   R   (   R   R   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   registerV  s    (	   R8   R9   R   R   t   COMMAND_NONER   t   classmethodR   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR   G  s   	t   CyCyc           B  s/   e  Z d  Z d Z e j Z e j Z d   Z	 RS(   sa  
    Invoke a Cython command. Available commands are:

        cy import
        cy break
        cy step
        cy next
        cy run
        cy cont
        cy finish
        cy up
        cy down
        cy select
        cy bt / cy backtrace
        cy list
        cy print
        cy set
        cy locals
        cy globals
        cy exec
    RL   c      .   C  s  t  t |   j | | | d t t d t j   d t j   d t j   d t	 j   d t
 j   d t j   d t j   d	 t j   d
 t j   d t j   d t j   d t j   d t j   d t j   d t j   d t j d d  d t j   d t j   d t d  d t d  d t d  d t d   } x3 | j   D]% \ } } |  | _ t |  | |  qFW|  |  _ i  |  _  i  |  _! i  |  _" t# j$ t%  |  _& d  S(   NR   t   import_t   break_t   stept   nextt   runt   contt   finisht   upt   downRx   t   btt   listt   print_RG   R2   t   exec_s   cy execs   -cy-exect   _execRI   t   cy_cnameRq   t	   cy_linenot   cy_eval('   RC   R   R7   RB   t   dictt   CyImportR   t   CyBreakt   CyStept   CyNextt   CyRunt   CyContt   CyFinisht   CyUpt   CyDownt   CySelectt   CyBacktracet   CyListt   CyPrintt   CyLocalst	   CyGlobalsR   t   FixGdbCommandt   CyExect   CySett   CyCNamet   CyCValuet   CyLinet   CyEvalR   RL   t   setattrt   cython_namespacet   functions_by_qualified_nameRM   t   collectionst   defaultdictR   t   functions_by_name(   R   R   R   R   t   commandst   command_namet   command(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR7   z  sB    					(
   R8   R9   R   R   R   R   R   t   COMPLETE_COMMANDR   R7   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR   _  s
   		R  c           B  s/   e  Z d  Z d Z e j Z e j Z d   Z	 RS(   sb   
    Import debug information outputted by the Cython compiler
    Example: cy import FILE...
    s	   cy importc         C  s  t  | t  r! | j t  } n  xt |  D]q} y t |  } Wn3 t k
 ry } t j d | | j	 d f   n Xt
 j |  } x| j   D]} t | j   } | |  j j | j <x7 | j d  D]& }	 |	 j }
 t |
   | j |
 d <q Wx | j d  D]} t d | | j  } | j } | j } |  j j | j |  | |  j j | j <| |  j j | j <| }
 | j | <x7 | j d  D]& } | j }
 t |
   | j |
 d <qWx4 | j d  D]# } | j }
 | j j |
 d  qW| j  j! d	   | j d
  D  qWx} | j d  D]l } t" | j d  } t# t$ t" | j d j%     } t& |  | j' | <x | D] } | | j( | <qWq+Wq Wq. Wd  S(   Ns   Unable to open file %r: %si   t   GlobalsR   t	   FunctionsRD   t   Localst   StepIntoFunctionsc         s  s   |  ] } | j  Vq d  S(   N(   t   tag(   Rv   t   funcarg(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pys	   <genexpr>  s    t	   Argumentst   LineNumberMappingt   cython_linenot	   c_linenos()   R+   t   BYTESt   decodet   _filesystemencodingR   R   t   OSErrorR   R   R   R   t   parset   getrootR/   t   attribRL   R  R   t   findR:   R2   R@   R<   R  t   appendR  RM   R;   R5   RG   RJ   t   addRH   t   extendR>   R   t   mapR   t   minR3   R4   (   R   R   t   from_ttyRs   R   t   et   tRD   t   cython_modulet   variablet   dR   t   cython_functionR   t   qnamet   localt   step_into_funct   markerR)  R*  t   c_lineno(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr     sJ    $							"(
   R8   R9   R   R   R   t   COMMAND_STATUSR   t   COMPLETE_FILENAMER   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s
   		R  c           B  sG   e  Z d  Z d Z e j Z d   Z d   Z d   Z	 e
 d    Z RS(   s  
    Set a breakpoint for Cython code using Cython qualified name notation, e.g.:

        cy break cython_modulename.ClassName.method_name...

    or normal notation:

        cy break function_or_method_name...

    or for a line number:

        cy break cython_module:lineno...

    Set a Python breakpoint:
        Break on any function or method named 'func' in module 'modname'

            cy break -p modname.func...

        Break on any function or method named 'func'

            cy break -p func...
    s   cy breakc         C  s   | j  d  \ } } } t |  } | r= |  j j | } n |  j   j } | | j k r | j | } d | j | f } t j	 d |  n t j
 d   d  S(   Nt   :s   %s:%ss   break s5   Not a valid line number. Does it contain actual code?(   t	   partitionR>   RL   R  RY   RD   R3   R1   R   R$   R   (   R   R   t
   modulenamet   _R?   R;  RC  t
   breakpoint(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt
   _break_pyx  s    c         C  s  |  j  j j |  } | r- | j r- d  } n  | g } | s|  j  j j |  pT g  } g  | D] } | j s^ | ^ q^ } | s t j d |  d  St |  d k rt	 d  x1 t
 |  D]# \ } } t	 d | | j f  q Wx t ry t d  } Wn t k
 rd  SX| j   d k r(d  S| j   d k rD| } Pq | j   rd t |  k ost |  k  n r| t |  g } Pq t	 d	  q Wq| d g } n  xB | D]: } t j d
 | j  | j rt j d
 | j  qqWd  S(   Ns   break i   s"   There are multiple such functions:s   %3d) %ssM   Select a function, press 'a' for all functions or press 'q' or '^D' to quit: t   qR   i    s   Not understood...s   break %s(   RL   R  R   RF   R   R  R   R$   t   lenRy   R   R<   RB   t   inputt   EOFErrort   lowert   isdigitR>   R;   RE   (   R   t   funcnamet   funct   break_funcst   funcsR   R   RX   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   _break_funcname  sF    		"
	(	c         C  s   t  | t  r! | j t  } n  t |  } | j d  rO | d } t } n t } xQ | D]I } | r| t j	 d |  q\ d | k r |  j
 |  q\ |  j |  q\ Wd  S(   Ns   -pi   s   py-break %sRF  (   R+   R+  R,  R-  R   t
   startswithRB   RA   R   R$   RK  RV  (   R   t   function_namesR8  t   argvt   python_breakpointsRR  (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   L  s    
	c         C  s  g  |  j  j j   D]( \ } } t d   | D  r | ^ q } g  |  j  j j   D] \ } } | j sT | ^ qT } t j r t j	 | |  } n | } | j
   j   }	 |	 s d |	 d k rt | t |   j    }
 g  | D]' } | j |  r | |
 k r | ^ q S|	 d } g  | D] } | j |  r"| ^ q"} t |  t |  k rt |  t |  } g  | D] } | | ^ qx} n  | S(   Nc         s  s   |  ] } | j  Vq d  S(   N(   RF   (   Rv   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pys	   <genexpr>c  s    t   .i(   RL   R  R   t   anyR  RF   R   R   R   t   chaint   stripR   RI   RM  RW  (   R   t   textt   wordt   nt   Lt   namesR   t   qnamest	   all_namest   wordsR   t   lastwordt   complt   strip_prefix_length(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   complete^  s$    "	%
( (   R8   R9   R   R   R   R   R   RK  RV  Rr   R   Rj  (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s   			1	t
   CythonInfoc           B  s;   e  Z d  Z d   Z d   Z d   Z d   Z d   Z RS(   sM   
    Implementation of the interface dictated by libpython.LanguageInfo.
    c         C  s2   |  j  |  r |  j |  St t |   j |  S(   N(   R    R[   RC   Rk  R?   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR?     s    c         C  sH   y t  t |   j |  } Wn t j k
 r3 d  SX| j   pC d  Sd  S(   N(   RC   Rk  Rl   R   R   R   R^  (   R   R   RU   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRl     s
    c         C  s#   |  j  r t t |   j |  Sd  S(   N(   R#   RC   Rk  t   exc_info(   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRl    s    	c         C  s   |  j    r |  j   j Sd S(   N(    (   R    RY   RJ   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   runtime_break_functions  s    c         C  s    d g } | j  |  j j  | S(   NRN   (   R5  RL   RM   (   R   RX   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   static_break_functions  s    	(   R8   R9   R   R?   Rl   Rl  Rm  Rn  (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRk    s   					t   CythonExecutionControlCommandc           B  s   e  Z e d     Z RS(   c         C  s   |  |  j  t  S(   N(   R   t   cython_info(   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR     s    (   R8   R9   R   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRo    s   R  c           B  s#   e  Z d  Z d Z e Z d   Z RS(   s&   Step through Cython, Python or C code.s   cy -stepc         C  sy   |  j    r |  j |  j  nV |  j   sb |  j r= d } n d } |  j t j | d t  n |  j d |  j  d  S(   NR   R   t	   to_stringt   stepinto(	   R#   t   python_stepRr  R    t   finish_executingR   R$   RB   R   (   R   R   R8  R  (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr     s    		(   R8   R9   R   R   RB   Rr  Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s   R  c           B  s   e  Z d  Z d Z e Z RS(   s#   Step-over Cython, Python or C code.s   cy -next(   R8   R9   R   R   RA   Rr  (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s   R  c           B  s   e  Z d  Z d Z e j Z RS(   s   
    Run a Cython program. This is like the 'run' command, except that it
    displays Cython or Python source lines as well
    s   cy run(   R8   R9   R   R   Ro  R   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s   R  c           B  s   e  Z d  Z d Z e j Z RS(   s   
    Continue a Cython program. This is like the 'run' command, except that it
    displays Cython or Python source lines as well.
    s   cy cont(   R8   R9   R   R   Ro  R   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s   R  c           B  s   e  Z d  Z d Z e j Z RS(   s-   
    Execute until the function returns.
    s	   cy finish(   R8   R9   R   R   Ro  R   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s   R  c           B  s#   e  Z d  Z d Z d Z d   Z RS(   s5   
    Go up a Cython, Python or relevant C frame.
    s   cy upR   c         G  s   yL t  j |  j d t x/ |  j t  j    sJ t  j |  j d t q WWn% t k
 rs } t  j | j    n Xt  j   } d } x  | r | j	   } | d 7} q W|  j
 d | d  d  S(   NRq  i    i   R   (   R   R$   t   _commandRB   R%   R   R   R   R   Rm   Rz   (   R   R   R9  R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr     s    	(   R8   R9   R   R   Ru  Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s   R	  c           B  s   e  Z d  Z d Z d Z RS(   s7   
    Go down a Cython, Python or relevant C frame.
    s   cy downR   (   R8   R9   R   R   Ru  (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR	    s   R
  c           B  s   e  Z d  Z d Z d   Z RS(   s   
    Select a frame. Use frame numbers as listed in `cy backtrace`.
    This command is useful because `cy backtrace` prints a reversed backtrace.
    s	   cy selectc         C  s   y t  |  } Wn' t k
 r9 t j d | f   n Xt j   } x | j   rd | j   } qI Wt j |  } y  t j d | | d f  Wn% t	 k
 r } t j | j
    n Xd  S(   Ns   Not a valid number: %rs	   select %di   (   R>   t
   ValueErrorR   R   R   t   newerR   t
   stackdepthR$   R   R   (   R   t   stacknoR8  R   Rx  R9  (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr     s     (   R8   R9   R   R   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR
    s   R  c           B  s;   e  Z d  Z d Z d Z e j Z e j Z	 e
 d    Z RS(   s   Print the Cython stacks   cy bts   cy backtracec         C  s   t  j   } x | j   r* | j   } q W| d k } d } xl | r y |  j |  } Wn t k
 rr t } n X| s | r |  j | |  n  | d 7} | j   } q@ Wd  S(   Ns   -ai    i   (   R   R   Rm   R%   R   RA   Rz   Rw  (   R   R   R8  R   t	   print_allR   t   is_relevant(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   )  s    	

(   R8   R9   R   R   R   R   t   COMMAND_STACKR   t   COMPLETE_NONER   R!   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  !  s   		R  c           B  s/   e  Z d  Z d Z e j Z e j Z d   Z	 RS(   sa   
    List Cython source code. To disable to customize colouring see the cy_*
    parameters.
    s   cy listc         C  sF   |  j    \ } } | j | d | d d | d t } t |  d  S(   Ni   R   R   (   Ri   Rj   RB   Ry   (   R   RI  R8  t   sdR?   t   source(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   K  s    	(
   R8   R9   R   R   R   R   R   R}  R   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  @  s
   		R  c           B  s2   e  Z d  Z d Z e j Z d d  Z d   Z	 RS(   sT   
    Print a Cython variable using 'cy-print x' or 'cy-print module.function.x'
    s   cy printc         C  s   |  j    r t j d |  S|  j   r |  j j j | j d   } x* | D]" } | d k ro | j   } qN PqN W|  j	 | | |  n t j d |  d  S(   Ns	   py-print t   *s   print (
   R#   R   R$   R    RL   Rq   Rr   t   lstript   dereferenceR   (   R   R   R8  R   R   t   c(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   Z  s    c         C  s<   |  j    r4 |  j   } t t j | j | j   Sg  Sd  S(   N(   R    RY   R   R   R]  RG   R2   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRj  i  s    N(
   R8   R9   R   R   R   t   COMMAND_DATAR   R   Rr   Rj  (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  R  s
   	c         C  s   |  d j    S(   Ni    (   RP  (   t   item(    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRt   q  Ru   R  c           B  sD   e  Z d  Z d Z e j Z e j Z e	 d d d d  d    Z
 RS(   s8   
    List the locals from the current Cython frame.
    s	   cy localsR(   s   info localsR)   s	   py-localsc   	      C  s   |  j    } | j r/ |  j j j | |  d  S| j } t t | d t  } x{ t | j	   d t
 D]a \ } } |  j |  j    | j  ri t j | j  } | j s |  j | j | | d  q qi qi Wd  S(   Nt   keyRu   (   RY   RF   RL   R2   Rr   RG   RM  R   t   sortedR   t   sortkeyR   R   R   R|   R;   RQ   R   (	   R   R   R8  R>  t   local_cython_varsR   R   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   }  s    		%	(   R8   R9   R   R   R   R|  R   R}  R   R*   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  t  s
   		R  c           B  sD   e  Z d  Z d Z e j Z e j Z e	 d d d d  d    Z
 RS(   s:   
    List the globals from the current Cython module.
    s
   cy globalsR(   s   info variablesR)   s
   py-globalsc         C  s|  |  j    } |  j   j j } d } d } | rK t t | d t  } n  | rf t t |   } n  t | |  } t   } t d  x\ t | j	   d t
 D]B \ }	 }
 |
 j t j  }
 | j |	  t d | |	 |
 f  q Wt d  x t | j	   d t
 D]j \ } } | | k r
y t j | j  } Wn t k
 rKqtX| j st|  j | j | | d  qtq
q
Wd  S(   Ni    R  s   Python globals:s       %-*s = %ss
   C globals:s       (   R   RY   RD   R2   RM  R   RI   Ry   R  R   R  t   get_truncated_reprR   t   MAX_OUTPUT_LENR4  R   R|   R;   R   RQ   R   R   (   R   R   R8  t   global_python_dictt   module_globalst   max_globals_lent   max_globals_dict_lenR   R   R   R   R   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr     s2    	
%
%	(   R8   R9   R   R   R   R|  R   R}  R   R*   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s
   		t   EvaluateOrExecuteCodeMixinc           B  s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s   
    Evaluate or execute Python code in a Cython or Python frame. The 'evalcode'
    method evaluations Python code, prints a traceback if an exception went
    uncaught, and returns any return value as a gdb.Value (NULL on exception).
    c   	      C  s   |  j    } x | j j   D] \ } } | j t k r |  j | |  r y t j | j  } Wn t	 k
 ru q n X| j
 r q n  | j |  } d | | | j f } z8 t j |  d k  r t j d  t j d   n  Wd | j |  Xq q Wd S(   sB   Fill a remotely allocated dict with values from the Cython C stacks   
                    (PyObject *) PyDict_SetItem(
                        (PyObject *) %d,
                        (PyObject *) %d,
                        (PyObject *) %s)
                i    s   PyErr_Print()s   Unable to execute Python code.N(   RY   RG   R   R=   R   R   R   R|   R;   R   RQ   t   alloc_pystringR   t   xdecref(	   R   t   executort   local_dict_pointerRo   R   R   Rw   t	   pystringpR   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   _fill_locals_dict  s     !	c         C  sd   t  j   } xB | rP |  j |  s3 |  j |  rA | j   | S| j   } q Wt  j d   d  S(   Ns0   There is no Cython or Python frame on the stack.(   R   R   R    R#   Rx   Rm   R   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt"   _find_first_cython_or_python_frame  s    	
c      
   C  s   t  j   r t j d  } t j d  } z5 |  j | t  j |   | j | | | |  } Wd  | j t  j |   XWd  QX| S(   Ns&   (PyObject *) PyModule_GetDict(__pyx_m)s   (PyObject *) PyDict_New()(   R   t   FetchAndRestoreErrorR   R|   R  t   pointervaluet   evalcodeR  (   R   R  R   t
   input_typet   global_dictt
   local_dictRX   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   _evalcode_cython  s    		c         C  sM   |  j    } t j   } |  j |  r: t j | | |  S|  j | | |  S(   si   
        Evaluate `code` in a Python or Cython stack frame using the given
        `input_type`.
        (   R  R   t   PythonCodeExecutorR#   t   _evalcode_pythonR  (   R   R   R  R   R  (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s
    (   R8   R9   R   R  R  R  R  (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s
   			R  c           B  s/   e  Z d  Z d Z e j Z e j Z d   Z	 RS(   sD   
    Execute Python code in the nearest Python or Cython frame.
    s   -cy-execc         C  sA   |  j  |  \ } } t j   } | j |  j | | j   d  S(   N(   t   readcodeR   R  R  R  t   Py_single_input(   R   t   exprR8  R  R  (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr     s    (
   R8   R9   R   R   R   R|  R   R}  R   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  	  s
   		R  c           B  s5   e  Z d  Z d Z e j Z e j Z e	 d    Z
 RS(   s   
    Set a Cython variable to a certain value

        cy set my_cython_c_variable = 10
        cy set my_cython_py_variable = $cy_eval("{'doner': 'kebab'}")

    This is equivalent to

        set $cy_value("my_cython_variable") = 10
    s   cy setc         C  sx   | j  d d  } t |  d k r6 t j d   n  | \ } } |  j j j | j    } t j d | | f  d  S(   Nt   =i   i   s,   Invalid expression. Use 'cy set var = expr'.s   set %s = %s(	   R   RM  R   R   RL   R   Rr   R^  R$   (   R   R  R8  t   name_and_exprt   varnameR;   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   (  s    (   R8   R9   R   R   R   R  R   R}  R   R"   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR    s
   
		R  c           B  s&   e  Z d  Z e e d d    Z RS(   s   
    Get the C name of a Cython variable in the current context.
    Examples:

        print $cy_cname("function")
        print $cy_cname("Class.method")
        print $cy_cname("module.function")
    c         C  s   | p t  j   } d  } |  j |  r |  j |  } | | j k rX | j | j } q | | j j k r | j j | j } q d | j j	 | f } | | j j
 k r | j j
 | j } q n  | s |  j j j |  } n  | s t  j d |   n  | S(   Ns   %s.%ss   No such Cython variable: %s(   R   R   R   R    RY   RG   R;   RD   R2   R   R5   RL   R  R   R   (   R   t   cynameR   R;   R>  R?  (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   ?  s     N(   R8   R9   R   R"   R.   R   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  5  s   R  c           B  s&   e  Z d  Z e e d d    Z RS(   s-   
    Get the value of a Cython variable.
    c         C  s   |  j    } |  j |  } |  j | |  rX t t |   j | d | } t j |  S| | k ro | | j St j	 d |   d  S(   NR   s   Variable %s is not initialized.(
   R   RY   R   RC   R  Rr   R   R|   t   _gdbvalR   (   R   R  R   t   globals_dictR>  R;   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   ^  s    N(   R8   R9   R   R"   R.   R   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  Y  s   R  c           B  s   e  Z d  Z e d    Z RS(   s&   
    Get the current Cython line.
    c         C  s
   |  j    S(   N(   R[   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   r  s    (   R8   R9   R   R"   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  m  s   R  c           B  s   e  Z d  Z e d    Z RS(   sO   
    Evaluate Python code in the nearest Python or Cython frame and return
    c         C  s   t  j j } |  j | |  S(   N(   R   R  t   Py_eval_inputR  (   R   t   python_expressionR  (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyRr   |  s    (   R8   R9   R   R.   Rr   (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyR  w  s   c           C  s*   t  j t j d  t j t j f  d  S(   Ns           define cy step
        cy -step
        end

        define cy next
        cy -next
        end

        document cy step
        %s
        end

        document cy next
        %s
        end
    (   R   t   source_gdb_scriptR   R   R  R   R  (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   register_defines  s    (j   R   t
   __future__R    t	   raw_inputRN  t	   NameErrorR   R   R
   R   R   R  R   t   unicodet   UNICODER~   R+  R   t   lxmlR   RB   t	   have_lxmlt   ImportErrorRA   t	   xml.etreeR   R   t   elementtree.ElementTreet   pygments.lexersR]   t   pygments.formattersR   t   stderrR   R   R   t   shlexR   t   Cython.DebuggerR   R   R   R   t   _data_typest   getfilesystemencodingR-  R   R   R"   R*   R!   R.   t   objectR/   R:   R@   RK   Re   R   R   RW   R   t	   ParameterR   R   R   R   R   R   t   CommandR   R   R  R  t
   PythonInfoRk  t   ExecutionControlCommandBaseRo  t   PythonStepperMixinR  R  R  R  R  R  R	  R
  R  R  R  R  R  R  R  t   PyExecR  R  t   FunctionR  R  R  R  Rp  R   RL   R  (    (    (    s8   lib/python2.7/site-packages/Cython/Debugger/libcython.pyt   <module>   s   



				
?
	Q@%
			+O$
			