
    Ngʵ                     v   d Z ddlmZ 	 eZn# e$ r Y nw xY wddlZddlZddlZddl	Z	ddl
Z
ddlZ	 eZeZn# e$ r eZeZY nw xY w	 ddlmZ dZnJ# e$ rB dZ	 ddlmZ n5# e$ r- 	 ddlmZ n"# e$ r 	 ddlZn# e$ r	 ddlmZ Y nw xY wY nw xY wY nw xY wY nw xY w	 ddlZddlZn'# e$ r dZej                            d	           Y nw xY w eed
          rddlmZ nddl m!Z ddl"m#Z# dZ$dZ% e&e$e%          Z' ej(                    pdZ)dgdZ*d Z+dhdZ,d Z-d Z. G d de/          Z0 G d de/          Z1 G d de1          Z2 G d de/          Z3 G d d e/          Z4 G d! d"ej5                  Z6 G d# d$e6          Z7 G d% d&e7          Z8 G d' d(ej9                  Z: G d) d*e:          Z; G d+ d,e:          Z< G d- d.e:          Z= G d/ d0e/          Z> e>            Z? G d1 d2ej@        e3          ZA G d3 d4eA          ZB G d5 d6eA          ZC G d7 d8eA          ZD G d9 d:e3e#jE                  ZF G d; d<eAe#jG                  ZH G d= d>eHe#jI                  ZJ G d? d@eJ          ZK G dA dBeH          ZL G dC dDeH          ZM G dE dFeH          ZN G dG dHeA          ZO G dI dJeO          ZP G dK dLeA          ZQ G dM dNeA          ZR G dO dPeA          ZS G dQ dReA          ZTdS ZU G dT dUeA          ZV G dV dWeV          ZW G dX dYe/          ZX G dZ d[eAe#jY        eX          ZZ G d\ d]eA          Z[ G d^ d_ej\        e3          Z] G d` dae]          Z^ G db dcej\        e3          Z_ G dd deej\        e3eX          Z` eF            ZaeBb                                Zcecea_c        df Zd ed             dS )iz)
GDB extension that adds Cython support.
    )print_functionN)etreeTF)cElementTree)ElementTreez,Install pygments for colorized source code.
string_to_argv)r   )split)	libpythonCObjectPythonObject)r
   r   zUTF-8c                       fd}|S )Nc                 L     t          j                   d fd	            }|S )Nc                     	 |pt          j                    }n"# t          $ r t          j        d          w xY wr"|                                t                       | |g|R i |S NzNo frame is currently selected.)gdbselected_frameRuntimeErrorGdbErrornameNoFunctionNameInFrameError)selfframeargskwargserrfunctions       U/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Debugger/libcython.pywrapperz>default_selected_gdb_frame.<locals>.decorator.<locals>.wrapperI   s    F5!3!5!5 F F Fl#DEEEF  3uzz||+02228D%9$999&999s    8N	functoolswraps)r   r   r   s   ` r   	decoratorz-default_selected_gdb_frame.<locals>.decoratorH   sC    		"	"		: 		: 		: 		: 		: 		: 
#	"		:      )r   r"   s   ` r   default_selected_gdb_framer%   G   s$         r#   c                 `     t          j                   t           fd                        }|S )Nc                     |                     d          pt          j                    }|                     |          st          j        d           | g|R i |S )Nr   zHSelected frame does not correspond with a Cython function we know about.)getr   r   is_cython_functionr   )r   r   r   r   r   s       r   r   z%require_cython_frame.<locals>.wrapperY   sx     

7##;s'9';';&&u-- 	A,  @ A A Ax.t...v...r#   )r    r!   require_running_programr   r   s   ` r   require_cython_framer,   X   sC    _X/ / / /  / Nr#   c                       fd}|S )Nc                 L     t          j                    fd            }|S )Nc                 (   |                                  }|                                 }|s|rs | g|R i | d S |rt          j                   d S |                                 rt          j                   d S t          j        d          )NzFNot a function cygdb knows about. Use the normal GDB commands instead.)r)   is_python_functionr   executeis_relevant_functionr   )r   r   r   is_cyis_py	c_commandr   python_commands        r   r   z5dispatch_on_frame.<locals>.decorator.<locals>.wrapperf   s    ++--E++--E K K~ K///////// KN+++++**,, KI&&&&&l $J K K Kr#   r   )r   r   r5   r6   s   ` r   r"   z$dispatch_on_frame.<locals>.decoratore   sJ    		"	"	K 	K 	K 	K 	K 	K 
#	"	K r#   r$   )r5   r6   r"   s   `` r   dispatch_on_framer7   d   s*         " r#   c                 F     t          j                    fd            }|S )Nc                      	 t          j                     n"# t          $ r t          j        d          w xY w | i |S r   )r   r   r   r   )r   r   r   s     r   r   z(require_running_program.<locals>.wrapperz   sb    	B     	B 	B 	B,@AAA	B x((((s    6r   r+   s   ` r   r*   r*   y   s8    _X) ) ) ) ) Nr#   c                 F     t          j                    fd            }|S )Nc                 z    t          |t          j                  r|                                } | |g|R i |S r   )
isinstancer   Valuestring)r   r>   r   r   r   s       r   r   z.gdb_function_value_to_unicode.<locals>.wrapper   sF    fci(( 	%]]__Fxf6t666v666r#   r   r+   s   ` r   gdb_function_value_to_unicoder?      s8    _X7 7 7 7 7
 Nr#   c                       e Zd Zd ZdS )CythonModulec                 h    || _         || _        || _        i | _        i | _        i | _        i | _        d S r   )r   filename
c_filenameglobalslineno_cy2clineno_c2cy	functions)r   module_namerC   rD   s       r   __init__zCythonModule.__init__   s9    	 $r#   N__name__
__module____qualname__rJ   r$   r#   r   rA   rA      s#        	 	 	 	 	r#   rA   c                       e Zd Zd ZdS )CythonVariablec                 f    || _         || _        || _        || _        t	          |          | _        d S r   )r   cnamequalified_nametypeintlineno)r   r   rR   rS   rT   rV   s         r   rJ   zCythonVariable.__init__   s0    	
,	&kkr#   NrK   r$   r#   r   rP   rP      s#        " " " " "r#   rP   c                   $     e Zd Zedf fd	Z xZS )CythonFunctionFalsec	                     t          t          |                               |||||           || _        || _        |dk    | _        i | _        g | _        t                      | _	        d S )NTrue)
superrX   rJ   modulepf_cnameis_initmodule_functionlocals	argumentssetstep_into_functions)
r   r]   r   rR   r^   rS   rV   rT   r_   	__class__s
            r   rJ   zCythonFunction.__init__   sr     	nd##,,T-2-;-1-3		5 	5 	5
  &<&F##&55   r#   )rL   rM   rN   r
   rJ   __classcell__rd   s   @r   rX   rX      sE         (/) ) ) ) ) ) ) ) ) )r#   rX   c                      e Zd Z ed          d             Z ed          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          dd            Zd Zd ZddZd ZdS )
