
    G@dt                         d Z ddlZddlmZ ddlmZmZ ddl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mZ dd	lmZmZmZ dd
lmZ  G d de
          ZdS )z,
IPython Console plugin based on QtConsole.
    N)SignalSlot)PluginsSpyderDockablePlugin)on_plugin_availableon_plugin_teardown_)IPythonConsoleConfigPage)IPythonConsoleWidget IPythonConsoleWidgetOptionsMenus)ApplicationMenusConsolesMenuSectionsHelpMenuSections)get_temp_dirc                      e Zd ZdZdZej        ej        gZej	        ej
        ej        ej        ej        ej        gZej
        gZeZeZeZdZdZdZ eee          Z	  e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 Z/d Z0d Z1 e2ej        	          d
             Z3 e2ej        	          d             Z4 e2ej	        	          d             Z5 e2ej        	          d             Z6 e2ej        	          d             Z7 e2ej        	          d             Z8 e9ej        	          d             Z: e9ej        	          d             Z; e9ej	        	          d             Z< e9ej        	          d             Z= e9ej        	          d             Z> e9ej        	          d             Z?d Z@dBdZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId  ZJd! ZKd" ZLd# ZM	 	 dCd&ZNdBd'ZO	 	 dDd(ZPd) ZQd* ZRdEd+ZS	 	 	 	 dFd,ZT	 dGd.ZUd/ ZVdHd0ZWdId1ZXd2 ZYd3 ZZd4 Z[d5 Z\d6 Z]d7 Z^d8 Z_ e`e          d9             Zad: Zbd; Zcd< Zdd= Zed> Zfd? Zgd@ ZhdA Zid%S )JIPythonConsoleza
    IPython Console plugin

    This is a widget with tabs where each one is a ClientWidget
    ipython_consoleFTc                       t          d          S NzIPython consoler	        Dlib/python3.11/site-packages/spyder/plugins/ipythonconsole/plugin.pyget_namezIPythonConsole.get_name   s    "###r   c                      t          d          S r   r	   selfs    r   get_descriptionzIPythonConsole.get_description   s    "###r   c                 ,    |                      d          S )Nr   )create_iconr   s    r   get_iconzIPythonConsole.get_icon   s     1222r   c                    |                                  }|j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   |j        t          t          t          t          f                             | j        t          t          t          t          f                    |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   | j                            | j        j                   |                                  d S N)
get_widgetsig_append_to_history_requestedconnectsig_focus_changedsig_switch_to_plugin_requestedswitch_to_pluginsig_history_requestedsig_edit_goto_requestedstrintboolsig_edit_newsig_pdb_state_changedsig_shellwidget_createdsig_shellwidget_deletedsig_shellwidget_changed$sig_external_spyder_kernel_connectedsig_render_plain_text_requestedsig_render_rich_text_requestedsig_help_requestedsig_current_directory_changedmainplugin_focus_changed_remove_old_std_files)r   widgets     r   on_initializezIPythonConsole.on_initialize   s-   "".660	2 	2 	2 (()?@@@-55d6KLLL$,,T-GHHH&..t/KLLL&sCd':;CC(c3)<=	? 	? 	?##D$5666$,,T-GHHH&..t/KLLL&..t/KLLL&..t/KLLL3;;5	7 	7 	7.660	2 	2 	2-55/	1 	1 	1!))$*ABBB,44.	0 	0 	0 	&&ty'EFFF""$$$$$r   )pluginc                 n    |                      t          j                  }|                    |            d S r#   )
get_pluginr   Preferencesregister_plugin_preferencesr   preferencess     r   on_preferences_availablez'IPythonConsole.on_preferences_available   s2     oog&9:://55555r   c                    |                                  }|                     t          j                  }|                    t
          j                  }|j                            |j	                   |j
        |j        |j        g}|j        |j        |j        g}|D ].}|                    |t
          j        t"          j                   /|D ].}|                    |t
          j        t"          j                   /|                    |                                  j        t
          j        t,          j        t,          j                   d S )N)menu_idsection)rG   rH   before_section)r$   r@   r   MainMenuget_application_menur   ConsolesaboutToShowr&   update_actionscreate_client_actionspecial_console_menuconnect_to_kernel_actioninterrupt_actionrestart_actionreset_actionadd_item_to_application_menur   NewRestartipython_menuHelpr   ExternalDocumentationAbout)r   r<   mainmenuconsole_menunew_consoles_actions restart_connect_consoles_actionsconsole_new_actionconsole_actions           r   on_main_menu_availablez%IPythonConsole.on_main_menu_available   sk   ""??7#344  44%' ' ((!	# 	# 	#
 ''+ 
 #!,
