
    G@dry                       d Z ddlZddlZddlmZ ddlZddlZddlZddl	m
Z
 ddlmZmZ ddlZddlmZ ddlmZmZ ddlmZ ddlmZ dd	lmZmZmZmZmZmZ dd
l m!Z!m"Z" ddl#m$Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZBmCZCmDZD ddlEmFZFmGZG ddlHmIZI ddlJmKZK ddlLmMZM ddlNmOZO ddlPmQZQ  ejR        eS          ZTeIjU        ZV G d d          ZW G d d           ZX G d! d"          ZY G d# d$          ZZ G d% d&          Z[ G d' d(e+          Z\dS ))z1
IPython Console main widget based on QtConsole.
    N)find_connection_file)jupyter_config_dirjupyter_runtime_dir)QtKernelClient)SignalSlot)QColor)	WEBENGINE)QApplicationQHBoxLayoutQLabelQMessageBoxQVBoxLayoutQWidget)Configload_pyconfig_files)tunnel)on_conf_change_)PluginMainWidget)MENU_SEPARATOR)get_conf_pathget_home_dirrunning_under_pytestSpyderKernelSpec)SpyderKernelManager)openssh_tunnel)create_qss_style)ClientWidgetConsoleRestartDialogCOMPLETION_WIDGET_TYPEKernelConnectionDialogPageControlWidgetShellWidget)encodingprograms
sourcecode)get_error_matchremove_backslashes)QStylePalette)FrameWebView)FindReplace)Tabs)StdFilec                   b    e 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dZdZdZdZdZdZdZdS )IPythonConsoleWidgetActionsznew tabzcreate cython clientzcreate cympy clientzcreate pylab clientzClear shellz
clear linezconnect to kernelzinterrupt kernelInspect current objectRestart kernelzreset namespaceShow environment variableszshow system pathztoggle elapsed timeexitz
rename tabzenter array inlinezenter array tablezipython documentationzconsole helpzquick referenceN)__name__
__module____qualname__CreateNewClientCreateCythonClientCreateSymPyClientCreatePyLabClientClearConsole	ClearLineConnectToKernel	InterruptInspectObjectRestartResetNamespaceShowEnvironmentVariablesShowSystemPathToggleElapsedTimeQuit	RenameTabArrayInline
ArrayTableIPythonDocumentationConsoleHelpQuickReference     Qlib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/main_widget.pyr2   r2   A   s        O/-- !LI)O"I,MG&N;'N-D I 'K$J 3 K&NNNrP   r2   c                       e Zd ZdZdZdS ) IPythonConsoleWidgetOptionsMenusspecial_consoles_submenudocumentation_submenuN)r7   r8   r9   SpecialConsolesDocumentationrO   rP   rQ   rS   rS   b   s        0O+MMMrP   rS   c                       e Zd ZdZdZdZdS )'IPythonConsoleWidgetOptionsMenuSectionsconsoles_sectionedit_sectionview_sectionN)r7   r8   r9   ConsolesEditViewrO   rP   rQ   rY   rY   g   s        !HDDDDrP   rY   c                       e Zd ZdZdS )IPythonConsoleWidgetMenustabs_context_menuN)r7   r8   r9   TabsContextMenurO   rP   rQ   ra   ra   m   s        )OOOrP   ra   c                       e Zd ZdZdZdS )+IPythonConsoleWidgetTabsContextMenuSectionstabs_consoles_sectiontabs_edit_sectionN)r7   r8   r9   r]   r^   rO   rP   rQ   re   re   q   s        &HDDDrP   re   c            
           e Zd ZdZ eee          Z	  ee          Z	  e            Z	  e            Z		  eee
efee
eef          Z	  ee          Z	  eee          Z	  ee          Z	  ee          Z	  ee          Z	  ee          Z	  ee          Z	  eee          Z	  ee          Z	  ee          Z	  ed          Zd fd	Zd Zd Zd Zd Zd	 Z d
 Z! e"dd          d             Z# e"dddg          d             Z$ e"d          d             Z% e"d          d             Z& e"d          d             Z' e"d          d             Z( e"d          d             Z) e"d          d             Z* e"d           d!             Z+ e"d"          d#             Z, e"d$          d%             Z- e"d&          d'             Z. e"d(          d)             Z/ e"d*          d+             Z0 e"d,          d-             Z1 e"d.          d/             Z2 e"d0          d1             Z3 e"g d2          d3             Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z: e;            d:             Z<d; Z=dd=Z>dd@Z?dA Z@dB ZAdC ZBdD ZCdE ZDdF ZE e;ee          dG             ZFdH ZGdI ZHddJZIdK ZJdL ZKdM ZLdN ZM e;             e;e           e;e           e;ee           e;ee           e;eee          	 	 	 ddO                                                                        ZNdP ZOdQ ZPdR ZQdS ZR	 	 ddTZSdU ZTddVZUdW ZV e;e          dX             ZWddYZXdZ ZYdd[ZZdd\Z[d] Z\d^ Z]dd_Z^d` Z_da Z`db Zadc Zbdd Zcde Zddf Zedg Zfdh Zgdi Zhdj Zi	 	 ddlZj	 	 ddmZkdn Zldo Zmdp Zndq Zodr Zpds Zqdt Zrdu Zsdv Ztdw Zudx Zvdy Zwdz Zx	 dd|Zyd} Zzd~ Z{d Z|d Z}d Z~d Zd Zd Zd Zd Zd Z	 	 ddZd Z e;            d             Z e;            d             Z e;            d             Z xZS )IPythonConsoleWidgetzb
    IPython Console plugin

    This is a widget with tabs where each one is a ClientWidget.
    zhThe directory {} is not writable and it is required to create IPython consoles. Please make it writable.Nc           
          t                                          |||           d  _        d _        g  _        g  _        d _        d  _        d _         	                    dd           _
        d  _        d  _                                          _        i  _        d _        |r"|                                }|j        rd _        t'          t(          j                            d                     _        t(          j                            d           _        t(          j                            d	           _         j        rVt5          j        t5          j         j                            s+t)          j        t5          j         j                             t=                      }|                    d           tA           dd
d           _!        tE           j!        d          r*tF          j$        dk    s j!        %                    d            j!        j&        '                     fd            j!        (                                j)        '                     j*                    j!        (                                j+        '                     j,                    j!        -                     j.                   tF          j$        dk    rzt_                      }|0                    d           tc          |          }|2                    dddd           |3                     j!                   |3                    |           n|3                     j!                    j        rti                      _5        tl          r? j5        7                                8                    ts          tt                               n2 j5        ;                    d<                    tt                               |3                     j5                   nd  _5        t{          t}          d                      _?        t          jA        B                                } |jC        di t          jE         t          jF         dddd  j?        ;                    |G                                            j?        H                                 |3                     j?                   t                      _J         jJ        H                                 |3                     jJ                    K                    |            L                    d            M                                 d  _N        t                       _P        d S )Nr   FTcss_path
appearancesectionIPYCONSOLE_TESTINGIPYCONSOLE_TEST_DIRIPYCONSOLE_TEST_NO_STDERR/)rename_tabs
split_charsplit_indexsetDocumentModedarwinc                 0                         d          S )NT
give_focus)refresh_container)idxselfs    rQ   <lambda>z/IPythonConsoleWidget.__init__.<locals>.<lambda>P  s    ..$.?? rP   ztab-containerzbackground:{}zPress <b>Q</b> to exit pagerz0px 1px 4px 1px5pxAlignCenter)zbackground-colorcolormarginpaddingzqproperty-alignmentrO   )Qsuper__init__menu_actionsmaster_clientsclients	filenamesmainwindow_closeactive_project_pathcreate_new_client_if_emptyget_confrk   run_cell_filenameinterrupt_actionget_conf_optionsinitial_conf_options!registered_spyder_kernel_handlersenable_infowidgetget_command_line_optionsno_web_widgetsboolosenvironget_testing	_test_dir_test_no_stderrospisdirjoinmakedirsr   
setSpacingr/   	tabwidgethasattrsysplatformrv   currentChangedconnecttabBartabMovedmove_tabsig_name_changedrename_tabs_after_changeset_close_functionclose_clientr   setObjectNamer   setContentsMargins	addWidgetr-   
infowidgetr
   pagesetBackgroundColorr	   MAIN_BG_COLORsetStyleSheetformatr   r   pager_label	qstylizerstyle