CythonBaseF)r   c                 B    |                                 | j        j        v S r   )r   cyfunctions_by_cnamer   r   s     r   r)   zCythonBase.is_cython_function   s    zz||tw999r#   c                     |                                 dk    r=t          j        |                                          }|o|                                 S dS )z
        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.
        PyEval_EvalFrameExF)r   r	   Frameget_pyopis_optimized_out)r   r   pyframes      r   r0   zCythonBase.is_python_function   sR     ::<<///oe,,5577G=7#;#;#=#===ur#   c                 *    |                                 S r   )r   rl   s     r   get_c_function_namezCythonBase.get_c_function_name   s    zz||r#   c                 4    |                                 j        S r   )find_sallinerl   s     r   get_c_linenozCythonBase.get_c_lineno   s    ~~$$r#   c                     | j         j                            |                                          }|t	                      |S r   )rj   rk   r(   r   NoCythonFunctionInFrameError)r   r   results      r   get_cython_functionzCythonBase.get_cython_function   s8    +//

==>.000r#   c                     |                      |          }|j        j                            |                     |          d          S )z
        Get the current Cython line number. Returns 0 if there is no
        correspondence between the C and Cython code.
        r   )r|   r]   rG   r(   rx   )r   r   cyfuncs      r   get_cython_linenozCythonBase.get_cython_lineno   s@     ))%00}(,,T->->u-E-EqIIIr#   c                 V   d x}x}}|                      |          rs|                     |          j        j        }|                     |          }||d         k    sJ |d         }t
          r t
          j                            d          }n
|                     |          rt          j
        |                                          }|st          j        d          |                                }|                                }t
          r t
          j                            d          }ni|                                }|r|j        sd }d}nG|j                                        }|j        }t
          r t
          j                            d          }t+          ||          |fS )Nr      F)stripallz*Unable to read information on python frame)r)   r|   r]   rC   r   pygmentslexersCythonLexerr0   r	   ro   rp   r   r   current_line_numPythonLexerrv   symtabfullnamerw   CLexerSourceFileDescriptor)r   r   rC   rV   lexerfilename_and_linenopyframeobjectsymbol_and_line_objs           r   get_source_desczCythonBase.get_source_desc   s   $(((6E""5)) 	C//66=FH"&"8"8"?"?2155555(+F D 33U3CC$$U++ 	C%OE22;;==M  JlHJ J J %--//H"3355F D 33U3CC"'.."2"2& C.A.H C.5>>@@,1 C$O22E2BBE#He44f<<r#   c                 Z    |                                  \  }}|                    |          S r   )r   
get_source)r   r   source_descrV   s       r   get_source_linezCythonBase.get_source_line  s,    "2244V%%f---r#   c                    |                                 }|                                }|                     |          s|                     |          rdS |r3|                     |          r|                     |          }||j        v S dS )zl
        returns whether we care about a frame on the user-level when debugging
        Cython code
        TF)r   olderr)   r0   r|   rc   )r   r   r   older_framecython_funcs        r   r2   zCythonBase.is_relevant_function  s     zz||kkmm""5)) 	;T-D-DU-K-K 	;4 	;T44[AA 	;22;??K;:::ur#   c                     t          j                    }                                 	                                \  }}n## t          $ r t          d|z             Y dS w xY w|su                               r`t          j                  	                                }||
                                r                     |d          S |j        }d}	g }
nq                               r,                               } fd}|j        }|j        }	g }
n0                               \  }}                                }|}	g }
	 t          j        |	          }|j        }t'          |t(                    sSt'          |t*          t,          f          st+          |          }t)          |                                d         d          }n# t0          $ r d}Y nw xY wd                    d	 |
D                       }t4          j                            d
||||fz             |j        *t4          j                            d|j        d|           t4          j                            d           	 t4          j                            d|                    |          z              n# t           j        $ r Y nw xY w|                                 dS )zk
        Print a C, Cython or Python stack frame and the line of source code
        if available.
        z%#%-2d Unknown Frame (compile with -g)NT)is_crn   c                 F    j         j                            |           S )Nr   )rj   	cy_cvalueinvoke)argr   r   s    r   <lambda>z-CythonBase.print_stackframe.<locals>.<lambda>A  s    DG-44S4FF r#   r   z, c              3   *   K   | ]\  }}|d |V  dS )=Nr$   ).0r   vals      r   	<genexpr>z.CythonBase.print_stackframe.<locals>.<genexpr>X  s1      GG	css+GGGGGGr#   z#%-2d 0x%016x in %s(%s)z at :
    ) r   r   selectr   r   printr0   r	   ro   rp   rq   print_stackframeco_namer)   r|   r   rR   parse_and_evaladdressr<   rU   strbytesr   r   joinsysstdoutwriterC   r   r   )r   r   indexr   r   r   rV   rr   	func_name
func_cname	func_argsr~   f	gdb_valuefunc_addressas   ``              r   r   zCythonBase.print_stackframe%  s	    +--	"&"6"6u"="=K) 	 	 	9EABBBFF	  	//66 	oe,,5577G'":":"<"<,,UE,EEEI-JII$$U++ 	--e44FFFFFFAIJII"&"6"6u"="=K

I"JI
	?*:66I %,LlC00 ?!,e== 5#&|#4#4L"<#5#5#7#7#:A>>  	 	 	LLL	 IIGGYGGGGG
