a
    *ñ»jç  ã                   @   sÚ  d 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d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mZ ddlmZ ddlmZ ddlmZmZmZ ddlZdZe d¡Zd	Ze d
¡Zdd„ ZedƒZdd„ Zdd„ Zdd„ Z dCdd„Z!dd„ Z"G dd„ de#ƒZ$dd„ Z%dZ&dd„ Z'G d d!„ d!e(ƒZ)G d"d#„ d#ƒZ*e*ƒ Z+G d$d%„ d%ej,ee#ƒZ,e-ed&ƒ�rjej.Z.d' /¡ D ]"Z0e1ee0ƒZ2ee2e3ƒ ƒe3ƒ e0< �qr[0[2de,fd(d)„Z4da5dde,fd*d+„a6d,d-„ Z7e,fd.d/„Z8d0d1„ Z9t6e9_6d2d3„ Z:de,fd4d5„e:_6d6d7„ Z;de;_<e#ƒ Z=d8d9„ Z>d:d;„ Z?e?e,fd<d=„Z@ddlZe,e_,ee_e$e_$ee_ee_e&e_&t5e_5ee_ee_ee_e'e_'ee_e4e_4e;e_;e%e_%t6e_6ee_e*e_*e7e_7e8e_8d>d?„ ZAd@dA„ ZBeCdBk�rÖdZddlDZDeD B¡  dS )Dzm
pdbp (Pdb+): A drop-in replacement for pdb and pdbpp.
=====================================================
é    N)ÚOrderedDict)Ú	signature)ÚStringIO)Ú	CompleterÚConfigurableClassÚColorzhttps://github.com/mdmintz/pdbpÚpdbpFz^ *[_0-9a-zA-Z\[\].]* *$c                 C   s~   t  | ¡}tj tj¡\}}tj || d ¡}t|ƒ�}| 	¡ }W d   ƒ n1 sT0    Y  t
||ddd�}t||jƒ |S )Nz.pyÚexecT)Údont_inherit)ÚtypesÚ
ModuleTypeÚosÚpathÚsplitÚcodeÚ__file__ÚjoinÚopenÚreadÚcompiler	   Ú__dict__)ÚnameÚresultZ	stdlibdirÚ_ZpyfileÚfÚsrcZ	co_module© r   ú*E:\soccer\ml_env\Lib\site-packages\pdbp.pyÚimport_from_stdlib   s    

&r   Úpdbc                 C   s   t  | j|| j| j| j¡}|S ©N)r   ÚFunctionTypeÚ__code__Ú__name__Ú__defaults__Ú__closure__)ÚfuncÚ
newglobalsZnewfuncr   r   r   Úrebind_globals-   s    ÿr(   c                    s^   t dƒt dƒdœt dƒt dƒdœt dƒt dƒdœt dƒt d	ƒdœg}t‡ fd
d„|D ƒƒ}|S )Nu   ä¸€u   é¿¿©ÚfromÚtou   ã�€u   ãƒ¿u   ê°€u   íž£u   ï¼�u   ï½ c                    s0   g | ](}|d  t ˆ ƒ  ko&|d kn  ‘qS r)   )Úord)Ú.0Úrange©Úcharr   r   Ú
<listcomp><   ó    z is_char_wide.<locals>.<listcomp>)r,   Úany)r0   Zspecial_c_rÚscr   r/   r   Úis_char_wide3   s    üÿr5   c                 C   s&   t | ƒ}| D ]}t|ƒr|d7 }q|S ©Né   )Úlenr5   )ÚlineÚline_lengthr0   r   r   r   Ú	get_widthA   s
    
r;   Tc                 C   sˆ   t | ƒ}d}t|ƒ}|dkr |S ||kr,| S ||k r:| }n*| D ]$}d||f }t |ƒ|kr^ qd|}q>d}|r|d|t |ƒ  }d||f S )z;Trim line if too long. Fill line if too short. Return line.Ú r   ú%s%sú )r;   Úint)r9   ÚwidthÚtllÚ
line_widthÚnew_liner0   Zupdated_lineZextra_spacesr   r   r   Úset_line_widthK   s$    rD   c                   C   s@   dt jv rt d¡S z
t ¡ W S  ty:   t d¡ Y S 0 d S )NÚlinux)éP   é   )ÚsysÚplatformÚshutilÚget_terminal_sizer   Ú	Exceptionr   r   r   r   rK   b   s    