StyleSheet	setValuesr,   COLOR_ACCENT_2COLOR_TEXT_1toStringhider.   find_widget	setLayoutsetAcceptDrops_init_asyncio_patch_cached_kernel_propertiesr   _current_working_directory)
r}   namepluginparentcli_optionslayouttab_container
tab_layoutpager_label_css	__class__s
   `        rQ   r   zIPythonConsoleWidget.__init__#  s   vv...  %#' *.'j,GG!% $$($9$9$;$;!13. "& 	/ 99;;K) /).& RZ^^,@AABB(=>>!z~~.IJJ > 	69SXdn5566 6CHT^44555!d*+- - -DN$566 	100 N**4000%--????	A 	A 	A(00???088)	+ 	+ 	+))$*;<<<<8###IIM''888$]33J))!Q1555  000]++++T^,,, ! 
	#*400DO ;$$&&99=))+ + + + --#**=99; ; ;T_----"DO "!$B"C"CTJJ#/4466!! 	 	#0#? A%24'#0%
 %
 	 	 	 	&&'?'?'A'ABBB)*** 't,,)***v 	D!!! 	  """ *.& +7..'''rP   c                 <    d| _         |                                  d S )NT)r   close_all_clientsr}   s    rQ   on_closezIPythonConsoleWidget.on_close  s"     $     rP   c                      t          d          S )NzIPython Consoler   r   s    rQ   	get_titlezIPythonConsoleWidget.get_title  s    "###rP   c                 d    | j                                         }||                                S d S N)r   currentWidgetget_controlr}   clients     rQ   get_focus_widgetz%IPythonConsoleWidget.get_focus_widget  s5    --//%%''' rP   c           	                                 t          j        t          d                               d           j        d           _                              t          j        t          d                               d           j        d           _	                              t          j
        t          d                               d           j        d           _                              t          j        t          d	                               d
           j                   _                              t          j        t          d          t          d           j                   _                              t          j        t          d                               d           j                   _                              t          j        t          d                               d           fd           _                              t          j        t          d                               d           fd           _                              t          j        t          d           j                             d                     _                              t          j        t          d                               d           j        d           _                               t          j!        t          d           j"        d           _#                              t          j$        t          d           j%        d           _&                              t          j'        t          d                               d            j(        !           _)                              t          j*        t          d"           j+        d           _,                              t          j-        t          d#           j.        d           _/        t`           j          j#         j&         j         j,         j/        t`           j)        f	 _1         2                                } 3                    th          j5        t          d$                     _6         j         j6         j        fD ]$} 7                    ||tp          j9        %           % j         j	         j         j        fD ]$} 7                    ||tp          j:        %           % j         j         j        fD ]$} 7                    ||tp          j;        %           %                      t          j<        t          d&                               d           j=                  }                      t          j>        t          d'                               d           j?                  }                      t          j@        t          d(                               d           jA        !          }|||fD ]} 7                    | j6        )            B                    d*t          d          t          d+                               d           j        ,           _C         B                    d-t          d	          t          d	                               d
           j        ,           _D        t          d.           _F         G                    d/ jF                    G                    d* jC                    G                    d0 jD                    3                    t          jI                  } j         j6         j        fD ]$} 7                    ||t          j9        %           % j         j	         j         j        fD ]$} 7                    ||t          j:        %           %| jK        _L         3                    th          jM        t          d1          2           _N                              t          jO        t          d3           jP        4          }                      t          jQ        t          d5           jR        4          }                      t          jS        t          d6           jT        4          }	||	|fD ]}
 jN        U                    |
           d S )7NzNew console (default settings)ipython_consoleT)texticon	triggeredregister_shortcutr4   restartzRemove all variables
editdeletezInterrupt kernelstop)r   r   r   zConnect to an existing kernelz:Open a new IPython console connected to an existing kernel)r   tipr   z
Rename tabrenamer5   r   c                  |                                      r&                                                                  nd S r   )get_current_shellwidgetrequest_envr   s   rQ   r~   z,IPythonConsoleWidget.setup.<locals>.<lambda>  s<    //11<,,..::<<<7; rP   zShow sys.path contentssyspathc                  |                                      r&                                                                  nd S r   )r   request_syspathr   s   rQ   r~   z,IPythonConsoleWidget.setup.<locals>.<lambda>  s<    //11<,,..>>@@@7; rP   zShow elapsed timeshow_elapsed_time)r   toggledinitialr3   MessageBoxInformationzClear line or block)r   r   r   zClear consolez&Quitr6   )r   r   zEnter array tablezEnter array inlinezSpecial consoles)menurn   z!New Pylab console (data plotting)z!New SymPy console (symbolic math)z-New Cython console (Python with C extensions))r   resetz*Remove all variables from kernel namespace)r   r   r   r   	interrupt timerstart_interruptzIPython documentation)menu_idtitlezIntro to IPython)r   r   zQuick referencezConsole help)Vcreate_actionr2   r:   r   create_iconcreate_new_clientcreate_client_actionrC   restart_kernelrestart_actionrD   reset_namespacereset_actionrA   interrupt_kernelr   r@   _create_client_for_kernelconnect_to_kernel_actionrI   tab_name_editorrename_tab_actionrE   
env_actionrF   syspath_actionrG   $set_show_elapsed_time_current_clientr   show_time_actionrB   current_client_inspect_objectinspect_actionr?   current_client_clear_lineclear_line_actionr>   current_client_clear_consoleclear_console_actionrH   current_client_quitquit_actionrK    current_client_enter_array_tablearray_table_actionrJ   !current_client_enter_array_inlinearray_inline_actionr   context_menu_actionsget_options_menucreate_menurS   rV   special_console_menuadd_item_to_menurY   r]   r^   r_   r=   create_pylab_clientr<   create_sympy_clientr;   create_cython_clientcreate_toolbuttonreset_buttonstop_buttonr   
time_labeladd_corner_widgetra   rc   re   r   r   rW   ipython_menurL   
show_introrN   show_quickrefrM   show_guiref
add_action)r}   options_menuitemcreate_pylab_actioncreate_sympy_actioncreate_cython_actionrb   intro_actionquickref_actionguiref_actionhelp_actions   `          rQ   setupzIPythonConsoleWidget.setup  s	   $($6$6'7344!!"344," %7 %
 %
! #00'/#$$!!),,)" 1 
 
 !..'6)**!!,//*" / 
 
 !% 2 2'1%&&!!&))+	 !3 !
 !
 )-(:(:'7233   4 ); )
 )
% "&!3!3'1<!!(++*	 "4 "
 "
 ,,'@/00!!),,< < < <	 - 
 
 #00'6+,,!!),,< < < <	 1 
 
 !% 2 2'9&''=MM"566	 !3 !
 !
 #00'5+,,!!"9::8" 1 $ $ "&!3!3'1())4"	 "4 "$ "$ %)$6$6'4?##7"	 %7 %$ %$!  --',gJJ!!&)).	 . 0 0 #'"4"4'2&'';"	 #5 #$ #$ $(#5#5'3'((<"	 $6 $$ $$  "%#$
%
! ,,..$($4$4,< !!%# %#!
 ))-/ 	 	D !!!?H "     %#!&	( 		 		D
 !!!?D "     #%' 	 	D !!!?D "     #00'9677!!"344.	 1 
 
 #00'9677!!"344.	 1 
 
  $11':=>>!!"344/	  2  
  
 $#$& 	 	D !!. "     !22)**>??!!,//* 3 
 
  11%&&$%%!!&))+ 2 
 
 !** 	w888w(9:::0$2BCCC !,,%57 7 ))-/ 	 	D !!&CL "     %#!&	( 		 		D
 !!&CH "     0 !,,4B+,, - . . ))'<%&&o * 
 

 ,,'6$%%( - 
 

 **'3>""& + 
 
 m_> 	6 	6K((5555	6 	6rP   c                     |                                  r?|                                  }|                    |           |                                  d S d S r   )get_current_clientset_show_elapsed_timer{   )r}   stater   s      rQ   r	  z9IPythonConsoleWidget.set_show_elapsed_time_current_client  s]    ""$$ 	%,,..F((///""$$$$$	% 	%rP   c                    |                                  }||                                }| j                            |           | j                            |           |j        |j        |j        |j        k    }| j                            |            | j	                            |            | j
                            |            | j                            |            | j                            |            d S d S d S d S r   )r4  is_client_executingr   
setEnabledr!  r   	info_page
blank_pager   r  r  r  r
  )r}   r   	executingerror_or_loadings       rQ   update_actionsz#IPythonConsoleWidget.update_actions  s   ((**2244I!,,Y777''	222 !-$0#)#3v7H#H #..3C/CDDD!,,1A-ABBB**/?+?@@@#..3C/CDDD%005E1EFFFFF!  .-00rP   helpzconnect/ipython_console)rn   optionc                     t          | j                  D ]3\  }}|                     ||                                j        |           4d S r   )	enumerater   _change_client_confr   set_help_enabledr}   valuer|   r   s       rQ   change_clients_help_connectionz3IPythonConsoleWidget.change_clients_help_connection  s^    $T\22 	 	KC$$""$$5   	 	rP   rl   selectedui_themec                     |dk    r|                      dd          }t          | j                  D ]!\  }}|                     ||j        |           "d S )NrI  rH  rl   rm   )r   rB  r   rC  set_color_scheme)r}   r@  rF  r|   r   s        rQ   change_clients_color_schemez0IPythonConsoleWidget.change_clients_color_scheme  sr    ZMM*lMCCE$T\22 	 	KC$$'   	 	rP   r   )r@  c                     t          | j                  D ]!\  }}|                     ||j        |           "|                                 r|                                  d S d S r   )rB  r   rC  r5  r4  r{   rE  s       rQ    change_clients_show_elapsed_timez5IPythonConsoleWidget.change_clients_show_elapsed_time  s    $T\22 	 	KC$$,    ""$$ 	%""$$$$$	% 	%rP   show_reset_namespace_warningc                 x    t          | j                  D ]#\  }|ffd	}|                     ||           $d S )Nc                     | _         d S r   )reset_warningrF  r   s    rQ   change_client_reset_warningzeIPythonConsoleWidget.change_clients_show_reset_namespace_warning.<locals>.change_client_reset_warning  s    ',$$$rP   rB  r   rC  )r}   rF  r|   rT  r   s       @rQ   +change_clients_show_reset_namespace_warningz@IPythonConsoleWidget.change_clients_show_reset_namespace_warning  sq    $T\22 	 	KC27 - - - - - -$$+   	 	rP   ask_before_restartc                 x    t          | j                  D ]#\  }|ffd	}|                     ||           $d S )Nc                     | _         d S r   )rW  rS  s    rQ    change_client_ask_before_restartz`IPythonConsoleWidget.change_clients_ask_before_restart.<locals>.change_client_ask_before_restart      ,1)))rP   rU  )r}   rF  r|   rZ  r   s       @rQ   !change_clients_ask_before_restartz6IPythonConsoleWidget.change_clients_ask_before_restart  q    $T\22 	 	KC7< 2 2 2 2 2 2$$0   	 	rP   ask_before_closingc                 x    t          | j                  D ]#\  }|ffd	}|                     ||           $d S )Nc                     | _         d S r   )r^  rS  s    rQ    change_client_ask_before_closingz`IPythonConsoleWidget.change_clients_ask_before_closing.<locals>.change_client_ask_before_closing  r[  rP   rU  )r}   rF  r|   ra  r   s       @rQ   !change_clients_ask_before_closingz6IPythonConsoleWidget.change_clients_ask_before_closing  r]  rP   show_calltipsc                 |    t          | j                  D ]&\  }}|                     ||j        j        |           'd S r   )rB  r   rC  shellwidgetset_show_calltipsrE  s       rQ   change_clients_show_calltipsz1IPythonConsoleWidget.change_clients_show_calltips  sU    $T\22 	 	KC$$"4   	 	rP   buffer_sizec                 |    t          | j                  D ]&\  }}|                     ||j        j        |           'd S r   )rB  r   rC  re  set_buffer_sizerE  s       rQ   change_clients_buffer_sizez/IPythonConsoleWidget.change_clients_buffer_size  sU    $T\22 	 	KC$$"2   	 	rP   completion_typec                     t          | j                  D ]1\  }}|                     ||j        j        t
          |                    2d S r   )rB  r   rC  re  _set_completion_widgetr#   rE  s       rQ   change_clients_completion_typez3IPythonConsoleWidget.change_clients_completion_type  sZ    $T\22 	/ 	/KC$$"9&u-/ / / /	/ 	/rP   	in_promptc                     t          |          r;t          | j                  D ](\  }}|                     ||j        j        |           'd S d S r   )r   rB  r   rC  re  set_in_promptrE  s       rQ   change_clients_in_promptz-IPythonConsoleWidget.change_clients_in_prompt  sm    ;; 	(66  V((&4   	 	 rP   