2e\9VW5XXYYY+JK,@,@,@&&IJJJ
	JVk&<&<V&D&DDEEEE| 	 	 	D	 	s5   A A$#A$G G#"G#<5J2 2KKc                    t          j        d          }	 t          j        d          }n4# t          $ r' t          j        t          j        d                    w xY w|                    |                                          }|d         S )N__pyx_mPyModuleObjectzy                Unable to lookup type PyModuleObject, did you compile python
                with debugging support (-g)?md_dict)	r   r   lookup_typer   r   textwrapdedentcastpointer)r   mr   s      r   get_remote_cython_globals_dictz)CythonBase.get_remote_cython_globals_dictg  s    y))	2 _-=>>NN 	2 	2 	2,x 00  1  1 2 2 2	2
 FF>))++,,|s	   + 1Ac                     |                                  }t          j                            |          }i }t	                      }|                                D ]\  }}|||                    |          <   |S )zk
        Get the Cython globals dict where the remote names are turned into
        local strings.
        )r   r	   PyObjectPtrfrom_pyobject_ptrrb   	iteritemsproxyval)r   remote_dictpyobject_dictr{   seenkvs          r   get_cython_globals_dictz"CythonBase.get_cython_globals_dictu  sv    
 99;;!-??LLuu!++-- 	) 	)DAq'(F1::d##$$r#   N c                     t          j        |          rd}nd|j        d}|t          ||d||           d S t          d|||||fz             d S )Nr   (z)  = z%s%-*s = %s%s)r	   pretty_printer_lookuprT   r   )r   r   valuemax_name_lengthprefixtypenames         r   print_gdb_valuezCythonBase.print_gdb_value  s    *511 	/HH	/ #(***.H"6644455ABBBBB/V_dHe$TTUUUUUr#   c                    |j         |         }|                                 d         }d|j        v rE||j        k    r8|j        t
          k    r&t          t          j        |j                            S dS dS ||j        k    S )Nr   z->TF)	r`   r   rR   rV   rT   r   rU   r   r   )r   r   
local_namecyvar
cur_linenos        r   is_initializedzCythonBase.is_initialized  s    ":.++--a0
5;K...:--s1%+>>???t5EL((r#   )F)Nr   )rL   rM   rN   r%   r)   r0   rt   rx   r|   r   r   r   r2   r   r   r   r   r   r$   r#   r   rh   rh      s       E***: : +*:  E***  +*  !!  "!  !!% % "!%  !!  "!  !!J J "!J  !! =  = "! =D  !!. . "!.  !!  "!   E***?  ?  ?  +*? B    	V 	V 	V 	V) ) ) ) )r#   rh   c                   4    e Zd Zd
dZd Zd Zd Z	 	 dd	ZdS )r   Nc                 0    || _         || _        || _        d S r   )rC   r   	formatter)r   rC   r   r   s       r   rJ   zSourceFileDescriptor.__init__  s     
"r#   c                     | j         d uS r   )rC   r   s    r   validzSourceFileDescriptor.valid  s    }D((r#   c                     t           rn| j        rgt          j        r[t          j        j        }| j        !t           j                            |          }n| j        }t          j	        || j        |          S |S )N)bg)
r   r   
parameterscolorize_codeterminal_backgroundr   r   
formattersTerminalFormatter	highlight)r   coder   r   s       r   lexzSourceFileDescriptor.lex  sq     	C
 	Cz'? 	C/5B~%$/AARAHH		 N	%dDJ	BBBr#   c              #     K   t          | j                  5 }|r;|r9|                     |                                                                          }t          j        ||dz
  |dz
            }t          |          D ]K\  }}	||z   |k    rd}
nd}
|r|s|                     |	          }	d|
||z   |	                                fz  V  L	 d d d            d S # 1 swxY w Y   d S )Nr   > z%s %4d    %s)	openrC   r   read
splitlines	itertoolsislice	enumeraterstrip)r   startstop
lex_source	mark_line
lex_entirer   sliceidxrw   r   s              r   _get_sourcez SourceFileDescriptor._get_source  s_     $-   	LA
  4j 4HHQVVXX&&1133$Q	4!8<<E&u-- 	L 	L	T3;)++ FF F *j *88D>>D$T[[]]'KKKKKK	L	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   B5CC!CTr   Fc           	          t          j        d          }| j        s|t          |d          }||dz   }	 d                    |                     |||||                    S # t          $ r |w xY w)NzUnable to retrieve source coder   r   )r   r   rC   maxr   r  IOError)r   r   r   r   r   r   excs          r   r   zSourceFileDescriptor.get_source  s    l;<<} 	IE1<19D	99  j)ZPPR R R 	 	 	I	s   +A" "A/r   )NTr   F)rL   rM   rN   rJ   r   r   r  r   r$   r#   r   r   r     sv        # # # #
) ) )
 
 
L L L, GH#     r#   r   c                   "     e Zd ZdZ fdZ xZS )
CyGDBErrorz6
    Base class for Cython-command related errors
    c                 V    |p| j         f} t          t          |           j        |  d S r   )msgr\   r	  rJ   )r   r   rd   s     r   rJ   zCyGDBError.__init__  s1    "{(j$($////r#   )rL   rM   rN   __doc__rJ   re   rf   s   @r   r	  r	    sB         0 0 0 0 0 0 0 0 0r#   r	  c                       e Zd ZdZdZdS )rz   z]
    raised when the user requests the current cython function, which is
    unavailable
    z7Current function is a function cygdb doesn't know aboutNrL   rM   rN   r  r  r$   r#   r   rz   rz     s           DCCCr#   rz   c                       e Zd ZdZdZdS )r   zi
    raised when the name of the C function could not be determined
    in the current C stack frame
    zDC function name could not be determined in the current C stack frameNr  r$   r#   r   r   r     s         CCCr#   r   c                   .     e Zd ZdZd fd	Zd ZeZ xZS )CythonParameterz*
    Base class for cython parameters
    Nc                     | j         j        x| _        | _        t	          t
          |                               |||           |	|| _        d S d S r   )rd   r  show_docset_docr\   r  rJ   r   )r   r   command_classparameter_classdefaultrd   s        r   rJ   zCythonParameter.__init__  sX    '+~'==ot$$--dM.=	? 	? 	? DJJJ r#   c                 *    t          | j                  S r   )boolr   r   s    r   __bool__zCythonParameter.__bool__  s    DJr#   r   )rL   rM   rN   r  rJ   r  __nonzero__re   rf   s   @r   r  r    sQ         ! ! ! ! ! !      KKKKKr#   r  c                       e Zd ZdZdS ) CompleteUnqualifiedFunctionNameszH
    Have 'cy break' complete unqualified function or method names.
    NrL   rM   rN   r  r$   r#   r   r  r               r#   r  c                       e Zd ZdZdS )ColorizeSourceCodez5
    Tell cygdb whether to colorize source code.
    Nr  r$   r#   r   r!  r!    r  r#   r!  c                       e Zd ZdZdS )TerminalBackgroundzJ
    Tell cygdb about the user's terminal background (light or dark).
    Nr  r$   r#   r   r#  r#    r  r#   r#  c                       e Zd ZdZd ZdS )CythonParametersz
    Simple container class that might get more functionality in the distant
    future (mostly to remind us that we're dealing with parameters).
    c                    t          dt          j        t          j        d          | _        t          dt          j        t          j        d          | _        t          dt          j        t          j	        d          | _
        d S )Ncy_complete_unqualifiedTcy_colorize_codecy_terminal_background_colordark)r  r   COMMAND_BREAKPOINTSPARAM_BOOLEANcomplete_unqualifiedr!  COMMAND_FILESr   r#  PARAM_STRINGr   r   s    r   rJ   zCythonParameters.__init__%  sx    $D%#	% %!
 0	 
 $6*	$ $   r#   N)rL   rM   rN   r  rJ   r$   r#   r   r%  r%    s-         
    r#   r%  c                   L    e Zd ZdZej        Zed             Zed             Z	dS )CythonCommandz(
    Base class for Cython commands
    c                 v    t          | d          s | || j        g|R i |S  | || j        | j        g|R i |S )Ncompleter_class)hasattrr  r3  )clsclsnamer   r   s       r   	_registerzCythonCommand._registerB  st    s-.. 	(3w 1CDCCCFCCC3w 133F (( ( ( &( ( (r#   c                     t          | dd           }|r|                     | j        ||           |                     | j        ||          S )Nalias)getattrr7  r9  r   )r5  r   r   r9  s       r   registerzCythonCommand.registerJ  sK    Wd++ 	3MM#)T6222}}SXtV444r#   N)
rL   rM   rN   r  r   COMMAND_NONEr  classmethodr7  r;  r$   r#   r   r1  r1  ;  s\          $M( ( [( 5 5 [5 5 5r#   r1  c                   B     e Zd ZdZdZej        Zej        Z	 fdZ
 xZS )CyCyaa  
    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
    rj   c           	      l   t          t          |                               |||d           t          di dt                                          dt                                          dt                                          dt                                          dt                                          dt                                          d	t                                          d
t                                          dt                                          dt                                          dt                                          dt                                           dt"                                          dt$                                          dt&                                          dt)          j        dd          dt,                                          dt.                                          dt1          d          dt3          d          dt5          d          dt7          d          }|                                D ]\  }}| |_        t=          | ||           | | _        i | _        i | _         i | _!        tE          j#        tH                    | _%        d S )NT)r   import_break_stepnextruncontfinishupdownr   btlistprint_r`   rE   exec_zcy exec-cy-exec_execrb   cy_cnamer   	cy_linenocy_evalr$   )&r\   r1  rJ   dictCyImportr;  CyBreakCyStepCyNextCyRunCyContCyFinishCyUpCyDownCySelectCyBacktraceCyListCyPrintCyLocals	CyGlobalsr	   FixGdbCommandCyExecCySetCyCNameCyCValueCyLineCyEvalitemsrj   setattrcython_namespacefunctions_by_qualified_namerk   collectionsdefaultdictrK  functions_by_name)r   r   r  r3  commandscommand_namecommandrd   s          r   rJ   zCyCy.__init__n  s   mT""++D-,;D 	, 	J 	J 	J  
 
 
'')))
 %%'''
 ??$$$	

 ??$$$
 .."""
 ??$$$
 &&(((
 
 ??$$$
 &&(((
 %%'''
 ??$$$
 %%'''
 &&(((
   ((***!
" +IzBBB#
$ OO%%%%
& .."""'
, z***-
. !---/
0 {+++1
2 Y'''3
8 &.^^%5%5 	1 	1!L'GJD,0000 !# ,.( #% "-!8!>!>r#   )rL   rM   rN   r  r   r   r<  r  COMPLETE_COMMANDr3  rJ   re   rf   s   @r   r?  r?  S  sY         , D$M*O3? 3? 3? 3? 3? 3? 3? 3? 3?r#   r?  c                   R    e Zd ZdZdZej        Zej        Z	e
j        d             ZdS )rT  zb
    Import debug information outputted by the Cython compiler
    Example: cy import FILE...
    z	cy importc           
         t          |t                    r|                    t                    }t	          |          D ]}	 t          |          }n7# t          $ r*}t          j        d|d|j	        d                   d }~ww xY wt          j        |          }|                                D ]L}t          di |j        }|| j        j        |j        <   |                    d          D ]#}	|	j        }