rK   c                   @   sÎ   e Zd Zdejv r"ddlZe ¡  dZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZd	ZejZejZejZejZeZ d
Z!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)e'Z*dZ+dZ,dZ-dZ.i Z/dd„ Z0dd„ Z1dS )ÚDefaultConfigÚwin32r   Nz(Pdb+) TZdarkz${EDITOR:-vi}F)úutf-8zlatin-1z90;1z31;1z95;1z32;1z33;1z97;44;1z97;41;1z31;103;1c                 C   s   d S r    r   ©Úselfr   r   r   r   Úsetup–   s    zDefaultConfig.setupc                 C   s   d S r    r   rP   r   r   r   Úbefore_interaction_hook™   s    z%DefaultConfig.before_interaction_hook)2r#   Ú
__module__Ú__qualname__rH   rI   ZcoloramaZjust_fix_windows_consoleÚpromptÚ	highlightÚsticky_by_defaultÚbgÚuse_pygmentsÚcolorschemeÚuse_terminal256formatterÚeditorZstdin_pasteÚexec_if_unfocusedÚtruncate_long_linesÚshorten_pathÚdisable_pytest_capturingÚenable_hidden_framesÚshow_hidden_frames_countÚ	encodingsr   ZfuchsiaÚfilename_colorZ	turquoiseÚline_number_colorÚyellowÚregular_stack_colorÚredÚpm_stack_colorÚstack_colorÚreturn_value_colorÚpm_return_value_colorÚnum_return_value_colorÚtrue_return_value_colorÚfalse_return_value_colorÚnone_return_value_colorÚregular_line_colorÚpm_cur_line_colorÚexc_line_colorÚcurrent_line_colorÚexception_caughtÚlast_return_colorÚshow_traceback_on_errorÚshow_traceback_on_error_limitÚdefault_pdb_kwargsrR   rS   r   r   r   r   rM   k   sR   
rM   c                 C   sj   d| }d| }|t  d|| ¡ d }tj d¡dkrf| |d| ¡}| d| d| ¡}| d	d
¡}|S )Nz[%smz\1;%smz	(\[.*?)mz[00mÚTERMzeterm-colorz[37;%dmz[00;%dmz[39;49;00;z[37;)ÚreÚsubr   ÚenvironÚgetÚreplace)r9   ÚcolorZsetbgZregexbgr   r   r   r   Ú
setbgcolor�   s    r‚   z
[2J[1;1Hc                 C   s@   dd l }t| | ¡ƒ}| ¡  |D ]\}}||kr"|  S q"dS )Nr   )ÚdisÚlistÚfindlinestartsÚreverse)r   Úlastirƒ   Ú
linestartsÚiÚlinenor   r   r   Úlasti2lineno¬   s    
r‹   c                   @   s   e Zd ZdS )ÚRestartN)r#   rT   rU   r   r   r   r   rŒ   ¶   s   rŒ   c                   @   s   e Zd Zdd„ ZdS )Ú	Undefinedc                 C   s   dS )Nz<undefined>r   ©rQ   r   r   r   Ú__repr__»   s    zUndefined.__repr__N)r#   rT   rU   r�   r   r   r   r   r�   º   s   r�   c                       sv  e Zd ZeZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z	‡ fdd„Z
dd„ Z‡ fdd„Zdd„ Z‡ fdd„Zd’dd„Zdd„ Z‡ fdd„Zedd„ ƒZ‡ fdd „Zd!d"„ Ze d#ej¡Zd“‡ fd%d&„	Zd'd(„ Zd)d*„ Zd+d,„ Z‡ fd-d.„Zd/d0„ Z‡ fd1d2„Z ‡ fd3d4„Z!e"j#j!j$e!_$d5d6„ Z%d7d8„ Z&e&Z'd9d:„ Z(e(Z)d”d<d=„Z*d•d?d@„Z+‡ fdAdB„Z,e"j#j,j$e,_$e,Z-‡ fdCdD„Z.e"j#j.j$e._$e. Z/Z0‡ fdEdF„Z1e"j#j1j$e1_$e1Z2‡ fdGdH„Z3e"j#j3j$e3_$e3Z4‡ fdIdJ„Z5e"j#j5j$e5_$e5Z6dKdL„ Z7e"j#j7j$e7_$dMdN„ Z8e"j#j8j$e8_$dOdP„ Z9‡ fdQdR„Z:e"j#j:j$e:_$dSdT„ Z;e;Z<dUdV„ Z=dWdX„ Z>dYdZ„ Z?d[d\„ Z@d]d^„ ZAd_d`„ ZBdadb„ ZCdcdd„ ZDdedf„ ZEdgdh„ ZFdidj„ ZGeGZHd–dkdl„ZIe"jJdfdmdn„ZKdodp„ ZLdqdr„ ZMdsdt„ ZNdudv„ ZOdwdx„ ZPePZQd—dzd{„ZRe"j#jRj$eR_$eRZSd˜d|d}„ZTe"j#jTj$eT_$eTZUd~d„ ZVeVZWeVZXd€d�„ ZYd‚dƒ„ ZZd„d…„ Z[d†d‡„ Z\dˆd‰„ Z]d™‡ fdŠd‹„	Z^‡ fdŒd�„Z_dŽd�„ Z`ead�d‘„ ƒZb‡  ZcS )šÚPdbz	.pdbrc.pyc                    sì   |  dd ¡| _|  dd ¡| _|  dd ¡| _|  | j¡| _| j | ¡ | jjrT|  ¡  | jj	 
¡ }|jf i |¤Ž tƒ j|i |¤Ž | jj| _i | _| jj| _| j| _d| _d| _i | _i | _g | _d| _g | _|  | j¡| _d | _d | _d S )NÚConfigÚstart_linenoÚstart_filenameF)ÚpopÚConfigFactoryr’   r“   Z
get_configÚconfigrR   ra   Ú_disable_pytest_capture_mayberz   ÚcopyÚupdateÚsuperÚ__init__rV   Údisplay_listrX   ÚstickyÚfirst_time_stickyÚok_to_clearÚhas_tracebackÚsticky_rangesÚ	tb_linenoÚhistoryÚshow_hidden_framesÚ_hidden_framesÚensure_file_can_write_unicodeÚstdoutÚsaved_curframeÚlast_cmd)rQ   ÚargsÚkwdsÚkwargs©Ú	__class__r   r   r›   Æ   s0    

zPdb.__init__c              	   C   sr   dd l }dd l}d| _d| _| |¡\}}}|  |j¡| _|j 	¡  |j 
d| j|j|j|tdœ¡ |  |¡ d S )Nr   TFÚ__main__)r#   r   Ú__package__Ú
__loader__Ú__spec__Ú__builtins__)r¯   ÚrunpyÚ_wait_for_mainpyfileÚ_user_requested_quitÚ_get_module_detailsÚcanonicÚco_filenameÚ
mainpyfiler   Úclearr™   ÚparentÚloaderr³   Úrun)rQ   Úmodule_namer¯   r´   Úmod_nameÚmod_specr   r   r   r   Ú
_runmoduleà   s"    
úÿ
zPdb._runmodulec                 C   s�   dd l }dd l}|j ¡  |j d|tdœ¡ d| _|  |¡| _d| _	| 
|¡�"}d| ¡ | jf }W d   ƒ n1 sx0    Y  |  |¡ d S )Nr   r¯   )r#   r   r³   TFzexec(compile(%r, %r, 'exec')))r¯   Úior   r»   r™   r³   rµ   r¸   rº   r¶   Ú	open_coder   r¾   )rQ   Úfilenamer¯   rÃ   ÚfpZ	statementr   r   r   Ú
_runscriptô   s     
ýÿÿ zPdb._runscriptc                 C   s>   t |dƒs:t|ddƒr:|j ¡ dkr:t d¡t|d|ƒƒ}|S )NÚstreamÚencodingFrO   Úbuffer)ÚhasattrÚgetattrrÉ   ÚlowerÚcodecsÚ	getwriter)rQ   r   r   r   r   r¦     s    

ÿþz!Pdb.ensure_file_can_write_unicodec              
   C   sp   z dd l }dd l}|j |j W n ttfy8   Y d S 0 z|j d¡}| ¡  W n t	tt