out_promptc                     t          |          r;t          | j                  D ](\  }}|                     ||j        j        |           'd S d S r   )r   rB  r   rC  re  set_out_promptrE  s       rQ   change_clients_out_promptz.IPythonConsoleWidget.change_clients_out_prompt  sm    ;; 	(66  V((&5   	 	 rP   greedy_completerc                 |    t          | j                  D ]&\  }}|                     ||j        j        |           'd S r   )rB  r   rC  re  set_greedy_completerrE  s       rQ   change_clients_greedy_completerz4IPythonConsoleWidget.change_clients_greedy_completer"  sU    $T\22 	 	KC$$"7   	 	rP   jedi_completerc                 |    t          | j                  D ]&\  }}|                     ||j        j        |           'd S r   )rB  r   rC  re  set_jedi_completerrE  s       rQ   change_clients_jedi_completerz2IPythonConsoleWidget.change_clients_jedi_completer*  U    $T\22 	 	KC$$"5   	 	rP   autocallc                 |    t          | j                  D ]&\  }}|                     ||j        j        |           'd S r   )rB  r   rC  re  set_autocallrE  s       rQ   change_clients_autocallz,IPythonConsoleWidget.change_clients_autocall2  sU    $T\22 	 	KC$$"/   	 	rP   pdb_ignore_libc                 |    t          | j                  D ]&\  }}|                     ||j        j        |           'd S r   )rB  r   rC  re  set_pdb_ignore_librE  s       rQ   change_clients_pdb_ignore_libz2IPythonConsoleWidget.change_clients_pdb_ignore_lib;  r  rP   pdb_execute_eventsc                 |    t          | j                  D ]&\  }}|                     ||j        j        |           'd S r   )rB  r   rC  re  set_pdb_execute_eventsrE  s       rQ   !change_clients_pdb_execute_eventsz6IPythonConsoleWidget.change_clients_pdb_execute_eventsC  sU    $T\22 	 	KC$$"9   	 	rP   pdb_use_exclamation_markc                 |    t          | j                  D ]&\  }}|                     ||j        j        |           'd S r   )rB  r   rC  re  set_pdb_use_exclamation_markrE  s       rQ   'change_clients_pdb_use_exclamation_markz<IPythonConsoleWidget.change_clients_pdb_use_exclamation_markK  sU    $T\22 	 	KC$$"?   	 	rP   )symbolic_mathhide_cmd_windowsstartup/run_linesstartup/use_run_filestartup/run_filepylabpylab/backendpylab/autoloadpylab/inline/figure_formatpylab/inline/resolutionpylab/inline/widthpylab/inline/heightpylab/inline/bbox_inchesc                      j         s%| j        v r j                            |           dS d}g }d}d}d}d}                     |          }	d}
d}d	}||||||gz  }||v }d
}d}dgt	           j                  z  }                                 }d}|	r|
|k    r|r                     |
          }g } j        D ]}|j                                        }||k    r\|Z||k    rT||k    rN|	                    d           t          |          t          |          k    rd} j         rdt          j        d<   }|	                    d           t          |          }|s|r}t                      so                                  _         j                            |           t!                     }|                                 |                                \  }}}nd}d}d}||i}t'           j                  D ]\  }}|r||         p|}|r|r|r^|j                                        r,j        r%||f fd	j                                       ^                     ||           u|r+|r)|j        }d|_        |                                 ||_        |r|s|r1|r-|r/|j        }d|_        |                                 ||_        dS dS dS dS )z
        Apply options that possibly require a kernel restart or related to
        Matplotlib inline backend options.
        NFr  r  r  r  r  r  r  r   TtrueBACKEND_REQUIRE_RESTARTc                 h                         | |           j                                       d S r   )_change_client_mpl_confsig_pdb_prompt_ready