t'          di |
|j        |
d         <   $|                    d          D ],}t+          dd|i|j        }|j        }|j        }| j        j        |                             |           || j        j        |j        <   || j        j        |j        <   |x}
|j        |<   |                    d          D ]#}|j        }
t'          di |
|j        |
d         <   $|                    d	          D ])}|j        }
|j                            |
d                    *|j         !                    d
 |                    d          D                        .|                    d          D ]}tE          |j        d                   }|j        d         }tG          tI          tD          |j        d         %                                                    }tM          |          |j'        ||f<   |D ]}||f|j(        |<   Nd S )NzUnable to open file z: r   Globalsr   	Functionsr]   LocalsStepIntoFunctionsc              3   $   K   | ]}|j         V  d S r   )tag)r   funcargs     r   r   z"CyImport.invoke.<locals>.<genexpr>  s=       5O 5O(/5O 5O 5O 5O 5O 5Or#   	ArgumentsLineNumberMapping
src_linenosrc_path	c_linenosr$   ))r<   BYTESdecode_filesystemencodingr   r   OSErrorr   r   r   r   parsegetrootrA   attribrj   rl  r   findrP   rE   rX   rS   rp  appendrm  rk   rR   rH   r`   rc   addra   extendrU   rK  mapr   minrF   rG   )r   r   from_ttyr   r   etr]   cython_modulevariabledr   cython_functionr   qnamelocalstep_into_funcmarkerr  r  r  c_linenos                         r   r   zCyImport.invoke  s   dE"" 	4;;233D!$'' 1	U 1	UCUII U U Ull444PQ#STTTU AA))++ )U )U , = =v} = =?L();< &I 6 6 K KH A7E7J7J7J7JM)!F)44 &K 8 8 O OH&4 'H 'HM 'H7?'H 'HO +/D+:EG-d3::?KKK:I G7'68 2A G.'-/ :IHA/6!)x!8!8 P P!L<J<O<OQ<O<O.qy99*2--8K*L*L K K*1';??&	JJJJ#-44 5O 5O3;==3M3M5O 5O 5O O O O O %kk*=>> U UF!$V]<%@!A!AJ%}Z8H $SfmK.H.N.N.P.P%Q%Q R RIFI)nnM-h
.BC$- U U?G>T1(;;UUG)U1	U 1	Us   A
B%BBN)rL   rM   rN   r  r   r   COMMAND_STATUSr  COMPLETE_FILENAMEr3  r	   dont_suppress_errorsr   r$   r#   r   rT  rT    sW         
 D&M+O#4U 4U $#4U 4U 4Ur#   rT  c                   p    e Zd ZdZdZej        Zd Zd Z	e
j        d             Ze
j        d             ZdS )rU  a  
    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...
    zcy breakc                 h   |                     d          \  }}}t          |          }|r| j        j        |         }n|                                 j        }|j        |f|j        v r9|j        |j        |f         }|j        d|}t          j
        d|z              d S t          j        d          )Nr   break z5Not a valid line number. Does it contain actual code?)	partitionrU   rj   rl  r|   r]   rC   rF   rD   r   r1   r   )r   r   
modulename_rV   r  r  
breakpoints           r   
_break_pyxzCyBreak._break_pyx  s     $s 3 3
AvV 	> G4Z@MM 4466=M"F+}/HHH$01G1OPH$1$<$<$<hhGJK:-.....,  > ? ? ?r#   c                    | j         j                            |          }|r	|j        rd }|g}|s_| j         j                            |          pg }d |D             }|st          j        d|z              d S t          |          dk    rt          d           t          |          D ]\  }}t          d||j
        fz             	 	 t          d          }|                                dk    rd S |                                d	k    r|}nw|                                rAd
t          |          cxk    rt          |          k     rn n|t          |                   g}n"t          d           n# t          $ r Y d S w xY wn	|d
         g}|D ]A}t          j        d|j        z             |j        rt          j        d|j        z             Bd S )Nc                      g | ]}|j         	|S r$   r_   r   r   s     r   
<listcomp>z+CyBreak._break_funcname.<locals>.<listcomp>  s     FFF1Q-EFQFFFr#   r  r   z"There are multiple such functions:z%3d) %sTzMSelect a function, press 'a' for all functions or press 'q' or '^D' to quit: qr   r   zNot understood...zbreak %s)rj   rm  r(   r_   rp  r   r1   lenr   r   rS   inputlowerisdigitrU   EOFErrorrR   r^   )r   funcnamefuncbreak_funcsfuncsr  r{   s          r   _break_funcnamezCyBreak._break_funcname  s2   w266x@@ 	D/ 	Df "	)G-11(;;ArEFFFFFE Hx/0005zzA~~:;;;!*5!1!1 B BIC)sD,?&@@AAAA77!&G"H "H "<<>>S00"F#\\^^s22*/K!$nn.. 7 !S[[ = = = =3u:: = = = = =+0V+=*>K!!"56666 $   7(  %Qxj 	8 	8DK
TZ/000} 8J6777	8 	8s   E4 4
FFc                 f   t          |t                    r|                    t                    }t	          |          }|                    d          r|dd          }d}nd}|D ]K}|rt          j        d|z             d|v r|                     |           6| 	                    |           Ld S )Nz-pr   TFzpy-break %sr   )
r<   r  r  r  r   
startswithr   r1   r  r  )r   function_namesr  argvpython_breakpointsr  s         r   r   zCyBreak.invokeB  s    ne,, 	H+223FGGNn--$$T** 	'8D!%!& 	/ 	/H! /MH45555))))$$X....	/ 	/r#   c                   	
 d | j         j                                        D             }d | j         j                                        D             }t          j        rt          j        ||          }n|}|                                	                                }|r
d|d         vrFt          |d t                              	                                          		fd|D             S |d         fd|D             }t                    t                    k    r-t                    t                    z
  

fd|D             }|S )Nc                 J    g | ] \  }}t          d  |D                       |!S )c              3   &   K   | ]}|j          V  d S r   r  r  s     r   r   z.CyBreak.complete.<locals>.<listcomp>.<genexpr>Z  s(      AA!Q55AAAAAAr#   )any)r   nLs      r   r  z$CyBreak.complete.<locals>.<listcomp>Y  sN     C C C1AAqAAAAAC! C C Cr#   c                 &    g | ]\  }}|j         |S r$   r  )r   r  r   s      r   r  z$CyBreak.complete.<locals>.<listcomp>[  s3     3 3 3113! 3 3 3r#   .c                 F    g | ]}|                               r|v|S r$   r  )r   r  r   words     r   r  z$CyBreak.complete.<locals>.<listcomp>g  sA     C C C!\\$//C45TMM 4AMMr#   c                 >    g | ]}|                               |S r$   r  )r   r  lastwords     r   r  z$CyBreak.complete.<locals>.<listcomp>l  s*    ===qall8&<&<====r#   c                 $    g | ]}|d          S r   r$   )r   r  strip_prefix_lengths     r   r  z$CyBreak.complete.<locals>.<listcomp>r  s%    <<<Q*++,<<<r#   )rj   rp  rj  rm  r   r-  r   chainstripr   rb   r  )r   textr  namesqnames	all_nameswordscomplr  r   r  s     `     @@@r   completezCyBreak.completeU  s   C C 9 ? ? A A C C C3 3 C I I K K 3 3 3 * 	!66III