( #7 	 	11"(1,0 2     ? 	 	N11(1,4 2     	--OO*$)$:+1	 	. 	
 	
 	
 	
 	
r   c                    |                      t          j                  }| j                            |j                   | j        t          t          t          t          f                             | j	                   | j
                            |j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   | j                            |j                   |j                            | j                   |j                            | j                   d S r#   )r@   r   Editorr+   r&   loadr,   r-   r.   _load_file_in_editorr/   newbreakpoints_savedset_spyder_breakpointsrun_in_current_ipyclient
run_scriptrun_cell_in_ipyclientrun_celldebug_cell_in_ipyclient
debug_cellr0   update_pdb_stateexec_in_extconsolerun_selection sig_file_debug_message_requestedprint_debug_file_msgr   editors     r   on_editor_availablez"IPythonConsole.on_editor_available.  s<   00$,,V[999$S#sD%89AA%	' 	' 	'!!&*--- (()DEEE'//@@@$,,T];;;&..t??? 	"**6+BCCC!))$*<===/77%	' 	' 	' 	' 	'r   c                     |                      t          j                  }|j                            | j                   |j                            | j                   d S r#   )r@   r   Projectssig_project_loadedr&   _on_project_loadedsig_project_closed_on_project_closedr   projectss     r   on_projects_availablez$IPythonConsole.on_projects_available@  sP    ??7#344#++D,CDDD#++D,CDDDDDr   c                     |                      t          j                  }|j                            | j                   d S r#   )r@   r   WorkingDirectoryr8   r&   save_working_directoryr   working_directorys     r   on_working_directory_availablez-IPythonConsole.on_working_directory_availableF  sB     OOG,DEE7??'	) 	) 	) 	) 	)r   c                     |                      t          j                  }|j                            | j                   d S r#   )r@   r   PythonpathManagersig_pythonpath_changedr&   update_pathr   pythonpath_managers     r   on_pythonpath_manager_availablez.IPythonConsole.on_pythonpath_manager_availableL  s7    !__W-FGG199$:JKKKKKr   c                 n    |                      t          j                  }|                    |            d S r#   )r@   r   rA   deregister_plugin_preferencesrC   s     r   on_preferences_teardownz&IPythonConsole.on_preferences_teardownQ  s2     oog&9::11$77777r   c                     |                      t          j                  }|                    t          j                   |                    t          j        t          j	                   d S )N)rG   )
r@   r   rJ   remove_application_menur   rL   !remove_item_from_application_menur   DocumentationrY   )r   r\   s     r   on_main_menu_teardownz$IPythonConsole.on_main_menu_teardownW  sc    ??7#344(()9)BCCC 	22,:$) 	3 	 	 	 	 	r   c                    |                      t          j                  }| j                            |j                   | j        t          t          t          t          f                             | j	                   | j
                            |j                   |j                            | j                   |j                            | j                   |j                            | j                   |j                            | j                   | j                            |j                   |j                            | j                   |j                            | j                   d S r#   )r@   r   rd   r+   