disconnect)occhange_client_mpl_confr}   sws     rQ   r  zYIPythonConsoleWidget.change_possible_restart_and_mpl_conf.<locals>.change_client_mpl_conf  sA    44Q:::/::24 4 4 4 4rP   )r   r   remover   lenr   r4  re  get_mpl_interactive_backendappendidr   r   anyr   r   r"   exec_get_action_valuerB  is_debugging
_executingr  r   r  rW  r   ) r}   r@  rF  restart_neededrestart_optionsrun_lines_nuse_run_file_n
run_file_npylab_npylab_opylab_backend_nsymbolic_math_nhide_cmd_windows_ninline_backendpylab_restartclients_backend_require_restartcurrent_client&current_client_backend_require_restartpylab_backend_or   interactive_backendrestart_dialogrestart_allrestart_current
no_restartoptionsr|   r   current_ask_before_restart!current_client_ask_before_restartr  r  s    `                             @@rQ   $change_possible_restart_and_mpl_confz9IPythonConsoleWidget.change_possible_restart_and_mpl_confS  s    } 	222)00888)/'
 --(() */K+-?A 	A?2+0'C4E4E*E'002216. $	A&00^0"mmO<<O /1+, B B&BBDD $
 $~55 (3 (>99 (?::3::4@@@ &zzR%7%777AE>  = KDJBJ'@A3::5AAAA ?@@M 
	m 
	5I5K5K 
	(,(=(=(?(?D%%,,V4441$77N  """)::<<[/ZK#OJ 5/$T\22 	G 	GKCG#B3#G  
  G G
 G'??$$ 	B 	B18F 4 4 4 4 4 4 4 4
 +334JKKKK00&AAAA G[ G-3-F*,1)%%''',F) 	3 F 	3	3$3	38F	3 1 .05N-))+++1 ---	3 	3 	3 	3 	3 	3rP   c                    |j         }|                                s ||           dS |j                                         r%|||ffd	|j                                       dS |||ffd	|j                                       dS )a  
        Change a client configuration option, taking into account if it is
        in a debugging session.

        Parameters
        ----------
        client : ClientWidget
            Client to update configuration.
        client_conf_func : Callable
            Client method to use to change the configuration.
        value : any
            New value for the client configuration.

        Returns
        -------
        None.

        c                 \     ||           | j         j                                       d S r   )re  r  r  r  ccfrF  change_confs      rQ   r  z=IPythonConsoleWidget._change_client_conf.<locals>.change_conf  s/    E


2==kJJJJJrP   c                 \     ||           | j         j                                       d S r   )re  sig_prompt_readyr  r  s      rQ   r  z=IPythonConsoleWidget._change_client_conf.<locals>.change_conf  s/    E


.99+FFFFFrP   N)re  r8  r  r  r   r  )r}   r   client_conf_funcrF  r  r  s        @rQ   rC  z(IPythonConsoleWidget._change_client_conf  s    & ))++ 	5U#####,,.. 		5$*:% K K K K K K #++K88888$*:% G G G G G G ''44444rP   c                    d}|                      |          }d}d}d}d}d}	d}
d}|j        }|r||v s||v r@|                      |          }|                      |          }|                    ||           ||v r*|                      |          }|                    |           ||v r*|                      |          }|                    |           |	|v s|
|v r@|                      |	          }|                      |
          }|                    ||           ||v r.|                      |          }|                    |           d	S d	S d	S )
z4Apply Matplotlib related configurations to a client.r  r  r  r  r  r  r  r  N)r   re  set_matplotlib_backendset_mpl_inline_figure_formatset_mpl_inline_resolutionset_mpl_inline_figure_sizeset_mpl_inline_bbox_inches)r}   r  r   r  r  pylab_autoload_nr  inline_backend_figure_format_ninline_backend_resolution_ninline_backend_width_ninline_backend_height_ninline_backend_bbox_inches_nr  pylab_autoload_or  inline_backend_figure_format_oinline_backend_resolution_oinline_backend_width_oinline_backend_height_oinline_backend_bbox_inches_os                       rQ   r  z,IPythonConsoleWidget._change_client_mpl_conf  s    --((+))E&&?#!5"7'A$  	L'))-=-H-H#'==1A#B#B "&--"@"@))/;KLLL-8815224 24.//0NOOO*g55.2mm//1 /1+,,-HIII&'11+w66)-**, *,&*.--++- +-'--*,CE E E+w66/3}}002 02,--.JKKKKK1	L 	L* 76rP   c                 >   t           j        dk    rt          j        dd         dk    rtddl}|j        dk    rdS ddl}	 ddlm}m} t          |	                                |          r|
                     |                       dS dS # t          $ r Y dS w xY wdS dS )a  
        - This was fixed in Tornado 6.1!
        - Same workaround fix as ipython/ipykernel#564
        - ref: tornadoweb/tornado#2608
        - On Python 3.8+, Tornado 6.0 is not compatible with the default
          asyncio implementation on Windows. Pick the older
          SelectorEventLoopPolicy if the known-incompatible default policy is
          in use.
        - Do this as early as possible to make it a low priority and
          overrideable.
        ntN   )      r   )      )WindowsProactorEventLoopPolicyWindowsSelectorEventLoopPolicy)r   r   r   version_infotornadoasyncior  r  
isinstanceget_event_loop_policyset_event_loop_policyImportError)r}   r  r  r  r  s        rQ   r   z(IPythonConsoleWidget._init_asyncio_patch!  s    7d??s/3v==NNN#v--NNN:        557768 8 : 116688: : : : :: :	     ?==s   B
 

BBc                    t          j        t                                s:	 t          j        t                                 n# t
          t          f$ r Y dS w xY wd}|st          t          j	                              
                    d          d         }t          j                            t                      d|z            }t          j                            |          s|nd}||S )z
        Generate a new connection file

        Taken from jupyter_client/console_app.py
        Licensed under the BSD license
        Nr   -zkernel-%s.json)r   r   r   r   r   IOErrorOSErrorstruuiduuid4splitpathr   exists)r}   cfidents      rQ   _new_connection_filez)IPythonConsoleWidget._new_connection_fileF  s     y,..// 	/112222W%   tt 	6
%%++C004E1335E5MNNB7>>"--52B  	6 	s    A AAc                 D    | j                             |j                   d S r   )sig_shellwidget_createdemitre  r   s     rQ   _shellwidget_startedz)IPythonConsoleWidget._shellwidget_startedZ  s"    $))&*<=====rP   c                 h    	 | j                             |j                   d S # t          $ r Y d S w xY wr   )sig_shellwidget_deletedr  re  RuntimeErrorr   s     rQ   _shellwidget_deletedz)IPythonConsoleWidget._shellwidget_deleted]  sI    	(--f.@AAAAA 	 	 	DD	s   # 
11c                 v    t          j        |           }|\  }}}}}|sdS |                     ||||           dS )z/Create a client connected to an existing kernelN)r$   get_connection_parameterscreate_client_for_kernel)r}   connect_outputconnection_filehostnamesshkeypasswordoks          rQ   r  z.IPythonConsoleWidget._create_client_for_kernelc  s\     0I$OO<J9(FHb 	4F))/8V*24 4 4 4 4rP   c                     || _         || _        | j        r| j                            |           | j        D ]}|                    |           d S r   )_font
_rich_fontr   r   set_fontr   )r}   font	rich_fontr   s       rQ   update_fontz IPythonConsoleWidget.update_fonts  sa    
#! 	0O$$Y///l 	" 	"FOOD!!!!	" 	"rP   Fc                    d}| j                                         r| j        D ]8}	 |j        j                                         "# t          t          f$ r Y 5w xY w| j                                         }|j	        |j
        k    rm| j        rf|                                 |j                                         |j                            | j                   | j                                         n9| j        r| j                                         |j                                         |                                }|r|                                 t+          |t,                    r| j                                         n| j                                         |j        }| j                            |           |j        j                            |j                   nd}| j                            |           |r|j        }| j                             |!                                |"                                           | j#                             |           |$                                | %                                k    r'| &                    |$                                           | '                                 | (                                 dS )z
        Refresh interface depending on the current widget client available.

        Refreshes corner widgets and actions as well as the info widget and
        sets the shellwdiget and client signals
        N))r   countr   r   timeoutr  r
  	TypeErrorr   r:  r;  r   set_info_pagere  r   r   r   r   showr   setFocusr  r%   r   r   r
  
setCheckedr   	show_timer   
set_editorsig_pdb_state_changedr  is_waiting_pdb_inputget_pdb_last_stepsig_shellwidget_changedget_cwdget_working_directoryon_working_directory_changedupdate_tabs_textr>  )r}   rz   r   instance_clientcontrolr   r  s          rQ   r{   z&IPythonConsoleWidget.refresh_container}  s    >!! &	#'<  #)1<<>>>>$i0   D ^1133F  F$555* 6 $$&&&"'')))''888$$&&&&) +O((***"''))) ((**G #  """'#455 ( %%'''' %%''' !' 8!,,->???L (()9::::G##G,,, 	@#B&++''))2+?+?+A+AC C C(--b111 zz||t99;;;;11"**,,???s   AAAr   Tc                    t          |t                    sdS | j                            |           | j                            ||          }| j                            ||           | j                            |           | j	        r|r| j
                                         |                                  |                                                                 |                                  dS )zAdd tab.N)r  r!   r   r  r   addTabr   insertsetCurrentIndex
dockwidgetsig_switch_to_plugin_requestedr  activateWindowr   r"  r-  )r}   r   r   filenamerz   indexs         rQ   add_tabzIPythonConsoleWidget.add_tab  s    &,// 	FF###%%fd33eX...&&u---? 	7z 	7/44666%%'''rP   c                    | j                             |          }| j                            |          }| j                             ||           | j                            ||           |                                  dS )zV
        Move tab (tabs themselves have already been moved by the tabwidget).
        N)r   popr   r2  r-  )r}   
index_fromindex_tor7  r   s        rQ   r   zIPythonConsoleWidget.move_tab  sv     >%%j11!!*--h111Hf---rP   c                 N    d | j         D             }t          j        ||          S )z)Generate a file name without ambiguation.c                     g | ]}||S rO   rO   ).0r7  s     rQ   
<listcomp>z;IPythonConsoleWidget.disambiguate_fname.<locals>.<listcomp>  s,     ( ( (&(8 ( ( (rP   )r   r)   disambiguate_fname)r}   fnamefiles_path_lists      rQ   rB  z'IPythonConsoleWidget.disambiguate_fname  s4    ( (DN ( ( (,_eDDDrP   c                     	 t          | j                  D ]T\  }}| j        |         }|r*|                     ||                     |                     >|                     |d           UdS # t
          $ r Y dS w xY w)zUpdate the text from the tabs.N)rB  r   r   rename_client_tabrB  
IndexError)r}   r8  rC  r   s       rQ   r-  z%IPythonConsoleWidget.update_tabs_text  s    		 )$. 9 9 9 9ue, 9**6+/+B+B5+I+IK K K K **6488889 9  	 	 	DD	s   A)A- -
A;:A;c                     |                      t          |                    }|||_        | j                            ||                                           dS )zRename a client's tab.N)get_client_index_from_idr  
given_namer   
setTabTextget_name)r}   r   rJ  r8  s       rQ   rF  z&IPythonConsoleWidget.rename_client_tab  sQ    --bjj99! *F!!%):):;;;;;rP   c                    |                                  }d}| j        D ]1}t          |          t          |          k    r||j        k    rd} n2|j        rd|vr|s|                     ||           n|                     |d           |j        r4d|vr2|s2|                     |          D ]}|                     ||           dS dS dS dS )z#Rename tabs after a change in name.FTrr   N)r4  r   r  rJ  allow_renamerF  get_related_clients)r}   rJ  r   repeatedcls        rQ   r   z-IPythonConsoleWidget.rename_tabs_after_change  s   ((** , 	 	B&zzRVV##
bm(C(C  	14z#9#9(#9""6:6666""64000  	74z#9#9(#9..v66 7 7&&r:6666	7 	7#9#9#9#97 7rP   c                     | j                                         }| j                                         j                            |           dS )zTrigger the tab name editor.N)r   currentIndexr   r  edit_tab)r}   r8  s     rQ   r  z$IPythonConsoleWidget.tab_name_editor  s@    ++--/88?????rP   c                     t          j        |          s| j                            |           t	          j        |          r| j                            |dd           dS dS )zHandle %edit magic petitions.r  r   N)r   isfilesig_edit_newr  r'   is_text_filesig_edit_goto_requested)r}   r7  lines      rQ   	edit_filezIPythonConsoleWidget.edit_file  sm     z(## 	-""8,,, ** 	? (--h2>>>>>	? 	?rP   c                 2   	 t          dgt                                }t          d|j        i          }n# t          $ r t                      }Y nw xY wt                      }d|j        _        |                     d          }t          }||         |j        _        |                     d          }||j        _	        |                     d          }||j        _
        |                     d          }|                     d          }	t          |          r||j        _        t          |	          r|	|j        _        |                     d	d
          }
t          |
          d         }||j        _        |
|j        _        |                    |           |S )z
        Generate a Trailets Config instance for shell widgets using our
        config system

        This lets us create each widget with its own config
        zjupyter_qtconsole_config.pyJupyterWidgetrichrl  rc  rh  rp  rt  rH  rl   rm   r   )r   r   r   r]  	Exceptionkindr   r#   gui_completionenable_calltipsrh  r   rp  rt  r    style_sheetsyntax_style_merge)r}   full_cfgcfgspy_cfgcompletion_type_ocompletions
calltips_obuffer_size_oin_prompt_oout_prompt_ocolor_schemerc  s               rQ   config_optionsz#IPythonConsoleWidget.config_options!  s   	*,I+J+=+?+?A AH
 /8+ABCCCC 	 	 	((CCC	 (( &," !MM*;<<,/:;L/M, ]]?33
0:- m44,9) mmK00}}\22 	:.9G!+ 	</;G!, }}Z}FF&|44Q7,7)-9* 	

7
s   36 AAc                    |                      dd          r'ddlm} t          t          j        |j                  }nddl}i }|                      dd          }d	|z  }d
|z  }||fD ]}	 t          j        |i           }|	                                \  }	}
n# |j
        $ r d}	Y nw xY w|	                                                    d          d                                         }	d|v r|	|d<   |	|d<   |S )z+Python and IPython versions used by clientsdefaultmain_interpreterrm   r   )release)python_versionipython_versionN
executablez&%s -c "import sys; print(sys.version)"z:%s -c "import IPython.core.release as r; print(r.version)")envr   
IPythonrv  ru  )r   IPython.corert  dictr   version
subprocessr(   run_shell_commandcommunicateCalledProcessErrordecoder  strip)r}   rt  versionsr~  pyexecpy_cmdipy_cmdcmdprocoutput_errs              rQ   interpreter_versionsz)IPythonConsoleWidget.interpreter_versionsY  sV   ==,>=?? 	8,,,,,,"{ '  HH
 H]]<9K]LLF>GFM  ( 8 8 #5crBBBD#'#3#3#5#5LFDD!4      FFF ..t44Q7==??##28H.//17H-..s   --BB*)B*c                     t          |                     d          |                     d          |                     d          |                     d                    }|du r
d|d<   d|d	<   |du r
d|d<   d|d	<   |S )
zs
        Additional options for shell widgets that are not defined
        in JupyterWidget config options
        r  r  r  show_banner)r  autoload_pylabsympyr  Tr  Fr  )r|  r   )r}   is_pylabis_sympyr  s       rQ   additional_optionsz'IPythonConsoleWidget.additional_optionsy  s    
 --((==)9::--00m44	
 
 
 t(,G$%$GGt(-G$%#GGrP   c                     |                      |          }|D ]V}|j        M|j        |_        |j        j                            |j                   |j                            d            dS WdS )z#Set elapsed time for slave clients.Ni  )rO  r   t0r  r   r$  start)r}   r   related_clientsrQ  s       rQ   set_client_elapsed_timez,IPythonConsoleWidget.set_client_elapsed_time  s}    226::! 	 	Bx#E	$,,V-=>>>""4(((	 $	 	rP   c                 |    t          j                    }| j        D ] }||u s||                                u r|c S !dS )z(Return current client with focus, if anyN)r   focusWidgetr   r   )r}   widgetr   s      rQ   get_focus_clientz%IPythonConsoleWidget.get_focus_client  s[    )++l 	 	F6V-?-?-A-A#A#A $B	 	rP   c                 @    | j                                         }||S dS )z$Return the currently selected clientN)r   r   r   s     rQ   r4  z'IPythonConsoleWidget.get_current_client  s(    --//M rP   c                 @    |                                  }||j        S dS )z,Return the shellwidget of the current clientN)r4  re  r   s     rQ   r   z,IPythonConsoleWidget.get_current_shellwidget  s*    ((**%% rP   c	           	      J   | xj         dz  c_         t          t          | j                   d          }	| j        r| j        nd}
|                     ||||
|          \  }}}}}|t          |d|
          }nd}|                     d          }|                     d          }|                     d	          }|                     d
          }t          | fi d|	dt          d          d| 	                                d| 
                    ||          d|                                 d|d| j        d|d|d|d|d	|d
|d| j        d| j        d|d|d|d|}|                     ||                                ||           |=| j                            t'                                }|                    |           dS |                                sdS |                     |||           |j        j        dS |                     ||           |S )zCreate a new clientr  Aint_idstr_idN)std_dircachez.faultr   rO  rW  r^  id_history_filename
history.pyrp  r  )r  r  r  r  r  rR  rJ  rz   rk   handlers
stderr_obj
stdout_obj	fault_objinitial_cwd)r   r7  rz   ry   )r   r|  r  r   get_new_kernelr0   r   r!   r   rp  r  r  r  rk   r   r9  rL  PERMISSION_ERROR_MSGr   r   show_kernel_errorhas_spyder_kernelsconnect_client_to_kernelre  kernel_managerregister_client)r}   rz   r7  	is_cythonr  r  rJ  r  r  	client_idr  r  kmkcr  r  r  r   rR  rW  r^  r   	error_msgs                          rQ   r   z&IPythonConsoleWidget.create_new_client  s     	q D$7 8 8 #% % %	$(N<$..-1-@-@x7% .A .I .I*BJ
 >Hg66III MM*=>>&DEE!]]+?@@!]]+?@@d 7 7 7		 7/<\/J/J/J7-1-@-@-B-B-B7 261H1H/7/7 2I 29 29 297 483L3L3N3N3N7 /1b7 483L3L7 1B0A7 -:M7 *47 *47 2D1C7 2D1C7 (,}}7  (,'M'M!7" *4#7$ *4%7& )2	'7( +6+)7, 	**X! 	 	# 	# 	# :1889L9N9NOOI$$Y///F ((** 	F%%fb"555,4FV
;;;rP   c           	      
    	 t          j        |          }t          j        |          }|r|nd}t          ||          }t          j                            |          d         dk    rt          |dz   |          }nK# t          t          f$ r7 t          j
         t          d          t          d          |z             Y dS w xY wd}d}d}	d}
t          d	          dz
  }d}d}d}d} j        D ]}||j        v r|                                |                                }|j        }||j        d
         }|j        j        }	|j        j        }
|j        r|j                                        }|j        r|j                                        }|j        r|j                                        }|j        }t          |j        d                   }||k    r|}|$ xj        dz  c_        t5           j                  }t7          |t9          |dz                       }                     d          }                     d          }                     d          }t=           fi d|d|dt?          d          d                                  d !                                d "                                d|d j#        d|d|	d|
d|d|d|d j$        d j%        d|d |d!|}tM          |"          }	 |'                                 nX# tP          $ rK}t          j
         t          d#          t          d$          t5          |          z              Y d}~dS d}~ww xY w|	 t7          |j)        |j*        |j+        |j,        |j-        %          } .                    ||||          }|\  |_*        |_+        |_,        |_-        |||f|_/        nX# tP          $ rK}t          j
         t          d#          t          d&          t5          |          z              Y d}~dS d}~ww xY w|0                                 |j        1                    ||           j2        3                     j2                   |
s3j4        3                     j5                   6                                  j7        8                               |j9        3                     fd'           |	s :                    |            ;                    ||<                                (            =                    |           dS ))z0Create a client connected to an existing kernel.N)r7  r  r  z.jsonrz  zUnable to connect to <b>%s</b>TFr  r  r  r  r   rO  rW  r  rJ  r  r  rp  r  r  r  r  r  is_external_kernelis_spyder_kernelrR  rk   r  r  r  r  )r  zConnection errorzSAn error occurred while trying to load the kernel connection file. The error was:

)ip
shell_port
iopub_port
stdin_porthb_portz+Could not open ssh tunnel. The error was:

c                  8     j                                       S r   )r	  r  r}   re  s   rQ   r~   z?IPythonConsoleWidget.create_client_for_kernel.<locals>.<lambda>z  s    D055kBB rP   )r   )>r   dirnamebasenamer   r   r  splitextr  UnboundLocalErrorr   criticalr   ordr   r  
get_kernelr  re  r  r  r  copyr  r  rJ  r   r  r|  chrr   r!   r   rp  r  r  r  rk   r   r   load_connection_filer_  r  r  r  r  r  tunnel_to_kernelssh_parametersstart_channelsset_kernel_client_and_managersig_exception_occurredr   sig_is_spykernelconnect_external_spyder_kernelcheck_spyder_kernelr  r  stopped_channelsr  r9  rL  r  )r}   r  r  r  r  cf_pathcf_filename	master_idrJ  r  known_spyder_kernel	slave_ordr  r  r  r  rQ  new_slave_ordr  r   rR  rW  r   kernel_clienteconnection_infonewportsre  s   `                          @rQ   r  z-IPythonConsoleWidget.create_client_for_kernel  s   	k/22G,77K!(2ggdG2K8?A A AOw003w>>"6(72#B #B #B*+ 	 	 	 q||!" $/ "0 "02A"BC C C FF		 	
!#HHqL	

	, 	. 	.B""444==??.%']]__N"$"4$ "x 0I)+)J&*,.*I'} :%']%7%7%9%9
} :%']%7%7%9%9
| 8$&L$5$5$7$7	]
 #BF8$4 5 5 9,, -I 1$D/00I 	 #IM 2 24 4 4	 !MM*=>>&DEE!]]+?@@d 3 3 3"+)3)33 0=\/J/J/J3 .2-@-@-B-B-B	3
 261H1H1J1J1J3 483L3L3N3N3N3 />o3 483L3L3 (0x3 2D1C3 0C/B3 1B0A3 -:M3 2D1C3 (,}}3  (,'M'M!3" *4#3$ *4%3& )2	'3, 'GGG	..0000 	 	 	 q);'<'<!" $. "/ "/14Q"89 9 9 FFFFF	 "&$',7,7,7)1#3 #3 #3  00(17C C
 +3()))&08&(/K,,   $T1-?+@+@%& (8 &9 &9;>q66&BC C C 	 	$$&&&(11>	+ 	+ 	+*22'	) 	) 	) # 	.(0035 5 5++---$))+666&..BBBBB	D 	D 	D " 	1((000 	V&//"3"3444 	V$$$$$sF   A<B AC	C	L" "
M7,A M22M7=A*O( (
P=2A P88P=c                 4    |                      dd           dS )zForce creation of Pylab clientTPylab)r  rJ  Nr   r   s    rQ   r  z(IPythonConsoleWidget.create_pylab_client  !    AAAAArP   c                 4    |                      dd           dS )zForce creation of SymPy clientTSymPy)r  rJ  Nr  r   s    rQ   r  z(IPythonConsoleWidget.create_sympy_client  r  rP   c                 4    |                      dd           dS )zForce creation of Cython clientTCython)r  rJ  Nr  r   s    rQ   r  z)IPythonConsoleWidget.create_cython_client  s!    (CCCCCrP   c                    |                      |||          }|                     ||          }|d         |s|                                  |S d}| j        _| j        \  }	}
}}}|j         |	j         ||k    o%|	j        |j        k    o|j        |k    o
|j        |
k    }|s|                                  d}||j        |j        ||f| _        ||                     ||          S |S )z.Get a new kernel, and cache one for next time.r  r  r  r  N)create_kernel_speccreate_new_kernelclose_cached_kernelr   interrupt_mode__dict__argvrx  )r}   r  r  r  r  r  kernel_spec
new_kernelcached_kernelcached_spec
cached_envcached_argv
cached_dirvalids                 rQ   r  z#IPythonConsoleWidget.get_new_kernel  sH    -- . 
 
 ++KAA