""$$ 	C59,,tKc$iiZK(..0011DC C C C Cy C C C C 9====F===x==3t99$$ #&h--#d))";<<<<e<<<Er#   N)rL   rM   rN   r  r   r   r+  r  r  r  r	   r  r   r  r$   r#   r   rU  rU    s         . D+M? ? ? /8 /8 /8b #/ / $#/$ #  $#  r#   rU  c                   B     e Zd ZdZ fdZ fdZ fdZd Zd Z xZ	S )
CythonInfozM
    Implementation of the interface dictated by libpython.LanguageInfo.
    c                     |                      |          r|                     |          d         S t          t          |                               |          S Nr   )r)   r   r\   r  rV   r   r   rd   s     r   rV   zCythonInfo.lineno|  sR    
 ""5)) 	4))%0033Z&&--e444r#   c                     	 t          t          |                               |          }|                                pd S # t          j        $ r Y d S w xY wr   )r\   r  r   r  r   r   )r   r   rw   rd   s      r   r   zCythonInfo.get_source_line  s`    	(T**::5AAD ::<<'4' | 	 	 	44	s   (A AAc                 f    | j         r(t          t          |                               |          S d S r   )r0   r\   r  exc_infor  s     r   r  zCythonInfo.exc_info  s6    " 	;T**33E:::	; 	;r#   c                 `    |                                  r|                                 j        S dS )Nr$   )r)   r|   rc   r   s    r   runtime_break_functionsz"CythonInfo.runtime_break_functions  s1    ""$$ 	B++--AArr#   c                 J    dg}|                     | j        j                   |S )Nrn   )r  rj   rk   )r   r{   s     r   static_break_functionsz!CythonInfo.static_break_functions  s&    &'dg0111r#   )
