
    Jet                         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y)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@d@dZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId  ZJd! ZKd" ZLd# ZM	 	 dAd%ZNd@d&ZO	 	 dBd'ZPd( ZQd) ZRdCd*ZS	 	 	 	 dDd+ZT	 dEd,ZUd- ZVdFd.ZWdGd/ZXd0 ZYd1 ZZd2 Z[d3 Z\d4 Z]d5 Z^d6 Z_ e`e      d7        Zad8 Zbd9 Zcd: Zdd; Zed< Zfd= Zgd> Zhd? Ziy$)HIPythonConsoleza
    IPython Console plugin

    This is a widget with tabs where each one is a ClientWidget
    ipython_consoleFTc                      t        d      S NzIPython consoler	        F/usr/lib/python3/dist-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                 $    | j                  d      S )Nr   )create_iconr   s    r   get_iconzIPythonConsole.get_icon   s     122r   c                    | j                         }|j                  j                  | j                         |j                  j                  | j                         |j                  j                  | j
                         |j                  j                  | j                         |j                  j                  | j                         |j                  t        t        t        t        f   j                  | 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                  | j$                         |j&                  j                  | j&                         |j(                  j                  | j(                         | j                  j                  | j*                  j,                         | j/                          y 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0	2  (()?)?@--55d6K6KL$$,,T-G-GH&&..t/K/KL&&sCd':;CC((c3)<=	?##D$5$56$$,,T-G-GH&&..t/K/KL&&..t/K/KL&&..t/K/KL33;;55	7..6600	2--55//	1!!))$*A*AB,,44..	0 	&&tyy'E'EF""$r   )pluginc                 d    | j                  t        j                        }|j                  |        y r#   )
get_pluginr   Preferencesregister_plugin_preferencesr   preferencess     r   on_preferences_availablez'IPythonConsole.on_preferences_available   s&     oog&9&9://5r   c                     | j                         }| j                  t        j                        }|j	                  t
        j                        }|j                  j                  |j                         |j                  |j                  |j                  g}|j                  |j                  |j                  g}|D ]2  }|j!                  |t
        j                  t"        j$                         4 |D ]2  }|j!                  |t
        j                  t"        j&                         4 |j!                  | j                         j(                  t
        j*                  t,        j.                  t,        j0                         y )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   sW   "??7#3#34  44%%'  ((!!	#
 ''''++ 
 ##!!,
( #7 	11"(11,00 2 	 ? 	N11(11,44 2 	 	--OO**$))$::+11	 	. 	
r   c                 T   | j                  t        j                        }| 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&                         | j(                  j	                  |j*                         |j,                  j	                  | j.                         |j0                  j	                  | j2                         y 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$$,,V[[9$$S#sD%89AA%%	'!!&**-  (()D)DE''//@$$,,T]];&&..t? 	""**6+B+BC!!))$*<*<=//77%%	'r   c                     | j                  t        j                        }|j                  j	                  | j
                         |j                  j	                  | j                         y 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@  sJ    ??7#3#34##++D,C,CD##++D,C,CDr   c                     | j                  t        j                        }|j                  j	                  | j
                         y r#   )r@   r   WorkingDirectoryr8   r&   save_working_directoryr   working_directorys     r   on_working_directory_availablez-IPythonConsole.on_working_directory_availableF  s4     OOG,D,DE77??''	)r   c                     | j                  t        j                        }|j                  j	                  | j
                         y r#   )r@   r   PythonpathManagersig_pythonpath_changedr&   update_pathr   pythonpath_managers     r   on_pythonpath_manager_availablez.IPythonConsole.on_pythonpath_manager_availableL  s1    !__W-F-FG1199$:J:JKr   c                 d    | j                  t        j                        }|j                  |        y r#   )r@   r   rA   deregister_plugin_preferencesrC   s     r   on_preferences_teardownz&IPythonConsole.on_preferences_teardownQ  s&     oog&9&9:11$7r   c                     | j                  t        j                        }|j                  t        j
                         |j                  t        j                  t        j                         y )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  sR    ??7#3#34(()9)B)BC 	22,::$)) 	3 	r   c                 T   | j                  t        j                        }| 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&                         | j(                  j	                  |j*                         |j,                  j	                  | j.                         |j0                  j	                  | j2                         y 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$$//<$$S#sD%89DD%%	'$$VZZ0  ++D,G,GH''224??C$$//>&&11$//B 	""--f.E.EF!!,,T-?-?@//::%%	'r   c                     | j                  t        j                        }|j                  j	                  | j
                         |j                  j	                  | j                         y r#   )r@   r   ry   rz   r   r{   r|   r}   r~   s     r   on_projects_teardownz#IPythonConsole.on_projects_teardownt  sJ    ??7#3#34##..t/F/FG##..t/F/FGr   c                     | j                  t        j                        }|j                  j	                  | j
                         y r#   )r@   r   r   r8   r   r   r   s     r   on_working_directory_teardownz,IPythonConsole.on_working_directory_teardownz  s4     OOG,D,DE77BB''	)r   c                     | j                  t        j                        }|j                  j	                  | j
                         y r#   )r@   r   r   r   r   r   r   s     r   on_pythonpath_manager_teardownz-IPythonConsole.on_pythonpath_manager_teardown  s1    !__W-F-FG11<<T=M=MNr   c                     | j                         }| j                  d      }| j                         j                  ||       y)zUpdate font from PreferencesT)	rich_textN)get_fontr$   update_font)r   font	rich_fonts      r   r   zIPythonConsole.update_font  s4    }}MMDM1	%%dI6r   c                 h    d| j                         _        | j                         j                         S )z%Perform actions when plugin is closedT)r$   mainwindow_closeclose_all_clients)r   
cancelables     r   on_closezIPythonConsole.on_close  s'    -1* 2244r   c                 (    | j                  d       y )NF)
give_focus)create_new_clientr   s    r   on_mainwindow_visiblez$IPythonConsole.on_mainwindow_visible  s    %0r   c                 l    | j                  t        j                        }|j                  ||||       y )N)processevents)r@   r   rd   re   )r   fnamelinenowordr   rv   s         r   rf   z#IPythonConsole._load_file_in_editor  s(    0E64}Er   c                     | j                  t        j                        }| j                         j	                  |j                                y r#   )r@   r   ry   r$   update_active_project_pathget_active_project_pathr~   s     r   r{   z!IPythonConsole._on_project_loaded  s7    ??7#3#3444,,.	0r   c                 B    | j                         j                  d        y r#   )r$   r   r   s    r   r}   z!IPythonConsole._on_project_closed  s    44T:r   c                    t         j                  dk(  rjt               }t        j                  |      D ]G  }t	        j
                  |      d   dv s	 t        j                  t	        j                  ||             I yy# t        $ r Y Ww xY w)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  sz     77d?!^FF+ <<&q)-MM		#((65"9:  % s   )A??	B
Bc                 D    | j                         j                  ||       y)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  s    $ 	==	!r   c                 B    | j                         j                  |       y)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     	??
Kr   c                 6    | j                         j                  S )zReturn clients list)r$   clientsr   s    r   get_clientszIPythonConsole.get_clients  s     (((r   c                 >    | j                         j                         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3r   c                 >    | j                         j                         S )z$Return the currently selected client)r$   get_current_clientr   s    r   r   z!IPythonConsole.get_current_client  s     3355r   c                 >    | j                         j                         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                 D    | j                         j                  ||       y)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                 N    | j                         j                  ||||||       y)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  s0    : 	++!! 	, 	#r   c                 F    | j                         j                  ||       y)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Or   c                 H    | j                         j                  ||||       y)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  s"    0 	22Xvx	9r   c                 @    | j                         j                  |      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                 B    | j                         j                  |       y)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$7r   c                 H    | j                         j                  |||       y)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r   c
                     | j                   j                          | j                         j                  |||||||||		       y)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  sG    H 	,,113$$		r   c                     | j                   j                          | j                         j                  ||||||       y)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  s>    : 	,,113"")X}o 	# 	r   c                 ~    | j                   j                          | j                         j                  |||||       y)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  s6    2 	,,113$$T9h%4	6r   c                 H    | j                         j                  |||       y)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                   j                          | j                         j                  ||        y)z.Execute selected lines in the current console.)	set_focusN)r   r   r$   r   )r   r   r   s      r   rr   zIPythonConsole.run_selection  s1    ,,113&&uO8K&Lr   c                 t    | j                   j                          | j                         j                          y)z&Stop debugging in the current console.N)r   r   r$   stop_debuggingr   s    r   r  zIPythonConsole.stop_debugging  s'    ,,113((*r   c                 >    | j                         j                         S )z+Get debugging state of the current console.)r$   get_pdb_stater   s    r   r  zIPythonConsole.get_pdb_state  s     ..00r   c                 >    | j                         j                         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4r   c                 x    | j                   j                          | j                         j                  ||       y)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--gGr   c                 @    | j                         j                          y)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     	..0r   c                 B    | j                         j                  |       y)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Ir   c                 B    | j                         j                  |       y)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     	//8r   c                 B    | j                         j                  |       y)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9r   c                 @    | j                         j                          y)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4r   c                 D    | j                         j                  ||       y)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                 @    | j                         j                          y)z'Set Spyder breakpoints into all clientsN)r$   ri   r   s    r   ri   z%IPythonConsole.set_spyder_breakpoints\  s    002r   c                 @    | j                         j                          y)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                 @    | j                         j                          y)ze
        Restart the current client's kernel.

        Returns
        -------
        None.
        N)r$   restart_kernelr   s    r   r  zIPythonConsole.restart_kerneli  s     	((*r   c                 @    | j                         j                          y)zShow intro to IPython help.N)r$   
show_intror   s    r   r  zIPythonConsole.show_introt  s    $$&r   c                 @    | j                         j                          y)zShow qtconsole help.N)r$   show_guirefr   s    r   r!  zIPythonConsole.show_guirefx  s    %%'r   c                 @    | j                         j                          y)zShow IPython Cheat Sheet.N)r$   show_quickrefr   s    r   r#  zIPythonConsole.show_quickref|  s    '')r   )F)T FFFN)NNN)NNT)r$  FFTFFT)runcell)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!45H1A1A  '";";((*H ooF'LL0I"'O '-S#&6#
 #3K  %c3_sCd6KL" #;L #4.
 %Vn %Vn %Vn ,2&>( '-Sk# &,C%6"
   %+3K! $ $$3%8  3 346 56
  0 01,
 2,
\ /' 0'"  0 01E 2E
  8 89) :)
  9 9:L ;L w2238 48
 w//0 1 w~~.' /'" w//0H 1H
 w778) 9)
 w889O :O75
1
F0
;*!*L")46;@" INEI##JP" BF7;96?	8D 9>59<A#'.b ,5 D6:-0M
+
15H$1J9  
#Y	: 	:5@(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     sH   
 
  % =- % K<> > ._*) _*r   