disconnectre   r,   r-   r.   rf   r/   rg   rh   ri   rj   rk   rl   rm   rn   ro   r0   rp   rq   rr   rs   rt   ru   s     r   on_editor_teardownz!IPythonConsole.on_editor_teardownb  s<   00$//<<<$S#sD%89DD%	' 	' 	'$$VZ000 ++D,GHHH'224?CCC$//>>>&11$/BBB 	"--f.EFFF!,,T-?@@@/::%	' 	' 	' 	' 	'r   c                     |                      t          j                  }|j                            | j                   |j                            | j                   d S r#   )r@   r   ry   rz   r   r{   r|   r}   r~   s     r   on_projects_teardownz#IPythonConsole.on_projects_teardownt  sP    ??7#344#..t/FGGG#..t/FGGGGGr   c                     |                      t          j                  }|j                            | j                   d S r#   )r@   r   r   r8   r   r   r   s     r   on_working_directory_teardownz,IPythonConsole.on_working_directory_teardownz  sB     OOG,DEE7BB'	) 	) 	) 	) 	)r   c                     |                      t          j                  }|j                            | j                   d S r#   )r@   r   r   r   r   r   r   s     r   on_pythonpath_manager_teardownz-IPythonConsole.on_pythonpath_manager_teardown  s7    !__W-FGG1<<T=MNNNNNr   c                     |                                  }|                      d          }|                                                     ||           dS )zUpdate font from PreferencesT)	rich_textN)get_fontr$   update_font)r   font	rich_fonts      r   r   zIPythonConsole.update_font  sH    }}MMDM11	%%dI66666r   c                     d|                                  _        |                                                                  S )z%Perform actions when plugin is closedT)r$   mainwindow_closeclose_all_clients)r   
cancelables     r   on_closezIPythonConsole.on_close  s0    -1*  22444r   c                 2    |                      d           d S )NF)
give_focus)create_new_clientr   s    r   on_mainwindow_visiblez$IPythonConsole.on_mainwindow_visible  s    %00000r   c                 v    |                      t          j                  }|                    ||||           d S )N)processevents)r@   r   rd   re   )r   fnamelinenowordr   rv   s         r   rf   z#IPythonConsole._load_file_in_editor  s5    00E64}EEEEEr   c                     |                      t          j                  }|                                                     |                                           d S r#   )r@   r   ry   r$   update_active_project_pathget_active_project_pathr~   s     r   r{   z!IPythonConsole._on_project_loaded  sQ    ??7#34444,,..	0 	0 	0 	0 	0r   c                 T    |                                                      d            d S r#   )r$   r   r   s    r   r}   z!IPythonConsole._on_project_closed  s&    44T:::::r   c                    t           j        dk    rzt                      }t          j        |          D ]Y}t	          j        |          d         dv r9	 t          j        t	          j        ||                     G# t          $ r Y Sw xY wXdS dS )z
        Remove std files left by previous Spyder instances.

        This is only required on Windows because we can't
        clean up std files while Spyder is running on that
        platform.
        nt   )z.stderrz.stdoutz.faultN)	osnamer   listdirospsplitextremovejoin	Exception)r   tmpdirr   s      r   r;   z$IPythonConsole._remove_old_std_files  s     7d??!^^FF++  <&&q)-MMM	#(65"9"9::::$    N ? s   'A::
BBc                 V    |                                                      ||           dS )a  
        Register a callback for it to be available for the kernels of new
        clients.

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

        Returns
        -------
        None.
        N)r$   #register_spyder_kernel_call_handler)r   
handler_idhandlers      r   r   z2IPythonConsole.register_spyder_kernel_call_handler  s5    $ 	==	! 	! 	! 	! 	!r   c                 T    |                                                      |           dS )aA  
        Unregister/remove a handler for not be added to new clients kernels

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

        Returns
        -------
        None.
        N)r$   %unregister_spyder_kernel_call_handler)r   r   s     r   r   z4IPythonConsole.unregister_spyder_kernel_call_handler  s(     	??
KKKKKr   c                 4    |                                  j        S )zReturn clients list)r$   clientsr   s    r   get_clientszIPythonConsole.get_clients  s      ((r   c                 N    |                                                                  S )z(Return current client with focus, if any)r$   get_focus_clientr   s    r   r   zIPythonConsole.get_focus_client  s      11333r   c                 N    |                                                                  S )z$Return the currently selected client)r$   get_current_clientr   s    r   r   z!IPythonConsole.get_current_client  s      33555r   c                 N    |                                                                  S )z,Return the shellwidget of the current client)r$   get_current_shellwidgetr   s    r   r   z&IPythonConsole.get_current_shellwidget  s      88:::r   c                 V    |                                                      ||           dS )a4  
        Rename a client's tab.

        Parameters
        ----------
        client: spyder.plugins.ipythonconsole.widgets.client.ClientWidget
            Client to rename.
        given_name: str
            New name to be given to the client's tab.

        Returns
        -------
        None.
        N)r$   rename_client_tab)r   client