fyj   Y n0 d S )Nr   Úglobal)ÚpytestÚ_pytestr‘   r–   ÚImportErrorÚAttributeErrorÚcaptureZCaptureManagerZstop_global_capturingÚKeyErrorrL   )rQ   rÑ   rÒ   Zcapmanr   r   r   r—     s    
z!Pdb._disable_pytest_capture_maybec                    sœ  t tjdd ƒr@zt tjtjj¡ W n ty6   Y n
0 d tj_d }t|tƒsZ|  	||¡}|rj|  
¡  d S | jjrr| jr¢|s¢| jjr¢d| _| jj| j_| jj| j_|s´| jr´| j�r4|rÖd| _| jj| j_| jj| j_| jsèt| jd� | j�s
|  | j| j ¡ |  ¡  | j�r&|�s4| j t¡ nt| jdd� t 	¡ }|jj  !| j"¡ t|tƒ�rft#ƒ  $||¡S | j %| ¡ t&| dƒ�rˆ|  '¡  n|  (¡  |  
¡  d S )NÚ_previous_sigint_handlerFT©Úfileú
[F©rÙ   ÚendÚ_cmdloop))rÌ   r   r�   ÚsignalÚSIGINTr×   Ú
ValueErrorÚ
isinstanceÚBaseExceptionrR   Úforgetr–   r^   r    rv   rh   rk   rr   ru   r�   rž   rj   rs   Úprintr§   Úprint_stack_entryÚstackÚcurindexÚprint_hidden_frames_countÚwriteÚCLEARSCREENÚtabcompleterÚreadlineZset_completerÚcompleterš   ÚinteractionrS   rË   rÝ   Zcmdloop)rQ   ÚframeÚ	tracebackÚretÚ	completerr­   r   r   rî     sZ    
ÿþý
zPdb.interactionc                 C   s@   t | jƒ}|r<| jjr<|dkr"dp$d}td||f | jd� d S )Nr7   Úsr<   z0   %d frame%s hidden (Use "u" and "d" to travel)rØ   )r8   r¥   r–   rc   rä   r§   )rQ   ÚnÚpluralr   r   r   rè   S  s    
ÿýzPdb.print_hidden_frames_countc                    s>   t ƒ  ||¡}|s:|r:t|jj|jƒ}|| j|j< |j}q|S r    )rš   rR   r‹   Útb_frameÚf_codeÚtb_lastir¢   Útb_next)rQ   rï   Útbrñ   rŠ   r­   r   r   rR   ]  s    z	Pdb.setupc                 C   sl   | j jsdS |jj}|r(|d tu r(dS |t| dd ƒu r<dS |j d¡rLdS |j d¡sd|j d¡rhdS d S )NFéÿÿÿÿTÚ_via_set_trace_frameZ
__unittestZ__tracebackhide__)	r–   rb   r÷   Ú	co_constsÚ_HIDE_FRAMErÌ   Ú	f_globalsr   Úf_locals)rQ   rï   Zconstsr   r   r   Ú
_is_hiddenf  s    
ÿ
þzPdb._is_hiddenc                    s$   t ƒ  ||¡\}}|| _|  ||¡S r    )rš   Ú	get_stackÚ	fullstackÚcompute_stack)rQ   r   Útr  Úidxr­   r   r   r  x  s    zPdb.get_stackNc                 C   sz   |d u rt |ƒd }| jr"||fS g | _g }|D ]2\}}|  |¡rT| j ||f¡ q0| ||f¡ q0|t | jƒ }||fS r6   )r8   r¤   r¥   r  Úappend)rQ   r  r  Znewstackrï   rŠ   Znewidxr   r   r   r  ~  s    
zPdb.compute_stackc                 C   sj   |   | j¡\| _}t| jƒD ] \}\}}|| ju r|| _ qfqt| jƒd | _| jd d | _|  ¡  d S )Nr7   rû   r   )r  r  ræ   Ú	enumerateÚcurframerç   r8   Úprint_current_stack_entry)rQ   r   r‰   rï   r   r   r   Úrefresh_stack�  s    
zPdb.refresh_stackc                    s   t | dƒstƒ  ¡  i | _d S )NrŠ   )rË   rš   rã   Zraise_linenorŽ   r­   r   r   rã   ™  s    

z
Pdb.forgetc                 C   s4   g }d}|||ƒ}|d u rq0|d7 }|  |¡ q|S )Nr   r7   )r  )Úclsrí   ÚtextÚrr‰   Úcompr   r   r   Ú_get_all_completionsŸ  s    
zPdb._get_all_completionsc                    sÐ   |dkrªt rdt _| jj ¡ }| | jj¡ t|ƒ}|  |j	|¡| _
| j
sztƒ }|  |j	|¡D ]}|| j
vr^| j
 |¡ q^t r‚t `t| j
ƒdkrª| j
d dkrª| j
 d¡ z| j
| W S  tyÊ   Y dS 0 dS )z:Handle completions from tabcompleter and the original pdb.r   Tr7   ú	N)Ú
GLOBAL_PDBÚ_pdbp_completingr	  rÿ   r˜   r™   r   r   r  rí   Z_completionsrš   r  r8   r”   Ú
IndexError)rQ   r  ÚstateZmydictrò   Zreal_pdbÚxr­   r   r   rí   «  s,    ÿ
zPdb.completec                 C   sÂ   | j jsdS t| dƒrdS z(ddlm} ddlm} ddlm} W n tyV   Y dS 0 t| j dƒrp| j j	| _
nF| j js–| j jd u rœd	tj d
d¡v rœ|}n|}|| j j| j jd�| _
|ƒ | _dS )NFÚ_fmtTr   )ÚPythonLexer)ÚTerminalFormatter)ÚTerminal256FormatterÚ	formatterÚ256colorr{   r<   )rY   r[   )r–   rZ   rË   Zpygments.lexersr  Zpygments.formattersr  r  rÓ   r  r  r\   r   r~   r   rY   r[   Ú_lexer)rQ   r  r  r  Ú	Formatterr   r   r   Ú_init_pygmentsÅ  s0    

ÿþÿzPdb._init_pygmentsz(.*?)\(([0-9]+?)\)(.*)ú: c                    s‚   t ƒ  ||¡}|  |¡}| jjr~| j |¡}|r~| ¡ \}}}|  | 	¡ ¡ 	¡ }t
 | jj|¡}t
 | jj|¡}d|||f }|S )Nz%s(%s)%s)rš   Úformat_stack_entryÚtry_to_decoder–   rW   Ústack_entry_regexpÚmatchÚgroupsÚformat_sourceÚrstripr   Úsetre   rf   )rQ   Úframe_linenoZlprefixÚentryr$  rÅ   rŠ   Úotherr­   r   r   r!  à  s    
zPdb.format_stack_entryc              
   C   s:   | j jD ],}z| |¡W   S  ttfy2   Y q0 q|S r    )r–   rd   ÚdecodeÚUnicodeDecodeErrorrÔ   )rQ   ró   rÉ   r   r   r   r"  í  s    zPdb.try_to_decodec                 C   s2   |   ¡ s|S ddlm} |  |¡}||| j| jƒS )Nr   )rW   )r  ÚpygmentsrW   r"  r  r  )rQ   r   rW   r   r   r   r&  õ  s
    
zPdb.format_sourcec                 C   s€   d| }| j jr t | j j|¡}d|||f }| j jrV|dkrV| j jr|t|| j jƒ}n&| j jr||dkr|| j jr|t|| j jƒ}|S )Nz%4dz
%s  %2s %sú->ú>>)r–   rW   r   r(  rf   ru   r‚   rt   )rQ   rŠ   Úmarkerr9   r   r   r   Úformat_lineü  s    zPdb.format_linec                    s†  |  d¡r"|dd … }tƒ  |¡S tƒ  |¡\}}}|rÂ| d¡rÂt| d| ƒr\d| }}nf| d¡r¢|| d¡d  }d}|  |¡ | j d	t	 
t	jd
¡ ¡ n || d¡d  }d}|||fS |dk�rt|ƒdk�r|d dksô|d dk�rtƒ  d| ¡S |�rRt| d| ƒ�rR|| jjv �sB|| jjv �sB|  d¡�rRtƒ  d| ¡S |dk�r||  d¡�r|d| }tƒ  |¡S |||fS )Nz!!é   ú?Zdo_Úhelpz??r   Úsourcez%-28s
zSource:Úinspectr   r7   ú'ú"ú!ú=r„   ú()Ú
startswithrš   Ú	parselineÚendswithrË   r   Ú
do_inspectr§   ré   r   r(  ri   r8   r	  rÿ   r   )rQ   r9   ÚcmdÚargÚnewliner­   r   r   r>  	  sN    



ÿ
þ
ý
ýÿþ
ü
ûú	zPdb.parselinec              	   C   sÀ  |s0t d| jd� t d| jj ¡  | jd� d S z|  |¡}W n" ty`   t d| jd� Y d S 0 tƒ }t|ƒj	|d< t
|ƒ ¡ |d< zt|ƒ|d< W n ty¨   Y n0 zt |¡|d< W n tyÎ   Y n0 t|tƒ�rFt|d	ƒ�rFt|d
ƒdk�rF|j|d< d|d< zd|t|ƒf |d< W n t�y6   Y n0 |jj|d< n<zd|t|ƒf |d< W n ttf�yv   Y n0 |j|d< | ¡ D ]0\}}t tj|d ¡}| j d||f ¡ �qŠd S )NzInspect Usage: "inspect <VAR>"rØ   úLocal variables: %rú1See "locals()" or "globals()" for available args!ÚTypezString FormZLengthÚFiler›   rT   Ú__builtin__Z	Docstringr<   zConstructor informationr=   z Definitionz
 DocstringZ