rL   rM   rN   r  rV   r   r  r  r  re   rf   s   @r   r  r  w  s         5 5 5 5 5( ( ( ( (; ; ; ; ;  
      r#   r  c                   $    e Zd Zed             ZdS )CythonExecutionControlCommandc                 .     | | j         t                    S r   )r   cython_info)r5  s    r   r;  z&CythonExecutionControlCommand.register  s    s38[)))r#   N)rL   rM   rN   r=  r;  r$   r#   r   r  r    s/         * * [* * *r#   r  c                   :    e Zd ZdZdZdZej        d             ZdS )rV  z&Step through Cython, Python or C code.zcy -stepTc                 2   |                                  r|                     | j                   d S |                                 s7| j        rd}nd}|                     t          j        |d                     d S |                     | j                   d S )NrC  rD  T	to_string)stepinto)r0   python_stepr  r)   finish_executingr   r1   rC  )r   r   r  rs  s       r   r   zCyStep.invoke  s    ""$$ 
	.T]+++++((** 	.} !  !!#+g"F"F"FGGGGGIIt}I-----r#   N)	rL   rM   rN   r  r   r  r	   r  r   r$   r#   r   rV  rV    sA        ,,DH#. . $#. . .r#   rV  c                       e Zd ZdZdZdZdS )rW  z#Step-over Cython, Python or C code.zcy -nextFN)rL   rM   rN   r  r   r  r$   r#   r   rW  rW    s        ))DHHHr#   rW  c                   @    e Zd ZdZdZ ej        ej                  Z	dS )rX  z
    Run a Cython program. This is like the 'run' command, except that it
    displays Cython or Python source lines as well
    zcy runN)
rL   rM   rN   r  r   r	   r  r  rE  r   r$   r#   r   rX  rX    s5         
 D+Y+,I,MNNFFFr#   rX  c                   @    e Zd ZdZdZ ej        ej                  Z	dS )rY  z
    Continue a Cython program. This is like the 'run' command, except that it
    displays Cython or Python source lines as well.
    zcy contN)
rL   rM   rN   r  r   r	   r  r  rF  r   r$   r#   r   rY  rY    s5         
 D+Y+,I,NOOFFFr#   rY  c                   @    e Zd ZdZdZ ej        ej                  Z	dS )rZ  z-
    Execute until the function returns.
    z	cy finishN)
rL   rM   rN   r  r   r	   r  r  rG  r   r$   r#   r   rZ  rZ    s5          D+Y+,I,PQQFFFr#   rZ  c                   :    e Zd ZdZdZdZej        d             ZdS )r[  z5
    Go up a Cython, Python or relevant C frame.
    zcy uprH  c                    	 t          j        | j        d           |                     t          j                              sAt          j        | j        d           |                     t          j                              An%# t
          $ r}t          j        |j         d }~ww xY wt          j                    }d}|r|                                }|dz  }|| 	                    |dz
             d S )NTr  r   r   )r   )
r   r1   _commandr2   r   r   r   r   r   r   )r   r   r  r   r   s        r   r   zCyUp.invoke  s   	(K6666//0B0D0DEE ;DMT:::: //0B0D0DEE ; 	( 	( 	(,''	( "$$ 	KKMMEQJE  	 	EAI.....s   BB 
B'B""B'N)	rL   rM   rN   r  r   r  r	   r  r   r$   r#   r   r[  r[    sG          DH#/ / $#/ / /r#   r[  c                       e Zd ZdZdZdZdS )r\  z7
    Go down a Cython, Python or relevant C frame.
    zcy downrI  N)rL   rM   rN   r  r   r  r$   r#   r   r\  r\    s$          DHHHr#   r\  c                   6    e Zd ZdZdZej        d             ZdS )r]  z
    Select a frame. Use frame numbers as listed in `cy backtrace`.
    This command is useful because `cy backtrace` prints a reversed backtrace.
    z	cy selectc                    	 t          |          }n%# t          $ r t          j        d|          w xY wt          j                    }|                                r(|                                }|                                (t          j        |          }	 t          j        d||z
  dz
  fz             d S # t          $ r}t          j        |j
         d }~ww xY w)NzNot a valid number: z	select %dr   )rU   
ValueErrorr   r   r   newerr	   
stackdepthr1   r   r   )r   stacknor  r   r  r  s         r   r   zCySelect.invoke  s    	F'llGG 	F 	F 	F,,77DEEE	F "$$kkmm 	"KKMME kkmm 	" )%00
	(KzG';a'?&AABBBBB 	( 	( 	(,''	(s     "4B; ;
CCCN)rL   rM   rN   r  r   r	   r  r   r$   r#   r   r]  r]     sB         
 D#( ( $#( ( (r#   r]  c                   f    e Zd ZdZdZdZej        Zej	        Z
ej        ed                         ZdS )r^  zPrint the Cython stackzcy btzcy backtracec                 x   t          j                    }|                                r(|                                }|                                (|dk    }d}|r`	 |                     |          }n# t          $ r d}Y nw xY w|s|r|                     ||           |dz  }|                                }|^d S d S )Nz-ar   Fr   )r   r   r   r2   r	  r   r  )r   r   r  r   	print_allr   is_relevants          r   r   zCyBacktrace.invoke#  s     "$$kkmm 	"KKMME kkmm 	" DL	 
	"$"77>> $ $ $#$  4K 4%%eU333QJEKKMME  
	" 
	" 
	" 
	" 
	"s   A1 1B ?B N)rL   rM   rN   r  r   r9  r   COMMAND_STACKr  COMPLETE_NONEr3  r	   r  r*   r   r$   r#   r   r^  r^    s\        DE%M'O#" "  $#" " "r#   r^  c                   R    e Zd ZdZdZej        Zej        Z	e
j        d             ZdS )r_  za
    List Cython source code. To disable to customize colouring see the cy_*
    parameters.
    zcy listc                     |                                  \  }}|                    |dz
  |dz   |d          }t          |           d S )N   T)r   r   )r   r   r   )r   r  r  sdrV   sources         r   r   zCyList.invokeE  sQ     ))++
Fvz6A:*.  0 0fr#   N)rL   rM   rN   r  r   r   r.  r  r  r3  r	   r  r   r$   r#   r   r_  r_  ;  sR         
 D%M'O#  $#  r#   r_  c                   J    e Zd ZdZdZej        Zej	        d             Z
d ZdS )r`  zT
    Print a Cython variable using 'cy-print x' or 'cy-print module.function.x'
    zcy printc                 `   |                                  }|                                 j        j        }||v r;||                             t
          j                  }t          |d|           d S ||v rx||         j        }	 t          j
        |          }|j        s|                     ||           d S t          d|z             d S # t          $ r t          d|z             Y d S w xY w|                                 rt          j        d|z             S |                                 rj| j        j                            |                    d                    }|D ]}|dk    r|                                } |                     ||           d S t          j        d|z              d S )Nr   z%s is optimized outzunable to get value of %sz	py-print *zprint )r   r|   r]   rE   get_truncated_reprr	   MAX_OUTPUT_LENr   rR   r   r   rq   r   r   r0   r1   r)   rj   r   r   lstripdereference)r   r   r  global_python_dictmodule_globalsr   rR   cs           r   r   zCyPrint.invokeV  s   !99;;1133:B%%%&t,??	@XYYEtttUU+,,,,, ^##"4(.E8*511 - 8((u55555/$677777   : : :1D8999999: $$&& 	);{T1222$$&& 
	)G%,,T[[-=-=>>E  88!--//EE  u-----K4(((((s   C C+*C+c                     |                                  r@|                                 }t          t          j        |j        |j                            S g S r   )r)   r|   rK  r   r  r`   rE   )r   r   s     r   r  zCyPrint.completey  sJ    ""$$ 	((**A	!)<<===Ir#   N)rL   rM   rN   r  r   r   COMMAND_DATAr  r	   r  r   r  r$   r#   r   r`  r`  N  sZ          D$M# )  ) $# )D    r#   r`  c                 6    | d                                          S )Nr   )r  )items    r   r   r     s    tAw}} r#   c                   x    e Zd ZdZdZej        Zej        Z	e
j         edd          d                         ZdS )ra  z8
    List the locals from the current Cython frame.
    z	cy localszinfo localsz	py-localsr5   r6   c                    |                                  }|j        r"| j        j                            ||           d S |j        }t          t          |t                              }t          |	                                t                    D ]o\  }}|                     |                                  |j                  r=t          j        |j                  }|j        s|                     |j        ||d           pd S )Nkeyr   )r|   r_   rj   rE   r   r`   r  r  sortedrj  sortkeyr   r   r   r   rR   rq   r   )	r   r   r  r  local_cython_varsr   r   r   r   s	            r   r   zCyLocals.invoke  s    22441 	GO""4222F+2c"3===>>!"3"9"9";";III 	> 	>KD%""4#;#;#=#=uzJJ >*5;77- >((U)8"> > >		> 	>r#   NrL   rM   rN   r  r   r   r  r  r  r3  r	   r  r7   r   r$   r#   r   ra  ra    sn          D%M'O#{KKK> > LK $#> > >r#   ra  c                   x    e Zd ZdZdZej        Zej        Z	e