a=  $$&&& )5
 #<	[&&&&
* 7$-1EE7$)[87 %J6   %((*** $ O*&  ))+w???rP   c                     | j         dS | j         d         }|\  }}}}}|                                 |                    d           d| _         |r|                                 |r|                                 dS dS )zClose the cached kernel.Nr  T)now)r   stop_restartershutdown_kernelr  )r}   r  r   r  r  r  s         rQ   r  z(IPythonConsoleWidget.close_cached_kernel  s    )1F6r:7D4>1j*%%'''&&4&000)-& 	  	 	  	 rP   c                     |                                  }|dS d}d}d}d}| j        s0t          |d|          }|j        }t          |d|          }|j        }|                     ||||          \  }}	|||	||fS )zCreate a new kernel.N)NNNNNz.stderrz.stdout)r  r   r0   handle'create_kernel_manager_and_kernel_client)
r}   r  r  r  r  stderr_handler  stdout_handler  r  s
             rQ   r  z&IPythonConsoleWidget.create_new_kernel  s    3355"//

# 	. )WEEJ&-M )WEEJ&-M==	
 
B B
J>>rP   c                     t          |t                    r%|#d|j        _        |                    |           dS  j        s|j                            |f fd	           |                    dd           |j        }|	                    ||           |j
                             j
                                        |           dS )zConnect a client to its kernel.Nc                 .                         |           S r   )r  )r  r}   s    rQ   r~   z?IPythonConsoleWidget.connect_client_to_kernel.<locals>.<lambda>  s    !:!:1!=!= rP   T)shelliopub)r  r  re  r  r  r   r  r   r  r  r  r  )r}   r   r  r  re  s   `    rQ   r  z-IPythonConsoleWidget.connect_client_to_kernel  s     b# 	2:04F-$$R(((F } 	?''=====? ? ? 	D111(11"b999*22'	) 	) 	)& 	!!&)))))rP   c                 2    |                      |           dS )z.Create a client with its cwd pointing to path.)r  Nr  )r}   r  s     rQ   create_client_from_pathz,IPythonConsoleWidget.create_client_from_path  s!     	400000rP   c                     |                      ||          }| xj        dz  c_        d|_        |                     |          }|                     ||           |S )z2Create a client to execute code related to a file.)r7  r  r  F)r   r   rN  rB  rF  )r}   r7  r  r   tab_texts        rQ   create_client_for_filez+IPythonConsoleWidget.create_client_for_file  sq     '' ( 4 4 	q  $**844vx000rP   c                     d}t          | j                  D ]4\  }}| j        |         |k    r| j                            |           |} n5|S )z(Get client associated with a given file.N)rB  r   r   r   r3  )r}   r7  r   r|   rQ  s        rQ   get_client_for_filez(IPythonConsoleWidget.get_client_for_file'  sb     .. 	 	GC~c"h....s333 / rP   c                 l    |                     |           |j        }|j        }|j                             j                   |j                             j                   |j                             j                   |j	                            |f fd	           |j
                             j
                   |j                             j                    j                            |j                   |j                             j                   |                     j                    j                            |           |j                             j                   |j                             j                   |j                             j        j                   dS )zRegister new clientry   c                 2                         | ||          S r   )pdb_has_stopped)rC  linenore  r}   s      rQ   r~   z6IPythonConsoleWidget.register_client.<locals>.<lambda>C  s      << rP   N)configure_shellwidgetre  _controlsig_new_clientr   r   sig_go_to_error_requestedgo_to_errorsig_help_requestedsig_pdb_stepr&  custom_edit_requestedr[  sig_history_requestedr  r  sig_append_to_history_requestedr  r  r   r%  sig_working_directory_changedr,  sig_execution_state_changedr>  sig_time_labelr"  setText)r}   r   rz   re  r/  s   `    rQ   r  z$IPythonConsoleWidget.register_client1  s   $$
$;;; (& 	"**4+ABBB 	)11$2BCCC 	"**4+BCCC ((.9 = = = = =	> 	> 	> 	)11$2LMMM 	)11$.AAA 	"''(?@@@.660	2 	2 	2 	
### 	##G,,, 	199-	/ 	/ 	/ 	*2243FGGG 	%%do&=>>>>>rP   c                 4   | j                                         sdS |-|| j        vrdS | j                             |          }|dk    rdS ||| j                                         }|| j                             |          }| j        s|r
d}|j        rdt          j	        | | j
                                        t          d          t          j        t          j        z            }|t          j        k    rdS t          |                     |                    dk    rRt          j	        | | j
                                        t          d          t          j        t          j        z            }|t          j        k    r|                     |           | j                             | j                             |                     | j                            |           t          |                     |                    dk    }|                    |           	 | j                            |           n# t.          $ r Y nw xY w|                                  | j                                         s| j        r|                                  dS dS dS )z<Close client tab from index or widget (or close current tab)Nr  Tz"Do you want to close this console?r   zQDo you want to close all other consoles connected to the same kernel as this one?)r   r  r   indexOfrS  r  r   r^  r   question_pluginrL  r   YesNor  rO  close_related_clients	removeTabr  r   r   r;  rG  r-  r   r   )r}   r8  r   ask_recursive	close_allcloseis_last_clients          rQ   r   z!IPythonConsoleWidget.close_client_  s   ~##%% 	FT\))N**622E {{=V^N//11E^**511F $ 	3 	3I( #,L))++:;;Okn4	6 6
 KN**F4++F3344q88'0L))++ 8 9 9Okn46 6	 KO++**6222 	  !7!7!?!?@@@F###T55f==>>!CN+++	Nu%%%% 	 	 	D	 	 ~##%% 	%$*I 	%""$$$$$	% 	% 	% 	%s   !H< <
I	I	c                 J   | j                                         }| j         D ]S}t          |                     ||                    dk    }|                    |           |                    |           Tt          j                     |                                  g | _	        dS )z
        Perform close actions for each running client.

        Returns
        -------
        bool
            If the closing action was succesful.
        r   T)
r   r  r  rO  r   r  r&   wait_all_shutdownr  r   )r}   open_clientsr   r*  s       rQ   r   z&IPythonConsoleWidget.close_all_clients  s     |((**l 	( 	(FD,,V\BBCCqH ///'''' 	%''' 	  """trP   c                 h    t          | j                  D ]\  }}t          |          |k    r|c S dS )zReturn client index from idN)rB  r   r  )r}   r  r8  r   s       rQ   rI  z-IPythonConsoleWidget.get_client_index_from_id  sH    &t|44 	 	ME6&zzY&& '	 	rP   c                 x    || j         }g }|D ]+}|j        |j        k    r||ur|                    |           ,|S )zY
        Get all other clients that are connected to the same kernel as `client`
        )r   r  r  )r}   r   clients_listr  rQ  s        rQ   rO  z(IPythonConsoleWidget.get_related_clients  s\     <L 	+ 	+B"f&<<<f$$&&r***rP   c                 h    |                      |          }|D ]}|                     |d           dS )z4Close all clients related to *client*, except itselfFr   r'  N)rO  r   )r}   r   r  s      rQ   r%  z*IPythonConsoleWidget.close_related_clients  sN    226::% 	B 	BFV5AAAA	B 	BrP   c                     d| _         d| _        t          t          | j                            D ]&}| j        d         }|                     |d           '|                     dd           d| _        dS )z
        Restart the console

        This is needed when we switch projects to update PYTHONPATH
        and the selected interpreter
        r   Fr  r2  )rz   r  TN)r   r   ranger  r   r   r   )r}   ir   s      rQ   r   zIPythonConsoleWidget.restart  s      */'s4<(()) 	B 	BA\"%FV5AAAA%u===*.'''rP   c                 ^    |                                  }|r|                                 d S d S r   )r4  inspect_objectr   s     rQ   r  z2IPythonConsoleWidget.current_client_inspect_object  s=    ((** 	$!!#####	$ 	$rP   c                 ^    |                                  }|r|                                 d S d S r   )r4  
clear_liner   s     rQ   r  z.IPythonConsoleWidget.current_client_clear_line  s=    ((** 	 	  	 rP   c                 ^    |                                  }|r|                                 d S d S r   )r4  clear_consoler   s     rQ   r  z1IPythonConsoleWidget.current_client_clear_console  =    ((** 	#  """""	# 	#rP   c                 ^    |                                  }|r|                                 d S d S r   )r4  exit_callbackr   s     rQ   r  z(IPythonConsoleWidget.current_client_quit  r<  rP   c                 ^    |                                  }|r|                                 d S d S r   )r4  enter_array_inliner   s     rQ   r  z6IPythonConsoleWidget.current_client_enter_array_inline  s=    ((** 	(%%'''''	( 	(rP   c                 ^    |                                  }|r|                                 d S d S r   )r4  enter_array_tabler   s     rQ   r  z5IPythonConsoleWidget.current_client_enter_array_table  s=    ((** 	'$$&&&&&	' 	'rP   c                     || j         |<   dS )a  
        Register a callback for it to be available for newly created
        client kernels.

        Parameters
        ----------
        handler_id : str
            Handler name to be registered and that will be used to
            call the respective handler from the Spyder kernel.
        handler : func
            Callback function that will be called when the kernel request
            the handler_id identifier.

        Returns
        -------
        None.
        N)r   )r}   