Definitionú:z	%-28s %s
)rä   r§   r	  r   ÚkeysÚ_getvalrL   r   Útyper#   ÚstrÚstripr8   Ú	TypeErrorr7  Ú
getabsfilerá   rË   rÌ   Ú__doc__r   rà   r›   Úitemsr   r(  ri   ré   )rQ   rB  ÚobjÚdataÚkeyÚvalueZformatted_keyr   r   r   r@  2  s^    þþÿþý

zPdb.do_inspectc                    s   | j  |¡ tƒ  |¡S r    )r£   r  rš   Údefault)rQ   r9   r­   r   r   rW  c  s    zPdb.defaultc                    s<   zt ƒ  |¡W S  ty6   tdj|d�| jd� Y n0 d S )Nz*** No help for '{command}')ÚcommandrØ   )rš   Údo_helprÔ   rä   Úformatr§   ©rQ   rB  r­   r   r   rY  g  s    ÿzPdb.do_helpc                 C   s   t d| jd� d S )Nz,Use "u" and "d" to travel up/down the stack.rØ   )rä   r§   rŽ   r   r   r   Úhelp_hidden_frameso  s    zPdb.help_hidden_framesc                 C   s   d | _ | _d| _|  ¡  d S )NZlonglistT)r©   Úlastcmdr�   Ú_print_if_stickyr[  r   r   r   Údo_longlistr  s    zPdb.do_longlistc              
   C   sÀ   d | _ | _| jd t| jƒkr.|  d¡ d S zt|ƒ}W n tyV   |  d¡ Y nf0 z0|| j_	| j| j d |f| j| j< |  
¡  W n2 tyº } z|  d| ¡ W Y d }~n
d }~0 0 d S )NZjumpr7   z*You can only jump within the bottom frame!z*The 'jump' command requires a line number!r   zJump failed: %s)r©   r]  rç   r8   ræ   Úerrorr?   rà   r	  Úf_linenor
  )rQ   rB  Úer   r   r   Údo_jumpx  s    
zPdb.do_jumpr<   c           
      C   st  zŒ| j jjdkr&t | j ¡\}}d}ndzt | j ¡\}}W nN tyˆ   t| jd� d| _	|  
| j| j ¡ d| _	t| jdd� Y W d S 0 W nŽ t�y } ztz.d| _	|  
| j| j ¡ d| _	W W Y d }~d S  t�y   d| _	td| | jd� Y W Y d }~d S 0 W Y d }~n
d }~0 0 |�r^|\}}	t||ƒ}t|	|t|ƒ ƒ}	||| |	| … }|}| j||||d	� d S )
Nz<module>r7   rØ   FTrÚ   rÛ   z
** (%s) **©ÚfnlnÚnc_fnln)r	  r÷   Úco_namer7  Ú
findsourceÚgetsourcelinesrL   rä   r§   r�   rå   ræ   rç   ÚIOErrorÚmaxÚminr8   Ú_print_lines_pdbp)
rQ   Z	linerangere  rf  Úlinesr   rŠ   rb  ÚstartrÜ   r   r   r   Ú_printlonglistŠ  s<    (
zPdb._printlonglistTc                    sH  d}d}zt |ƒ}W n ty.   d}d}Y n0 |dkr>d}nJ|dkrLd}n<|dkrZd}n.|d	krhd
}n |dkrvd}n|dkr„d}nd}t |ƒt|ƒ d }	|	dkr¨d}|	dkr´d}| j | jd ¡}
dd„ |D ƒ}dd„ |D ƒ}tƒ \}}|| }|d }d}|}| jj�sJ|D ]8}t|ƒ|d k�r.|d7 }|d8 }|dk�r �qJ�q| jj�rvt	|d dƒ‰ ‡ fdd„|D ƒ}nt	t
t|ƒƒ‰ | jj�rÂ| jj‰‡ ‡fdd„|D ƒ}|  d |¡¡}| ¡ }|dk�r\t	| jj|
�rÞ|
ndƒ| }|dk�r\t t|ƒ| ƒ}|| }||d d  }|t |d d ¡ }t|ƒ|k�r\|d |… }| t dd¡¡ d| j_t|ƒD ]^\}}d}|| jjk�r’|�r’d}n||
k�r®|�r®d}d| j_|  |||¡||< |d7 }�ql| j�rà| j t¡ |�r.t|| jd� t |ƒdk�r"| jj}tt ||¡| jd� nt| jd� td |¡| jd d!� d S )"Nz...r   r7   r<   iŸ† z......i'  z.....iç  z....éc   z ...é	   z  ..z   .r3  c                 S   s   g | ]}|  d d¡‘qS )r  z    )r€   ©r-   r9   r   r   r   r1   É  s   ÿz)Pdb._print_lines_pdbp.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r   )r'  rs  r   r   r   r1   Ë  r2   é   c                    s   g | ]}t |ˆ ƒ‘qS r   ©rD   rs  )Ú	maxlengthr   r   r1   Ú  r2   c                    s   g | ]}t |ˆ ˆƒ‘qS r   ru  rs  ©rv  rA   r   r   r1   á  r2   Ú
é   é   z39;49;1Fr/  r0  TrØ   z

[FrÛ   )r?   rL   r8   r¢   r   r	  rK   r–   r_   rk  Úmapr;   rW   r&  r   Ú
splitlinesra  ÚmathÚceilr  r   r(  rv   r  r2  rŸ   r§   ré   rê   rä   rf   )rQ   rn  rŠ   Úprint_markersre  rf  ÚdotsÚoffsetZ
lineno_intZmax_lineZ
exc_linenor@   ÚheightÚoverflowZheight_counterr9   r   Zlast_marker_lineZmore_overflowZmaxlinesr‰   r1  Z	num_colorr   rw  r   rm  «  sª    
ÿ