j         edd          d                         ZdS )rb  z:
    List the globals from the current Cython module.
    z
cy globalszinfo variablesz
py-globalsr  c                 `   |                                  }|                                 j        j        }d}d}|r#t	          t          |t                              }|rt	          t          |                    }t          ||          }t                      }t          d           t          |	                                t                    D ]N\  }	}
|
                    t          j                  }
|                    |	           t          d||	|
fz             Ot          d           t          |	                                t                    D ]X\  }}||vrO	 t          j        |j                  }|j        s|                     |j        ||d           H# t*          $ r Y Tw xY wYd S )Nr   r  zPython globals:z    %-*s = %sz
C globals:r   )r   r|   r]   rE   r  r  rb   r   r  rj  r  r  r	   r	  r  r   r   rR   rq   r   r   r   )r   r   r  r  r  max_globals_lenmax_globals_dict_lenr   r   r   r   r   r   r   s                 r   r   zCyGlobals.invoke  s    "99;;1133:B  	@!#n#">">">??O 	@#&s+='>'>#?#? o/CDDuu   -33557CCC 	= 	=DAq$$Y%=>>AHHQKKK/_a$;;<<<<l!."6"6"8"8gFFF 		F 		FKD%4F.u{;;E !1 F,,UZ-<fF F F	 $   D  		F 		Fs   F
F*)F*Nr  r$   r#   r   rb  rb    st          D%M'O#!1,OOOF F PO $#F F Fr#   rb  c                   *    e Zd ZdZd Zd Zd Zd ZdS )EvaluateOrExecuteCodeMixinz
    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                 F   |                                  }|j                                        D ]\  }}|j        t          k    r|                     ||          r	 t          j        |j                  }|j	        rMn# t          $ r Y Zw xY w|                    |          }d|||j        fz  }	 t          j        |          dk     r(t          j        d           t          j        d          	 |                    |           # |                    |           w xY wdS )zBFill a remotely allocated dict with values from the Cython C stackz
                    (PyObject *) PyDict_SetItem(
                        (PyObject *) %d,
                        (PyObject *) %d,
                        (PyObject *) %s)
                r   zPyErr_Print()zUnable to execute Python code.N)r|   r`   rj  rT   r   r   r   r   rR   rq   r   alloc_pystringr   xdecref)	r   executorlocal_dict_pointerr   r   r   r   	pystringpr   s	            r   _fill_locals_dictz,EvaluateOrExecuteCodeMixin._fill_locals_dict  sX   ..00&-3355 	0 	0KD%
l**++K>> +!,U[99C + ! ! $   H %33D99	
 *9ekBC0)$//!33*?;;;!l+KLLL 4
 $$Y////H$$Y////5	0 	0s   A<<
B	B	/A DDc                     t          j                    }|rV|                     |          s|                     |          r|                                 |S |                                }|Vt          j        d          )Nz0There is no Cython or Python frame on the stack.)r   r   r)   r0   r   r   r   rl   s     r   "_find_first_cython_or_python_framez=EvaluateOrExecuteCodeMixin._find_first_cython_or_python_frame  s    "$$ 	"''.. ..u55KKMME  	" lMNNNr#   c                    t          j                    5  t          j        d          }t          j        d          }	 |                     |t          j        |                     |                    ||||          }|                    t          j        |                     n,# |                    t          j        |                     w xY w	 d d d            n# 1 swxY w Y   |S )Nz&(PyObject *) PyModule_GetDict(__pyx_m)z(PyObject *) PyDict_New())r	   FetchAndRestoreErrorr   r   r(  pointervalueevalcoder$  )r   r%  r   
input_typeglobal_dict
local_dictr{   s          r   _evalcode_cythonz+EvaluateOrExecuteCodeMixin._evalcode_cython   sA   +-- 	E 	E ,8: :K+,GHHJE&&x'0'=j'I'IK K K!**4[+57 7   !7
!C!CDDDD  !7
!C!CDDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E s)   )CA B&>(C&)CCC#&C#c                     |                                  }t          j                    }|                     |          rt          j        |||          S |                     |||          S )zi
        Evaluate `code` in a Python or Cython stack frame using the given
        `input_type`.
        )r*  r	   PythonCodeExecutorr0   _evalcode_pythonr2  )r   r   r/  r   r%  s        r   r.  z#EvaluateOrExecuteCodeMixin.evalcode  sg    
 7799/11""5)) 	J-hjIII$$XtZ@@@r#   N)rL   rM   rN   r  r(  r*  r2  r.  r$   r#   r   r!  r!    sc         0 0 0@