handler_idhandlers      rQ   #register_spyder_kernel_call_handlerz8IPythonConsoleWidget.register_spyder_kernel_call_handler  s    $ >E.z:::rP   c                 <    | j                             |d           dS )aQ  
        Unregister and remove a handler to not be added to newly created
        client kernels.

        Parameters
        ----------
        handler_id : str
            Handler name that was registered and will be removed from
            the Spyder kernel available handlers.

        Returns
        -------
        None.
        N)r   r;  )r}   rD  s     rQ   %unregister_spyder_kernel_call_handlerz:IPythonConsoleWidget.unregister_spyder_kernel_call_handler  s#     	.22:tDDDDDrP   c                 d    t           j        dk    rt          j        |i |S t	          | g|R i |S )Nr  )r   r   	zmqtunnelparamiko_tunnelr   )r}   argskwargss      rQ   
ssh_tunnelzIPythonConsoleWidget.ssh_tunnel$  sA    7d??,d=f===!$8888888rP   
   c           
          t          j        d          }|d         |d         |d         |d         f}|d         }t          ||          D ] \  }	}
|                     |	|
|||||           !t	          |          S )zx
        Tunnel connections to a kernel via ssh.

        Remote ports are specified in the connection info ci.
           r  r  r  r  r  )rJ  select_random_portsziprN  tuple)r}   r  r  r  r  r  lportsrports	remote_iplprps              rQ   r  z%IPythonConsoleWidget.tunnel_to_kernel*  s     .q11!,/1N!,/1KM#D)	&&)) 	% 	%FBOOBHi#% % % %V}}rP   c                 &    t          |||          S )z(Create a kernel spec for our own kernelsr  r   )r}   r  r  r  s       rQ   r  z'IPythonConsoleWidget.create_kernel_spec:  s#      ))1)13 3 3 	3rP   c                    	 t          |dd          }nG# t          $ r: t          d                              t	          j                              }|dfcY S w xY w||_        	 |                    |||j                   nG# t          $ r: t          d                              t	          j                              }|dfcY S w xY w|	                                }d|j
        _        ||fS )z!Create kernel manager and client.NT)r  configautorestartz The error is:<br><br><tt>{}</tt>)stderrstdoutrx  g      9@)r   r_  r   r   	traceback