þý
zPdb._print_lines_pdbpc                    sæ   zzdd l }d}trd}| jjj}| || jj¡}|sx| jdkrP| jt	|ƒ| kst| jdkst| j
| jkst| j| jjk rxd}W n tyŒ   Y n0 d | _| _| j| _
| j}tƒ | _tƒ  |¡ |  | j ¡ ¡}|| _t|| jdd� d S )Nr   ry  r„   Ú.rÚ   rÛ   )Ú	linecacheÚrun_from_mainr	  r÷   r¹   Úgetlinesrÿ   r©   rŠ   r8   r¨   ra  rL   r]  r§   r   rš   Údo_listr&  Úgetvaluerä   )rQ   rB  r…  ÚyrÅ   rn  Z	oldstdoutr   r­   r   r   rˆ    s<    
ÿýýü
úùzPdb.do_listc                    s*   d | _ | _|dkr|  |¡ tƒ  |¡S )NÚcontinuer<   )r©   r]  Z	do_tbreakrš   Údo_continuer[  r­   r   r   rŒ  (  s    
zPdb.do_continuec                    s   d | _ | _tƒ  |¡S )NÚnext)r©   r]  rš   Údo_nextr[  r­   r   r   rŽ  0  s    zPdb.do_nextc                    s   d | _ | _tƒ  |¡S )NÚstep)r©   r]  rš   Údo_stepr[  r­   r   r   r�  6  s    zPdb.do_stepc                    s   d | _ | _tƒ  |¡S )NZuntil)r©   r]  rš   Údo_untilr[  r­   r   r   r‘  <  s    zPdb.do_untilc                 C   sv   z|   t|  |¡ƒ¡ W nX typ   |sXtd| jd� td| jj ¡  | jd� Y d S td| jd� Y d S Y n0 d S )NzPrint usage: "p <VAR>"rØ   rD  rE  )	ÚmessageÚreprrK  rL   rä   r§   r	  r   rJ  r[  r   r   r   Údo_pB  s    þþzPdb.do_pc                 C   s„   t ƒ \}}ztj|  |¡| j|d� W nX ty~   |sftd| jd� td| jj ¡  | jd� Y d S td| jd� Y d S Y n0 d S )N)r@   zPrettyPrint usage: "pp <VAR>"rØ   rD  rE  )	rK   ÚpprintrK  r§   rL   rä   r	  r   rJ  )rQ   rB  r@   r   r   r   r   Údo_ppU  s     
þþz	Pdb.do_ppc                 C   sœ   t  d¡ | jj}| jj}t| j| j| jƒ}d| j	 
¡  |_	|  d¡ zt  |j|||f¡ W n tyx   |  ¡  Y n0 |  d¡ t  | j¡ |j| _dS )z¼
        Enter a recursive debugger that steps through the code argument
        (which is an arbitrary expression or statement to be
        executed in the current environment).
        Nz(%s) zENTERING RECURSIVE DEBUGGERzLEAVING RECURSIVE DEBUGGER)rH   Úsettracer	  rÿ   r   r�   ZcompletekeyÚstdinr§   rV   rN  r’  Úcall_tracingr¾   rL   Z
_error_excZtrace_dispatchr]  )rQ   rB  ÚglobalsÚlocalsÚpr   r   r   Úenter_recursive_debuggeri  s    


zPdb.enter_recursive_debuggerc                    s°   d ˆ_ ˆ_ˆj‰ G ‡ ‡‡fdd„dˆjƒ‰ˆj}tjdk rDtƒ j}|j	 
¡ }ˆ|d< t||ƒ}z|ˆ|ƒW S  tyª   t ¡ d d… }tj|Ž d  ¡ }ˆ |¡ Y n0 d S )NÚdebugc                       s"   e Zd Z‡‡‡ ‡fdd„Z‡  ZS )z$Pdb.do_debug.<locals>.PdbpWithConfigc                    s.   |  dˆ ¡ tˆ| ƒj|i |¤Ž ˆj| _d S )Nr‘   )Ú
setdefaultrš   r›   Zuse_rawinput)Zself_withcfgrª   r¬   )r‘   ÚPdbpWithConfigr®   rQ   r   r   r›   ‚  s    z-Pdb.do_debug.<locals>.PdbpWithConfig.__init__)r#   rT   rU   r›   Ú__classcell__r   ©r‘   r   rQ   r­   r   r   �  s   r   ©rz  é   r�   r3  rû   )r©   r]  r•   r®   r�  rH   Úversion_inforš   Údo_debugÚ__globals__r˜   r(   rL   Úexc_inforð   Úformat_exception_onlyrN  r`  )rQ   rB  Zdo_debug_funcr'   Zorig_do_debugr¨  Úmsgr­   r¢  r   r¦  }  s    


zPdb.do_debugc                 C   sH   d | _ | _|r@ddl}tjdd… }| |¡t_|tjdd…< t‚dS )z9Restart/Rerun during ``python -m pdbp <script.py>`` mode.r¾   r   Nr7   )r©   r]  ÚshlexrH   Úargvr   rŒ   )rQ   rB  r«  Zargv0r   r   r   Údo_run”  s    z
Pdb.do_runc                 C   s,   | j j ¡ }| | j j¡ tjd|d� d S )Nz*interactive*)Úlocal)r	  rÿ   r˜   r™   r   r   Zinteract)rQ   rB  Únsr   r   r   Údo_interactŸ  s    zPdb.do_interactc                 C   sp   zddl m} W n0 ty@   td| jd� td| jd� Y d S 0 z|  |¡}W n tyb   Y n
0 ||ƒ d S )Nr   )Útrackz3** cannot import pypy.translator.tool.reftracker **rØ   z;This command requires pypy to be in the current PYTHONPATH.)Z"rpython.translator.tool.reftrackerr±  rÓ   rä   r§   rK  rL   )rQ   rB  r±  Úvalr   r   r   Údo_track¤  s"    þþzPdb.do_trackc                 C   s   | j  | ji ¡S r    )rœ   rŸ  r	  rŽ   r   r   r   Ú_get_display_list¸  s    zPdb._get_display_listc                 C   s2   zt || jj| jjƒW S  ty,   t Y S 0 d S r    )Úevalr	  rÿ   r   Ú	NameErrorÚ	undefinedr[  r   r   r   Ú_getval_or_undefined»  s    
ÿzPdb._getval_or_undefinedc                 C   s4   z|   |¡}W n ty"   Y d S 0 ||  ¡ |< d S r    )r¸  rL   r´  )rQ   rB  rV  r   r   r   Ú
do_displayÂ  s
    zPdb.do_displayc                 C   s8   z|   ¡ |= W n$ ty2   td| | jd� Y n0 d S )Nz ** %s not in the display list **rØ   )r´  rÖ   rä   r§   r[  r   r   r   Údo_undisplayÉ  s    zPdb.do_undisplayc                 C   sº   | j | j \}}| js d|jv r4| jj| j_| jjS d }| ¡  d¡d }|dkr\| jj	}nN|dkrn| jj
}n<|dv r€| jj}n*t|ƒdkr¢|d  ¡ r¢| jj}n| jj}|| j_| jjS )NÚ__exception__zreturn rû   ÚNoneÚTrue)ÚFalser<   z[]z{}r   )ræ   rç   r    r   r–   rm   rw   rN  r   rq   ro   rp   r8   Ú	isdecimalrn   rl   )rQ   ró   rï   rŠ   Úthe_return_colorZreturn_valuer   r   r   Z__get_return_colorÏ  s"    