given_names      r   r   z IPythonConsole.rename_client_tab  s*     	++FJ?????r    Nc                 `    |                                                      ||||||           dS )a  
        Create a new client.

        Parameters
        ----------
        give_focus : bool, optional
            True if the new client should gain the window
            focus, False otherwise. The default is True.
        filename : str, optional
            Filename associated with the client. The default is ''.
        is_cython : bool, optional
            True if the client is expected to preload Cython support,
            False otherwise. The default is False.
        is_pylab : bool, optional
            True if the client is expected to preload PyLab support,
            False otherwise. The default is False.
        is_sympy : bool, optional
            True if the client is expected to preload Sympy support,
            False otherwise. The default is False.
        given_name : str, optional
            Initial name displayed in the tab of the client.
            The default is None.

        Returns
        -------
        None.
        )r   filename	is_cythonis_pylabis_sympyr   N)r$   r   )r   r   r   r   r   r   r   s          r   r   z IPythonConsole.create_new_client  sG    : 	++!! 	, 	# 	# 	# 	# 	#r   c                 X    |                                                      ||           dS )aE  
        Create a client widget to execute code related to a file.

        Parameters
        ----------
        filename : str
            File to be executed.
        is_cython : bool, optional
            If the execution is for a Cython file. The default is False.

        Returns
        -------
        None.
        )r   N)r$   create_client_for_file)r   r   r   s      r   r   z%IPythonConsole.create_client_for_file"  s-     	00Y0OOOOOr   c                 Z    |                                                      ||||           dS )a  
        Create a client connected to an existing kernel.

        Parameters
        ----------
        connection_file: str
            Json file that has the kernel's connection info.
        hostname: str, optional
            Name or IP address of the remote machine where the kernel was
            started. When this is provided, it's also necessary to pass either
            the ``sshkey`` or ``password`` arguments.
        sshkey: str, optional
            SSH key file to connect to the remote machine where the kernel is
            running.
        password: str, optional
            Password to authenticate to the remote machine where the kernel is
            running.

        Returns
        -------
        None.
        N)r$   create_client_for_kernel)r   connection_filehostnamesshkeypasswords        r   r   z'IPythonConsole.create_client_for_kernel3  s9    0 	22Xvx	9 	9 	9 	9 	9r   c                 P    |                                                      |          S )z-Get client associated with a given file name.)r$   get_client_for_file)r   r   s     r   r   z"IPythonConsole.get_client_for_fileN  s       44X>>>r   c                 T    |                                                      |           dS )z
        Create a new console with `path` set as the current working directory.

        Parameters
        ----------
        path: str
            Path to use as working directory in new console.
        N)r$   create_client_from_path)r   paths     r   r   z&IPythonConsole.create_client_from_pathR  s(     	11$77777r   c                 Z    |                                                      |||           dS )z<Close client tab from index or client (or close current tab))indexr   ask_recursiveN)r$   close_client)r   r   r   r   s       r   r   zIPythonConsole.close_client]  s?    &&U65B 	' 	D 	D 	D 	D 	Dr   c
                     | j                                          |                                                     |||||||||		  	         dS )a  
        Run script in current or dedicated client.

        Parameters
        ----------
        filename : str
            Path to file that will be run.
        wdir : str
            Working directory from where the file should be run.
        args : str, optional
            Arguments defined to run the file.
        debug : bool, optional
            True if the run if for debugging the file,
            False for just running it.
        post_mortem : bool, optional
            True if in case of error the execution should enter in
            post-mortem mode, False otherwise.
        current_client : bool, optional
            True if the execution should be done in the current client,
            False if the execution needs to be done in a dedicated client.
        clear_variables : bool, optional
            True if all the variables should be removed before execution,
            False otherwise.
        console_namespace : bool, optional
            True if the console namespace should be used, False otherwise.
        focus_to_editor: bool, optional
            Leave focus in the editor after execution.

        Returns
        -------
        None.
        N)sig_unmaximize_plugin_requestedemitr$   rk   )
r   r   wdirargsdebugpost_mortemcurrent_clientclear_variablesconsole_namespacefocus_to_editors
             r   rk   zIPythonConsole.run_scriptc  sa    H 	,11333$$		 		 		 		 		r   runcellc                     | j                                          |                                                     ||||||           dS )a  
        Run cell in current or dedicated client.

        Parameters
        ----------
        code : str
            Piece of code to run that corresponds to a cell in case
            `run_cell_copy` is True.
        cell_name : str or int
            Cell name or index.
        filename : str
            Path of the file where the cell to execute is located.
        run_cell_copy : bool
            True if the cell should be executed line by line,
            False if the provided `function` should be used.
        focus_to_editor: bool
            Whether to give focus to the editor after running the cell. If
            False, focus is given to the console.
        function : str, optional
            Name handler of the kernel function to be used to execute the cell
            in case `run_cell_copy` is False.
            The default is 'runcell'.

        Returns
        -------
        None.
        )functionN)r   r   r$   rm   )r   code	cell_namer   run_cell_copyr   r   s          r   rm   zIPythonConsole.run_cell  sX    : 	,11333"")X}o 	# 	 	 	 	 	r   c                     | j                                          |                                                     |||||           dS )a  
        Debug current cell.

        Parameters
        ----------
        code : str
            Piece of code to run that corresponds to a cell in case
            `run_cell_copy` is True.
        cell_name : str or int
            Cell name or index.
        filename : str
            Path of the file where the cell to execute is located.
        run_cell_copy : bool
            True if the cell should be executed line by line,
            False if the `debugcell` kernel function should be used.
        focus_to_editor: bool
            Whether to give focus to the editor after debugging the cell. If
            False, focus is given to the console.

        Returns
        -------
        None.
        N)r   r   r$   ro   )r   r   r   r   r   r   s         r   ro   zIPythonConsole.debug_cell  sP    2 	,11333$$T9h%4	6 	6 	6 	6 	6r   c                 Z    |                                                      |||           dS )a  
        Execute code instructions.

        Parameters
        ----------
        lines : str
            Code lines to execute.
        current_client : bool, optional
            True if the execution should be done in the current client.
            The default is True.
        clear_variables : bool, optional
            True if before the execution the variables should be cleared.
            The default is False.

        Returns
        -------
        None.
        )r   r   N)r$   execute_code)r   linesr   r   s       r   r   zIPythonConsole.execute_code  s>    & 	&&)+ 	' 	- 	- 	- 	- 	-r   c                     | j                                          |                                                     ||            dS )z.Execute selected lines in the current console.)	set_focusN)r   r   r$   r   )r   r  r   s      r   rr   zIPythonConsole.run_selection  sC    ,11333&&uO8K&LLLLLr   c                     | j                                          |                                                                  dS )z&Stop debugging in the current console.N)r   r   r$   stop_debuggingr   s    r   r  zIPythonConsole.stop_debugging  s9    ,11333((*****r   c                 N    |                                                                  S )z+Get debugging state of the current console.)r$   get_pdb_stater   s    r   r  zIPythonConsole.get_pdb_state  s      ..000r   c                 N    |                                                                  S )z)Get last pdb step of the current console.)r$   get_pdb_last_stepr   s    r   r	  z IPythonConsole.get_pdb_last_step  s      22444r   c                     | j                                          |                                                     ||           dS )a:  
        Send command to the pdb kernel if possible.

        Parameters
        ----------
        command : str
            Command to execute by the pdb kernel.
        focus_to_editor: bool
            Leave focus in editor after the command is executed.

        Returns
        -------
        None.
        N)r   r   r$   pdb_execute_command)r   commandr   s      r   r  z"IPythonConsole.pdb_execute_command  s?     	,11333--gGGGGGr   c                 R    |                                                                   dS )z
        Print message in the current console when a file can't be closed.

        Returns
        -------
        None.
        N)r$   rt   r   s    r   rt   z#IPythonConsole.print_debug_file_msg  s&     	..00000r   c                 T    |                                                      |           dS )z
        Set current client working directory.

        Parameters
        ----------
        directory : str
            Path for the new current working directory.

        Returns
        -------
        None.
        N)r$   $set_current_client_working_directory)r   	directorys     r   r  z3IPythonConsole.set_current_client_working_directory  s(     	>>yIIIIIr   c                 T    |                                                      |           dS )a  
        Set current working directory in the Working Directory and Files
        plugins.

        Parameters
        ----------
        dirname : str
            Path to the new current working directory.

        Returns
        -------
        None.
        N)r$   set_working_directoryr   dirnames     r   r  z$IPythonConsole.set_working_directory(  s(     	//88888r   c                 T    |                                                      |           dS )z
        Save current working directory on the main widget to start new clients.

        Parameters
        ----------
        new_dir: str
            Path to the new current working directory.
        N)r$   r   r  s     r   r   z%IPythonConsole.save_working_directory8  s(     	0099999r   c                 R    |                                                                   dS )z>Update working directory to console current working directory.N)r$   update_working_directoryr   s    r   r  z'IPythonConsole.update_working_directoryD  s$    2244444r   c                 V    |                                                      ||           dS )a  
        Update path on consoles.

        Both parameters have as keys paths and as value if the path
        should be used/is active (True) or not (False)

        Parameters
        ----------
        path_dict : dict
            Corresponds to the previous state of the PYTHONPATH.
        new_path_dict : dict
            Corresponds to the new state of the PYTHONPATH.

        Returns
        -------
        None.
        N)r$   r   )r   	path_dictnew_path_dicts      r   r   zIPythonConsole.update_pathH  s*    $ 	%%i?????r   c                 R    |                                                                   dS )z'Set Spyder breakpoints into all clientsN)r$   ri   r   s    r   ri   z%IPythonConsole.set_spyder_breakpoints\  s$    0022222r   c                 R    |                                                                   dS )z
        Restart the console.

        This is needed when we switch projects to update PYTHONPATH
        and the selected interpreter.
        N)r$   restartr   s    r   r  zIPythonConsole.restart`  s&     	!!#####r   c                 R    |                                                                   dS )ze
        Restart the current client's kernel.

        Returns
        -------
        None.
        N)r$   restart_kernelr   s    r   r  zIPythonConsole.restart_kerneli  s&     	((*****r   c                 R    |                                                                   dS )zShow intro to IPython help.N)r$   