format_exc_kernel_specstart_kernelrx  r   
hb_channeltime_to_dead)r}   r  r   r  r  r  r  r  s           rQ   r  z<IPythonConsoleWidget.create_kernel_manager_and_kernel_clientA  sB   		%0 /   NN
  	% 	% 	% ( ) ))/	0D0F0F)G)G t$$$$	% '2#	%''}/<,7O ( = = = =  	% 	% 	% ( ) ))/	0D0F0F)G)G t$$$$	% '--// 15 -},,s#    AAA$B ACCc                     |                                  }|/| j                                         |                                 dS dS )z!Restart kernel of current client.N)r4  r5  r  r   r   s     rQ   r   z#IPythonConsoleWidget.restart_kernelg  sN    ((**/44666!!##### rP   c                     |                                  }|/| j                                         |                                 dS dS )z"Reset namespace of current client.N)r4  r5  r  r   r   s     rQ   r   z$IPythonConsoleWidget.reset_namespacen  sN    ((**/44666""$$$$$ rP   c                     |                                  }|/| j                                         |                                 dS dS )z#Interrupt kernel of current client.N)r4  r5  r  stop_button_click_handlerr   s     rQ   r  z%IPythonConsoleWidget.interrupt_kernelu  sN    ((**/44666,,..... rP   c                     d|_         |j                            |j                   | j                            |           | j                            |           dS )z%Connect to an external Spyder kernel.TN)r  spyder_kernel_comm	open_commr  r)  r  $sig_external_spyder_kernel_connectedr  s     rQ   r  z3IPythonConsoleWidget.connect_external_spyder_kernel|  sX    '+$&001JKKK$))+666166{CCCCCrP   c                     | j         t          t          t          t          f                             ||dd           |j        r	d|_        dS |                                  |j                                         dS )z9Python debugger has just stopped at frame (fname, lineno)r   FN)	rY  r  intr   r  _pdb_focus_to_editorr6  r  r"  )r}   rC  r  re  s       rQ   r  z$IPythonConsoleWidget.pdb_has_stopped  s~    
 	$S#sD%89>>62u	& 	& 	& + 	,/4K,,,!!! ))+++++rP   c                 L    | j         D ]}|j                                         dS )z'Set Spyder breakpoints into all clientsN)r   re  set_spyder_breakpoints)r}   rQ  s     rQ   rr  z+IPythonConsoleWidget.set_spyder_breakpoints  s4    , 	4 	4BN113333	4 	4rP   c                     |                                  }|*	 |                    ||           dS # t          $ r Y dS w xY wdS )z=
        Send command to the pdb kernel if possible.
        N)r   pdb_execute_commandAttributeError)r}   commandfocus_to_editorr  s       rQ   rt  z(IPythonConsoleWidget.pdb_execute_command  sd     ))++>&&w@@@@@!    >s   0 
>>c                 ^    |                                  }||                                 dS dS )zStop debuggingN)r   stop_debuggingr}   r  s     rQ   ry  z#IPythonConsoleWidget.stop_debugging  s7    ))++> >rP   c                 Z    |                                  }||                                S dS )z+Get debugging state of the current console.NF)r   r'  rz  s     rQ   get_pdb_statez"IPythonConsoleWidget.get_pdb_state  s/    ))++>**,,,urP   c                 Z    |                                  }||                                S i S )z)Get last pdb step of the current console.)r   r(  rz  s     rQ   r(  z&IPythonConsoleWidget.get_pdb_last_step  s/    ))++>'')))	rP   c                     |                                  }|rW|                                 }|                                 }d|v r-|-|d         }|d         }|                     |||           dS dS dS dS )zP
        Check if actions need to be taken checking the last pdb state.
        rC  Nr  )r|  r(  r   r  )r}   	pdb_statepdb_last_stepr  rC  rZ  s         rQ   check_pdb_statez$IPythonConsoleWidget.check_pdb_state  s     &&((	 	6 2244M--//B-''BN%g.$X.$$UD"55555	6 	6 ('NNrP   c                     t          d          }|                                 j                            |d           dS )zAPrint message in the current console when a file can't be closed.z>The current file cannot be closed because it is in debug mode.T)before_promptN)r   r4  re  append_html_message)r}   	debug_msgs     rQ   print_debug_file_msgz)IPythonConsoleWidget.print_debug_file_msg  sR     ' ( (	!!-AAT 	B 	+ 	+ 	+ 	+ 	+rP   runcellc           	         d }|| _         |                     |          }||                                 }||                                p|snt	          d                              t	          |          t          |           ||                              dd                    }	|dk    r||j        _	        n|
                                }		 |                     |	|            n# t          $ r Y nw xY w|s| j                                         dS dS t          j        | t#          d          t#          d	                              t%          j        |                    t          j                   dS )
z(Run cell in current or dedicated client.c                 :    t          t          |                     S r   r+   r  r   s    rQ   normz+IPythonConsoleWidget.run_cell.<locals>.norm  s    %c$ii000rP   Nz{}({}, '{}')'z\'	debugcell	set_focusWarningzgNo IPython console is currently available to run <b>{}</b>.<br><br>Please open a new one and try again.)r   r  r4  r  r  r   reprreplacere  rp  r  execute_coderu  r5  r  r   warningr   r   r  Ok)
r}   code	cell_namer7  run_cell_copyrw  functionr  r   rZ  s
             rQ   run_cellzIPythonConsoleWidget.run_cell  s   	1 	1 	1 "* ))(33>,,..F  "".}.&( ((. #H $Y $X 6 6sE B B)D )D  {**>MF&; zz||!!$o2E!FFFF!    # ;388:::::; ; ) ' ( ((.s|H/E/E(F(F    s   C* *
C76C7c                 :    |                      |||||d           dS )zDebug current cell.r  N)r  )r}   r  r  r7  r  rw  s         rQ   
debug_cellzIPythonConsoleWidget.debug_cell	  s1     	dIx%{	4 	4 	4 	4 	4rP   c
                 :   	 d }
t          j        |          d         dk    }|rdd}r                                 n0                     |                               ||          d}Sj        j        r]|rdnd	d
 |
|          d|rd |
|          z  z  |rd |
|          z  z  |rdz  |rdz  dz  |r	j        _        n1d|rdz  dt          |          z  z  |rd |
|          z  z  	 j        j	        rn{r 
                    	            n^|rj                            d           nj                            d           j        j                            	 fd           n# t          $ r Y nw xY w	s j                                         dS dS t%          j         t)          d          t)          d          t          j        |          z  t$          j                   dS )z)Run script in current or dedicated clientc                 :    t          t          |                     S r   r  r  s    rQ   r~   z1IPythonConsoleWidget.run_script.<locals>.<lambda>	  s    .s4yy99 rP   r  z.pyxFN)r  T	debugfilerunfilez('r  z, args='%s'z, wdir='%s'z, post_mortem=Truez, current_namespace=True)z%run z-d z"%s"z %sr  z%clearc                  D                           j                  S )N)r  re  )r  re  )clear_variablesr   r  rw  rZ  r}   s   rQ   r~   z1IPythonConsoleWidget.run_script.<locals>.<lambda>L	  s/     1 1 ./*9&9(.(: !2 ! ! rP   r  zgNo IPython console is currently available to run <b>%s</b>.<br><br>Please open a new one and try again.)r   r  r4  r  r
  re  r  rp  r  r  r  silent_executeexecuter  r   ru  r5  r  r   r  r   r  r  )r}   r7  wdirrL  debugpost_mortemr  r  console_namespacerw  r  r  is_new_clientr   rZ  s   `     `` `   @@rQ   