O 
O 
O  $	A 	A 	A 	A 	Ar#   r!  c                   R    e Zd ZdZdZej        Zej        Z	e
j        d             ZdS )rd  zD
    Execute Python code in the nearest Python or Cython frame.
    rN  c                     |                      |          \  }}t          j                    }|                    |                     ||j                             d S r   )readcoder	   r4  r$  r.  Py_file_input)r   exprr  r/  r%  s        r   r   zCyExec.invoke'  sQ    ==..j/11tX-CDDEEEEEr#   N)rL   rM   rN   r  r   r   r  r  r  r3  r	   r  r   r$   r#   r   rd  rd    sW          D%M'O#F F $#F F Fr#   rd  c                   b    e Zd ZdZdZej        Zej        Z	e
j        ed                         ZdS )re  z
    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
    zcy setc                     |                     dd          }t          |          dk    rt          j        d          |\  }}| j        j                            |                                          }t          j        d|d|           d S )Nr   r      z,Invalid expression. Use 'cy set var = expr'.zset r   )	r   r  r   r   rj   rP  r   r  r1   )r   r:  r  name_and_exprvarnamerR   s         r   r   zCySet.invoke>  s     

3**}"",MNNN% ''88UUUDD122222r#   N)rL   rM   rN   r  r   r   r  r  r  r3  r	   r  r,   r   r$   r#   r   re  re  .  s]        	 	 D$M'O#3 3  $#3 3 3r#   re  c                   T    e Zd ZdZej        eedd                                    ZdS )rf  z
    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")
    Nc                    |pt          j                    }d }|                     |          r|                     |          }||j        v r|j        |         j        }n\||j        j        v r|j        j        |         j        }n6|j        j        d|}||j        j	        v r|j        j	        |         j        }|s| j
        j                            |          }|st          j        d|z            |S )Nr  zNo such Cython variable: %s)r   r   r)   r|   r`   rR   r]   rE   r   rH   rj   rm  r(   r   )r   cynamer   rR   r  r  s         r   r   zCyCName.invokeV  s    -+--""5)) 		J"66u==O///'.v6<?1999'.6v>D#2#9#>#>#>GO2<<<+2<UCIE 	DG7;;FCCE 	G,<vEFFFr#   r   )	rL   rM   rN   r  r	   r  r,   r?   r   r$   r#   r   rf  rf  L  sX          #"   #"  $#  r#   rf  c                   ^     e Zd ZdZej        eed fd	                                    Z xZ	S )rg  z-
    Get the value of a Cython variable.
    Nc                 N   |                                  }|                     |          }|                     ||          r>t          t          |                               ||          }t          j        |          S ||v r||         j        S t          j	        d|z            )Nr   zVariable %s is not initialized.)
r   r|   r   r\   rg  r   r   r   _gdbvalr   )r   rB  r   globals_dictr  rR   rd   s         r   r   zCyCValue.invokev  s     33552259977 	K(D))00u0EEE%e,,,|##'//,@6IJJJr#   r   )
rL   rM   rN   r  r	   r  r,   r?   r   re   rf   s   @r   rg  rg  q  sw          #"
K 
K 
K 
K 
K #"  $#
K 
K 
K 
K 
Kr#   rg  c                   B    e Zd ZdZej        ed                         ZdS )rh  z&
    Get the current Cython line.
    c                 6    |                                  d         S r  )r   r   s    r   r   zCyLine.invoke  s     %%''**r#   N)rL   rM   rN   r  r	   r  r,   r   r$   r#   r   rh  rh    sH          #+ +  $#+ + +r#   rh  c                   B    e Zd ZdZej        ed                         ZdS )ri  zO
    Evaluate Python code in the nearest Python or Cython frame and return
    c                 P    t           j        j        }|                     ||          S r   )r	   r4  Py_eval_inputr.  )r   python_expressionr/  s      r   r   zCyEval.invoke  s$     1?
}}.
;;;r#   N)rL   rM   rN   r  r	   r  r?   r   r$   r#   r   ri  ri    sH          #"< < #" $#< < <r#   ri  c                      t          j        t          j        d          t          j        t          j        fz             d S )Nz        define cy step
        cy -step
        end

        define cy next
        cy -next
        end

        document cy step
        %s
        end

        document cy next
        %s
        end
    )r	   source_gdb_scriptr   r   rV  r  rW  r$   r#   r   register_definesrO    sG     1 !	 !	  NFN+!!, - - - - -r#   )Tr   )er  
__future__r   	raw_inputr  	NameErrorr   r   r    r   rn  r   unicodeUNICODEr   r  r   lxmlr   	have_lxmlImportError	xml.etreer   r   elementtree.ElementTreepygments.lexersr   pygments.formattersstderrr   r4  r   shlexr   Cython.Debuggerr	   r
   r   rS  _data_typesgetfilesystemencodingr  r%   r,   r7   r*   r?   objectrA   rP   rX   rh   r   r   r	  rz   r   	Parameterr  r  r!  r#  r%  r   Commandr1  r?  rT  rU  
PythonInfor  ExecutionControlCommandBaser  PythonStepperMixinrV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  r  ra  rb  r!  PyExecrd  re  Functionrf  rg  rh  ri  r  r;  rj   rO  r$   r#   r   <module>ri     sj
    & % % % % %	EE 	 	 	D	 


              



GEE   GEEE8II 8 8 8I83333333 
8 
8 
8		86666666 	8 	8 	88,,,,, 8 8 8777777778		8	
88"F F F FHJDEEEEEF 73 !! ."""""""------ % % % % % % d7>>>/c/11<W 
   "	 	 	   *	 	 	  
 
 
 
 
6 
 
 
" " " " "V " " ") ) ) ) )^ ) ) )2Y) Y) Y) Y) Y) Y) Y) Y)x: : : : :6 : : :~0 0 0 0 0 0 0 0D D D D D: D D D    !=       cm   &                         v   . 

5 5 5 5 5CK 5 5 50N? N? N? N? N?= N? N? N?b?U ?U ?U ?U ?U} ?U ?U ?UDN N N N Nm N N Nb" " " " "Y1 " " "J* * * * *M$-$I* * *. . . . .*I,H . . .*    V   O O O O O) O O OP P P P P* P P PR R R R R, R R R/ / / / /= / / /2    T   ( ( ( ( (} ( ( (6" " " " "- " " "@    ]   &0 0 0 0 0m 0 0 0f '
&> > > > >} > > >8*F *F *F *F *F *F *F *FZNA NA NA NA NA NA NA NAbF F F F F]I,.H F F F 3 3 3 3 3M 3 3 3<" " " " "clJ " " "JK K K K Kw K K K*+ + + + +S\: + + +	< 	< 	< 	< 	<S\:'A 	< 	< 	< jll	]]__- - -&       s    6 	AAA BABB$A+*B+B
1A65B
6B	B
B	B
B	B

BBBBBB# #!CC