show_intror   s    r   r!  zIPythonConsole.show_introt  s$    $$&&&&&r   c                 R    |                                                                   dS )zShow qtconsole help.N)r$   show_guirefr   s    r   r#  zIPythonConsole.show_guirefx  s$    %%'''''r   c                 R    |                                                                   dS )zShow IPython Cheat Sheet.N)r$   show_quickrefr   s    r   r%  zIPythonConsole.show_quickref|  s$    '')))))r   )F)Tr   FFFN)NNN)NNT)r   FFTFFT)r   )TF)T)j__name__
__module____qualname____doc__NAMEr   ConsolerA   REQUIRESrd   HistoryrJ   ry   r   r   OPTIONALTABIFYr   WIDGET_CLASSCONF_SECTIONr   CONF_WIDGET_CLASS	CONF_FILEDISABLE_ACTIONS_WHEN_HIDDENRAISE_AND_FOCUSr   r,   r%   r*   r'   r-   r.   r+   r/   dictr0   objectr1   r2   r3   r4   r5   r6   r7   r8   staticmethodr   r   r!   r=   r   rE   rb   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   rf   r{   r}   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   rk   rm   ro   r   rr   r  r  r	  r  rt   r  r  r   r   r  r   ri   r  r  r!  r#  r%  r   r   r   r   r      s'         D!45H1A '";(*H oF'LL0I"'O '-fS#&6&6#
 #F3KK  %fc3_sCd6KLL" 6#;;L #F4..
 %fVnn %fVnn %fVnn ,26&>>( '-fSkk# &,VC%6%6"
   %+F3KK! $ $ \$$ $ $3 3 3% % %8  34446 6 546
  0111,
 ,
 21,
\ ///' ' 0/'"  0111E E 21E
  8999) ) :9)
  9:::L L ;:L w23338 8 438
 w/000  10 w~...' ' /.'" w/000H H 10H
 w7888) ) 98)
 w8999O O :9O7 7 75 5 5 5
1 1 1
F F F0 0 0
; ; ;  *! ! !*L L L") ) )4 4 46 6 6; ; ;@ @ @" INEI## ## ## ##JP P P P" BF7;9 9 9 96? ? ?	8 	8 	8D D D D 9>59<A#'. . . .b ,5       D6 6 6:- - - -0M M M M
+ + +
1 1 15 5 5H H H$1 1 1J J J9 9 9  
T#YY	: 	: Y	:5 5 5@ @ @(3 3 3$ $ $+ + +' ' '( ( (* * * * *r   r   )r)  r   os.pathr   r   qtpy.QtCorer   r   spyder.api.pluginsr   r   )spyder.api.plugin_registration.decoratorsr   r   spyder.api.translationsr
   &spyder.plugins.ipythonconsole.confpager   1spyder.plugins.ipythonconsole.widgets.main_widgetr   r   spyder.plugins.mainmenu.apir   r   r   spyder.utils.programsr   r   r   r   r   <module>rB     sW   
 
			       % $ $ $ $ $ $ $ = < < < < < < <- - - - - - - - % % % % % % K K K K K K< < < < < < < <> > > > > > > > > > . . . . . ._* _* _* _* _*) _* _* _* _* _*r   