zPdb.__get_return_colorc                 C   s  | j �r| jrd| _d| _| j| j \}}|  |jj¡}t 	| j
jd| ¡}|}| j
jr¬z@tj d¡}t|ƒdkr–| |¡r–| |¡dkr–| |d¡}W n tyª   Y n0 t 	| j
j|¡}d }| jsÌd| _t 	| j
j| j¡}	d|	||f }d| j||f }
| j | jd ¡}| j|||
d	� d}d
|jv �rx|  |jd
 ¡}|�r>| j
j}|| j
jk�r>| j
j�s>t || j!d� d}�nÆd|jv �r¬d|jv �r¬t"|jd ƒ #¡ }t"|jd ƒ #¡ }| $d¡d  $d¡d d }|�r>| j%�r>| j
j&�r
|  '|¡}t 	||¡}t 	||¡}| j
j}d }z t( )| j¡d d }t"|ƒ}W n t�yN   d}Y n0 || j
jk�r>| j
j�s>d|v �r>d| dd¡v �r>t || j!d� t d| | j!d� d}�n’d|jv �sÄd|jv �r>d }d }d|jv �rêt"|jd ƒ #¡ }d|jv �rt"|jd ƒ #¡ }|�s|�r>| j%�r>| j
j&�r^|�rB|  '|¡}t 	||¡}|�r^|  '|¡}t 	||¡}| j
j}d }z t( )| j¡d d }t"|ƒ}W n t�y¢   d}Y n0 || j
jk�rò| j
j�sòd|v �rò|�ròd| dd¡v �ròt || j!d� d}nL|| j
jk�r>| j
j�s>d|v �r>|�r>d| dd¡v �r>t || j!d� d}d|jv �rð|jd }zt*|ƒ}W n, t+�yv   ‚ Y n t�yŒ   d}Y n0 d| }| j
j&�rÞ|�rÈ|jd d u �rÈ| j
j,}|d }n
|  '|¡}t 	||¡}t || j!d� d}|�rt | j!dd� d S )NFTz%rú~é   r7   r   ú[%s] > %s(%s)rd  r»  rØ   Úexcrª  ú<class 'rû   ú'>rI  r<   zraise z(msgr>   r’  z(messageZ
__return__z(unprintable return value)z return rÚ   rÛ   )-r�   rž   rŸ   ræ   rç   r¸   r÷   r¹   r   r(  r–   rf   r`   r   r   Ú
expanduserr8   r=  Úcountr€   rL   re   rk   r¡   r   r	  rp  r   Ú_format_exc_for_stickyrw   rm   rv   rä   r§   rM  rN  r   r    rW   Ú_Pdb__get_return_colorr7  ri  r“  ÚKeyboardInterruptrt   )rQ   rï   rŠ   rÅ   ÚlnoZshort_filenameZhome_dirÚfnamere  Úcolored_indexrf  Ústicky_rangeZneeds_extra_lineró   rw   rb  rÀ  ÚlastlineÚs2Zthe_return_color_2Úrvr   r   r   r^  ã  s   
ÿþýÿ
ÿþ



ÿþýü




ÿþýüû
ÿþýüû


ÿþ

zPdb._print_if_stickyc                 C   s”  t |ƒdkrd|f S |\}}d}zâznzLt|jƒ}| d¡d  d¡d }|dkrf|d	 |j ¡  }n
|j ¡ }W n tyŽ   |j ¡ }Y n0 W n ty°   t|ƒ ¡ }Y n0 |d u�r|d
7 }t|ƒ}| d¡rú| 	d¡dkrúd| d¡d  ¡  }||7 }W nj t
�y   ‚ Y nV t�yn } z<z|d|f 7 }W n t�yX   |d7 }Y n0 W Y d }~n
d }~0 0 | jj�r�|  |¡}t ||¡}|S )Nr3  z&pdbp: got unexpected __exception__: %rr<   rÅ  rû   rÆ  r   Úbuiltinsr„  r   zMessage:r7   z
 z(unprintable exception: %r)z(unprintable exception))r8   rM  rT   r   r#   rN  rL   rÔ   r=  rÈ  rË  r–   rW   rÊ  r   r(  )rQ   rÄ  Úexc_typeÚ	exc_valueró   ÚmodulerÑ  rÀ  r   r   r   rÉ  g  sB    


$

zPdb._format_exc_for_stickyc                 C   s®   |r^zt t| ¡ ƒ\}}W n& ty@   td| | jd� Y dS 0 d| _||d f| j| j< n| j | _d| _	| jr~|  
¡  n,t| jd� |  | j| j ¡ t| jdd� dS )z-Toggle sticky mode. Usage: sticky [start end]z%** Error when parsing argument: %s **rØ   NTr7   rÚ   rÛ   )r{  r?   r   rà   rä   r§   r�   r¡   r	  rÏ  r^  rå   ræ   rç   )rQ   rB  ro  rÜ   r   r   r   Ú	do_sticky‹  s"    ÿ

zPdb.do_stickyc                 C   s   | j j | j _|  ¡  d S r    )r–   r_   r
  r[  r   r   r   Údo_truncate   s    zPdb.do_truncatec                 C   sŽ   |d u r| j }nB|dkr(| j | j g}n*|dk rB| j d | … }n| j | d … }z$t|ƒD ]\}}| j||d� q\W n tyˆ   Y n0 d S )Nr   )Úframe_index)ræ   rç   r  rå   rË  )rQ   rÈ  Zstack_to_printrÙ  r)  r   r   r   Úprint_stack_trace¨  s    þzPdb.print_stack_tracec                 C   sô   | j r
d S |d ur|n| j}|\}}t | jj|¡}|| ju r–d}| jj}| jrr| jj	}|t
| jƒd krr| jj}t||ƒ}	td||	f | jdd� ntd| | jdd� |  ||¡}
t|
| jd� | j sðt| jdd� d	|
v sèd
|
v rðd| j_d S )Nz >r7   z[%s]%sr>   rÛ   z[%s]  rØ   rÚ   z
-> except z
-> except:T)r�   rç   r   r(  r–   rk   r	  rr   r    rt   r8   ræ   rs   r‚   rä   r§   r!  rv   )rQ   r)  Zprompt_prefixrÙ  rï   rŠ   rÎ  Z	indicatorr�   ÚindZstack_entryr   r   r   rå   º  s0    

ÿÿzPdb.print_stack_entryc                 C   s@   | j r|  ¡  n,t| jd� |  | j| j ¡ t| jdd� d S )NrØ   rÚ   rÛ   )r�   r^  rä   r§   rå   ræ   rç   rŽ   r   r   r   r
  Ù  s
    
zPdb.print_current_stack_entryc                 C   s`   |   ¡  |  ¡ }| ¡ D ]B\}}|  |¡}||us:||kr|||< td|||f | jd� qd S )Nz%s: %r --> %rrØ   )r^  r´  rR  r¸  rä   r§   )rQ   rœ   ÚexprZoldvalueZnewvaluer   r   r   Úpreloopá  s    
ÿzPdb.preloopc              
   C   sœ   z|   |¡}W n ty"   Y dS 0 t|tƒr8|dd fS zt |¡}t |¡\}}W n< ttfy� } z t	d| | j