run_scriptzIPythonConsoleWidget.run_script	  s#    :9 L**1-7	 	#"N  	%,,..FF--h77F~44	 5 3 3 $!2 /38$GKKi$G$G$(DNNNN4 7MDDJJ66D 7MDDJJ66D 100D$ 766D N>MF&; "EMD3x==00 /EDDJJ..D%0  # %%dNO4C0C & E E E E % =*99(CCCC*228<<<&7??           "    # ;388:::::; ; ) A  l8,,-     s   BF 
F)(F)c                 f    t          j        |          r| j                            |           dS dS )zc
        Set current working directory in the Working Directory and Files
        plugins.
        Nr   r   sig_current_directory_changedr  r}   r  s     rQ   set_working_directoryz*IPythonConsoleWidget.set_working_directoryd	  s=    
 9W 	=.33G<<<<<	= 	=rP   c                     || _         dS )zf
        Save current working directory when changed by the Working Directory
        plugin.
        Nr   r  s     rQ   save_working_directoryz+IPythonConsoleWidget.save_working_directoryl	  s    
 +2'''rP   c                     | j         S )z-Get saved value of current working directory.r  r   s    rQ   r+  z*IPythonConsoleWidget.get_working_directorys	  s    ..rP   c                 `    |                                  }||                    |           dS dS )z%Set current client working directory.N)r   set_cwd)r}   	directoryre  s      rQ   $set_current_client_working_directoryz9IPythonConsoleWidget.set_current_client_working_directoryw	  s;    2244"	***** #"rP   c                 n    |r0t          j        |          r| j                            |           dS dS dS )zp
        Notify that the working directory was changed in the current console
        to other plugins.
        Nr  r  s     rQ   r,  z1IPythonConsoleWidget.on_working_directory_changed}	  sN    
  	=sy)) 	=.33G<<<<<	= 	= 	= 	=rP   c                 ^    |                                  }||                                 dS dS )z(Update working directory to console cwd.N)r   
update_cwdr  s     rQ   update_working_directoryz-IPythonConsoleWidget.update_working_directory	  s9    2244"""$$$$$ #"rP   c                     t                               d           | j        D ]!}|j        }||                    ||           "dS )zUpdate path on consoles.z&Update sys.path in all console clientsN)loggerr  r   re  update_syspath)r}   	path_dictnew_path_dictr   r  s        rQ   update_pathz IPythonConsoleWidget.update_path	  sU    =>>>l 	? 	?F&E $$Y>>>	? 	?rP   c                     | j         S )zGet the active project path.r   r   s    rQ   get_active_project_pathz,IPythonConsoleWidget.get_active_project_path	  s    ''rP   c                     || _         dS )aB  
        Update the active project path attribute used to set the current
        working directory on the shells in case a project is active

        Parameters
        ----------
        active_project_path : str
            Root path of the active project if any.

        Returns
        -------
        None.
        Nr  )r}   r   s     rQ   update_active_project_pathz/IPythonConsoleWidget.update_active_project_path	  s     $7   rP   c                    |r|                                  }n|}||sD	 |j                                         n# t          $ r Y nw xY w|r|                    d           n|r|r|                    d           	 |                    t          |                     n# t          $ r Y nw xY w|rB|                                  | 	                                }|r|
                                 dS dS dS dS )zExecute code instructions.NF)r  )r   r  r  r  r   r  r  ru  r6  r   r"  )r}   linesr  r  r  re  r  focus_widgets           rQ   r  z!IPythonConsoleWidget.execute_code	  sa     	--//BBB>! 2'224444    D" 6&&u&555 2O 2""5"111

3u::&&&&!     , ##%%%  $4466 , ))+++++A >*, ,, ,s!   9 
AA="B   
B-,B-c                 b   t          t          |                    }|r|                                \  }}d|v r| j        | j        }d|v rt	          j        |          }	 | j                            t	          j        |          t          |          d           dS # t          $ r Y dS w xY wdS )zGo to error if relevantz<ipython-input-N~r   )r*   r  groupsr   r   
expanduserrY  r  abspathro  
ValueError)r}   r   matchrC  lnbs        rQ   r  z IPythonConsoleWidget.go_to_error	  s    D		** 	JE3!U***6. e||u--,11K&&C"6 6 6 6 6   #	 	s   !;B 
B,+B,c                 H    ddl m} | j                            |d           dS )zShow intro to IPython helpr   )interactive_usageFN)IPython.core.usager  sig_render_rich_text_requestedr  )r}   r  s     rQ   r%  zIPythonConsoleWidget.show_intro	  s6     	988888+001BEJJJJJrP   c                 H    ddl m} | j                            |d           dS )zShow qtconsole helpr   )gui_referenceTN)qtconsole.usager  r  r  )r}   r  s     rQ   r'  z IPythonConsoleWidget.show_guiref	  s5     	211111+00EEEEErP   c                 F    ddl m} | j                            |           dS )zShow IPython Cheat Sheetr   )quick_referenceN)r  r  sig_render_plain_text_requestedr  )r}   r  s     rQ   r&  z"IPythonConsoleWidget.show_quickref	  s3     	766666,11/BBBBBrP   )NNN)F)r   T)FF)Tr   FFFNTN)FFFNTr   )T)NNT)NNrO  )FFF)r  )TFTN)r7   r8   r9   __doc__r   r  r  r  sig_focus_changedr5  ro  r   rY  rW  r|  r&  objectr  r	  r)  rm  r  r  r  r  r   r  r   r   r   r   r2  r	  r>  r   rG  rL  rN  rV  r\  rb  rg  rk  ro  rs  rw  r{  r  r  r  r  r  r  rC  r  r   r  r  r  r   r  r  r{   r9  r   rB  r-  rF  r   r  r[  rp  r  r  r  r  r4  r   r   r  r  r  r  r  r  r  r  r  r
  r  r  r   r   rI  rO  r%  r   r  r  r  r  r  r  rF  rH  rN  r  r  r  r   r   r  r  r  rr  rt  ry  r|  r(  r  r  r  r  r  r  r  r+  r  r,  r  r  r  r  r  r  r%  r'  r&  __classcell__)r   s   @rQ   ri   ri   x   s         '-fS#&6&6#
 #F3KK  &,VXX" %fc3_sCd6KLL" 6#;;L #F4..
 %fVnn %fVnn %fVnn ,26&>>( '-fSkk# &,VC%6%6"
   %+F3KK! 1 1 2 2j9 j9 j9 j9 j9 j9X! ! !$ $ $( ( (
A6 A6 A6F% % %G G G* ^F+DEEE  FE ^L*j1IJJJ  KJ ^.///% % 0/% ^9:::  ;: ^/000  10 ^/000  10 ^?+++  ,+ ^=)))  *) ^,---/ / .-/ ^;'''  (' ^<(((  )( ^-...  /. ^+,,,  -, ^:&&&  '& ^+,,,  -, ^/000  10 ^5666  76 ^ $ $ $ % % %y3 y3% %y3z5 5 5B'L 'L 'LR#: #: #:J  (> > >   
TVV4 4 V4" " "@ @ @ @H            E E E  < < <7 7 7.@ @ @ 
T&&? ? ?6 6 6p  @   ,      & & & 
TVV	T$ZZ	T#YY	T$__	T$	T$THMEI26< < <   _ Y Z V<|T% T% T%lB B BB B BD D D 8=;?0 0 0 0d     ? ? ? ?0&* &* &*P 
T#YY1 1 Y1      ,? ,? ,? ,?\:% :% :% :%x  8     B B B/ / /$ $ $
     
# # #
# # #
( ( (
' ' 'E E E(E E E"9 9 9 BF02     ,1493 3 3 3$- $- $-L$ $ $% % %/ / /D D D, , , 4 4 4
           6 6 6+ + + ,52 2 2 2h4 4 4T T Tn= = =2 2 2/ / /+ + += = =% % %? ? ?( ( (7 7 7" HM15', ', ', ',T  2 
TVVK K VK
 
TVVF F VF
 
TVVC C VC C C C CrP   ri   )]r  loggingr   os.pathr  r   r   r`  r  jupyter_client.connectr   jupyter_core.pathsr   r   qstylizer.styler   qtconsole.clientr   qtpy.QtCorer   r   
qtpy.QtGuir	   qtpy.QtWebEngineWidgetsr
   qtpy.QtWidgetsr   r   r   r   r   r   traitlets.config.loaderr   r   zmq.sshr   rJ  spyder.api.config.decoratorsr   spyder.api.translationsr   spyder.api.widgets.main_widgetr   spyder.api.widgets.menusr   spyder.config.baser   r   r   .spyder.plugins.ipythonconsole.utils.kernelspecr   +spyder.plugins.ipythonconsole.utils.managerr   'spyder.plugins.ipythonconsole.utils.sshr   )spyder.plugins.ipythonconsole.utils.styler    %spyder.plugins.ipythonconsole.widgetsr!   r"   r#   r$   r%   r&   spyder.utilsr'   r(   r)   spyder.utils.miscr*   r+   spyder.utils.paletter,   spyder.widgets.browserr-   spyder.widgets.findreplacer.   spyder.widgets.tabsr/   +spyder.plugins.ipythonconsole.utils.stdfiler0   	getLoggerr7   r  COLOR_BACKGROUND_1r   r2   rS   rY   ra   re   ri   rO   rP   rQ   <module>r     s9   
  				       



      8 7 7 7 7 7 F F F F F F F F     + + + + + + $ $ $ $ $ $ $ $       - - - - - -J J J J J J J J J J J J J J J J ? ? ? ? ? ? ? ? ' ' ' ' ' ' 8 7 7 7 7 7 % % % % % % ; ; ; ; ; ; 3 3 3 3 3 37 7 7 7 7 7 7 7 7 7 K K K K K K K K K K K K B B B B B B F F F F F F< < < < < < < < < < < < < < < < 8 7 7 7 7 7 7 7 7 7 A A A A A A A A . . . . . . / / / / / / 2 2 2 2 2 2 $ $ $ $ $ $ ? ? ? ? ? ? 
	8	$	$ 0' ' ' ' ' ' ' 'B, , , , , , , ,
       * * * * * * * *       C&C C&C C&C C&C C&C+ C&C C&C C&C C&C C&CrP   