d� W Y d }~dS d }~0 0 |||fS )N)NNNr7   z** Error: %s **rØ   )rK  rL   rá   rM  r7  rP  ri  rj  rO  rä   r§   )rQ   rB  rS  rÅ   rn  rŠ   rb  r   r   r   Ú_get_position_of_argë  s    


zPdb._get_position_of_argc                 C   s~   |   |¡\}}}|d u rd S z:| j}|  |jj¡}d| j||f }| j||d|d� W n" tyx   | j||dd� Y n0 d S )NrÃ  F)r  rf  )r  )rÞ  r	  r¸   r÷   r¹   rç   rm  rL   )rQ   rB  r   rŠ   rn  rï   rÅ   rf  r   r   r   Ú	do_sourceú  s    ÿ
zPdb.do_sourcec              	   C   sž   zt |ƒ}W n, ttfy8   td |¡| jd� Y d S 0 |dk sP|t| jƒkr`td| jd� n:|| _| j| j d | _	t
jdk rŒ| j	j| _|  ¡  d | _d S )Nú *** Expected a number, got "{0}"rØ   r   z*** Out of ranger£  )r?   rà   rO  rä   rZ  r§   r8   ræ   rç   r	  rH   r¥  r   Úcurframe_localsr
  rŠ   r[  r   r   r   Údo_frame  s     þ

zPdb.do_frameÚ1c              	   C   s¸   d | _ | _|dkrdn|}zt|ƒ}W n, ttfyT   td |¡| jd� Y d S 0 | j| dk rttd| jd� n@| j| | _| j	| j d | _
tjdk r¦| j
j| _|  ¡  d | _d S )	NÚupr<   rã  rà  rØ   r   z*** Oldest framer£  )r©   r]  r?   rà   rO  rä   rZ  r§   rç   ræ   r	  rH   r¥  r   rá  r
  rŠ   r[  r   r   r   Údo_up  s$    þ

z	Pdb.do_upc              	   C   s¾   d | _ | _|dkrdn|}zt|ƒ}W n, ttfyT   td |¡| jd� Y d S 0 | j| t	| j
ƒkrztd| jd� n@| j| | _| j
| j d | _tjdk r¬| jj| _|  ¡  d | _d S )	NZdownr<   rã  rà  rØ   z*** Newest framer   r£  )r©   r]  r?   rà   rO  rä   rZ  r§   rç   r8   ræ   r	  rH   r¥  r   rá  r
  rŠ   r[  r   r   r   Údo_down3  s$    þ

zPdb.do_downc                 C   s*   d | _ | _d| _t| jd� |  ¡  d S )NÚwhereFrØ   )r©   r]  r�   rä   r§   rÚ  r[  r   r   r   Údo_whereJ  s    zPdb.do_wherec                 C   s"   |  dd¡}t d||f ¡ d S )Nr9  z\"z%s "%s")r€   r   Úsystem)rQ   r]   rŠ   rÅ   r   r   r   Ú_open_editorR  s    zPdb._open_editorc                 C   s$   | j }|j}tj |jj¡}||fS r    )r	  ra  r   r   Úabspathr÷   r¹   )rQ   rï   rŠ   rÅ   r   r   r   Ú_get_current_positionV  s    zPdb._get_current_positionc                 C   st   |dkr|   ¡ \}}n|  |¡\}}}|du r2dS t d|¡}|rZ| d¡}t| d¡ƒ}| jj}|  |||¡ dS )z<Open an editor visiting the current file at the current liner<   Nz.*<\d+-codegen (.*):(\d+)>r7   r3  )	rì  rÞ  r|   r$  Úgroupr?   r–   r]   rê  )rQ   rB  rÅ   rŠ   r   r$  r]   r   r   r   Údo_edit\  s    
zPdb.do_editc                 C   s   dd„ | j D ƒS )Nc                 S   s   g | ]}t  |¡s|‘qS r   )Úside_effects_freer$  ©r-   ró   r   r   r   r1   l  r2   z$Pdb._get_history.<locals>.<listcomp>)r£   rŽ   r   r   r   Ú_get_historyk  s    zPdb._get_historyc                    sX   dd l }| | j| j¡}t|ƒt| ¡ ƒ }d| ‰ ‡ fdd„|  ¡ D ƒ}d |¡d S )Nr   r>   c                    s   g | ]}ˆ | ‘qS r   r   rð  ©Úindentr   r   r1   s  r2   z)Pdb._get_history_text.<locals>.<listcomp>rx  )r…  Úgetliner“   r’   r8   Úlstriprñ  r   )rQ   r…  r9   Znspacesr£   r   rò  r   Ú_get_history_textn  s    zPdb._get_history_textc                    s$   |du rt  ¡ j}|| _tƒ  |¡S )z*Remember starting frame. Used with pytest.N)rH   Ú	_getframeÚf_backrü   rš   Ú	set_trace)rQ   rï   r­   r   r   rù  v  s    
zPdb.set_tracec                    s   |d u rdS t ƒ  |¡S )NF)rš   Úis_skipped_module)rQ   r¿   r­   r   r   rú  }  s    zPdb.is_skipped_modulec                 C   sÂ   t d|| jd� | jjsdS t ¡ \}}}|r¾|jjjdkr¾|j	}|r¾|jjj
dkr¾|j	}|r¾|  |¡ | jj}tj||||d�}t|ƒdkr¦|d d	 d
kr¦| ¡  t d |¡ ¡ | jd� dS )z<Override/enhance default error method to display tracebacks.z***rØ   NrW  z<stdin>)Úlimitr7   rû   r   r>   r<   )rä   r§   r–   rx   rH   r¨  rö   r÷   rg  rù   r¹   Ú_remove_bdb_contextry   rð   Úformat_exceptionr8   r”   r   r'  )rQ   rª  ÚetypeÚevaluerú   Ztb_limitZfmt_excr   r   r   r`  ‚  s"    
ÿz	Pdb.errorc                 C   s>   | }|j r:|j }t|tƒr2|jjjjdkr2d |_ q:|j }qd S )NZonecmd)Ú__context__rá   rÔ   Ú__traceback__rö   r÷   rg  )rÿ  Zremoved_bdb_contextÚctxr   r   r   rü  ™  s    ÿþzPdb._remove_bdb_context)N)r   )NNr<   )TNr<   )N)rã  )rã  )N)dr#   rT   rU   rM   Zconfig_filenamer›   rÂ   rÇ   r¦   r—   rî   rè   rR   r  r  r  r  rã   Úclassmethodr  rí   r  r|   r   ÚDOTALLr#  r!  r"  r&  r2  r>  r@  rW  rY  r   r�   rQ  r\  r_  Zdo_llrc  Zdo_jrp  rm  rˆ  Zdo_lrŒ  Zdo_cZdo_contrŽ  Zdo_nr�  Zdo_sr‘  Zdo_untr”  r–  r�  r¦  r­  Z
do_restartr°  r³  r´  r¸  r¹  rº  rÊ  r^  rÉ  r×  rØ  Zdo_trunrÚ  Zline_prefixrå   r
  rÝ  rÞ  rß  râ  Zdo_frå  Zdo_uræ  Zdo_drè  Zdo_wZdo_btrê  rì  rî  rñ  rö  rù  rú  r`  Ústaticmethodrü  r¡  r   r   r­   r   r�   Â   sÎ   5
	

)1
" ÿ
[	 $
ü



r�   Ú_usagez"run runeval runctx runcall pm mainc                 C   sB   | d u r$t  ¡ d } | d us$J dƒ‚|ƒ }| ¡  | d | ¡ d S )Nr3  z(post_mortem outside of exception context)rH   r¨  Úresetrî   )r  r�   rœ  r   r   r   Úpost_mortem±  s    r  c                 K   s~   t rtt dƒrd S | d u r$t ¡ j} t r8t }t d ¡ n&| jj}| j}|f ||dœ|¤Ž}|a |d urp| 	|¡ | 
| ¡ d S )Nr  )r’   r“   )r  rË   rH   r÷  rø  r—  r÷   r¹   ra  r’  rù  )rï   Úheaderr�   r«   r   rÅ   rŠ   r   r   r   rù  ½  s    

rù  c                   C   s   d a d S r    )r  r   r   r   r   ÚcleanupÐ  s    r
  c                 C   s&   t  ¡ }tt ¡ ƒ t|d | ƒ dS )zl
    Enter a post-mortem pdb related to the exception just catched.
    (Used inside an except clause.)
    r3  N)rH   r¨  rä   rð   Ú
format_excr  )r�   Úinfor   r   r   ÚxpmÕ  s    r  c                   C   s
   t jad S r    )Úenablerù  r   r   r   r   r  ß  s    r  c                   C   s
   t jad S r    )Údisablerù  r   r   r   r   r  ç  s    r  c                 C   s   d S r    r   )rï   r�   r   r   r   Ú<lambda>ì  r2   r  c                   C   s   t dƒ d S )NzPDB!)rä   r   r   r   r   Ú
set_tracexï  s    r  c                 C   s~   | j }|jtf }t|dƒr*|j|d�}nJt |j|j|j	|j
|j|j|jtf |j|j|j|j|j|j|j|j¡}|| _ | S )Nr€   )rý   )r"   rý   rþ   rË   r€   r   ÚCodeTypeÚco_argcountÚco_kwonlyargcountÚ
co_nlocalsÚco_stacksizeÚco_flagsÚco_codeÚco_namesÚco_varnamesr¹   rg  Úco_firstlinenoÚ	co_lnotabÚco_freevarsÚco_cellvars)r&   ÚcZnew_co_constsr   r   r   Ú	hideframeø  s    

úr   c                 C   s   dS )NTr   )rS  rV  r   r   r   Úalways
  s    r!  c                    s   ‡ ‡‡fdd„}|S )Nc                    s&   | j ‰ t‡‡‡‡ fdd„ƒ}|| _ | S )Nc                    sN   |ˆkr>ˆ| |ƒr>t  ¡ j}ˆ ƒ }| |¡ ||_| |d ¡ ˆ| ||ƒ d S r    )rH   r÷  rø  rù  Z	stopframerî   )rQ   ÚattrrV  rï   Zpdb_)r�   ÚattrnameÚ	conditionÚold___setattr__r   r   Ú__setattr__  s    

z8break_on_setattr.<locals>.decorator.<locals>.__setattr__)r&  r   )r  r&  ©r�   r#  r$  )r%  r   Ú	decorator  s
    z#break_on_setattr.<locals>.decoratorr   )r#  r$  r�   r(  r   r'  r   Úbreak_on_setattr  s    r)  c            
      C   s’   t ƒ \} }d}d| }zT| }|dk r(d}|t|ƒ }t|d ƒ}t|| ƒ}d| }d| }	|| |	 }W n ty|   Y n0 td| d ƒ d S )Nz PDB continue z>>>>>>>>%s>>>>>>>>é   r3  ú>rx  )rK   r8   r?   rL   rä   )
r@   r‚  Zpdb_continueZborder_lineÚterminal_sizeZ
border_lenZborder_left_lenZborder_right_lenZborder_leftZborder_rightr   r   r   Úprint_pdb_continue_line7  s     
r-  c                  C   sV  dd l } |   tjdd … dddg¡\}}|s>ttƒ t d¡ g }d}|D ]B\}}|dv rlttƒ t ¡  qJ|d	v r€| |¡ qJ|d
v rJd}qJ|d }|s¼tj 	|¡s¼td| ƒ t d¡ |tjd d …< |sìtj 
|¡}tj |¡tjd< tƒ }|j |¡ d}	|	�rRz:|�r| |¡ n
| |¡ |j�r4W �qRtƒ  d}	W �q t�y‚   td|dƒ tdd tjdd … ¡ ƒ d}	Y nÌ t�y´   tddd� tt ¡ d ƒ d}	Y nš t�yö   zt ¡  W n t�yâ   Y n0 t d¡ d}	Y nX t�yL   zt ¡  W n t�y$   Y n0 t ¡ d }
| d |
¡ tƒ  d}	Y n0 �qd S )Nr   r7   zmhc:r5  zcommand=r3  F)z-hz--help)z-cz	--command)z-mTzError: %s does not exist!Z
Restartingzwith arguments:r  r>   z/The program exited via sys.exit(). Exit status:)rÜ   )ÚgetoptrH   r¬  rä   r  Úexitr  r   r   ÚexistsÚrealpathÚdirnamer�   ZrcLinesÚextendrÂ   rÇ   r¶   r-  rŒ   r   Ú
SystemExitr¨  ÚSyntaxErrorrð   Ú	print_excrL   rî   )r.  Úoptsrª   ÚcommandsZrun_as_moduleÚoptÚoptargrº   r   Zstay_in_pdbr  r   r   r   ÚmainJ  sv     





r;  r¯   )T)ErQ  r   rÎ   r7  r}  r   r•  r|   rJ   rÞ   rH   rð   r   Úcollectionsr   r   rÃ   r   rë   r   r   r   Ú__url__ZLazyVersionÚ__version__r†  r   rï  r   r   r(   r5   r;   rD   rK   ÚobjectrM   r‚   rê   r‹   rL   rŒ   r�   r·  r�   rË   r  r   r   rÌ   r&   rš  r  r  rù  r
  r  r  r  r  Z_dont_inline_rþ   r   r!  r)  r-  r;  r#   r   r   r   r   r   Ú<module>   sº   



	2
         n
	
?
