o
    tfeC                     @   s2  d Z ddlZddlZddlZddlmZ ddlmZ ejdkrGej	Z
dd Zedd	 Zee_	zdd
lmZ ejd W n	 eyF   Y nw ddlmZmZ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m Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5 dZ6e7e.Z8ddddiidfiZ9e9:eddd d! e9:e3 e8:e9 e7e/Z;e7d"d#d$d%d&Z<e<:e2 e<:d'd(i e;:e< e=e<> Z<e=e9> Z9G d)d de-e1Z?G d*d+ d+e?Z@d,d- ZAeBd.kreA  dS dS )/z A minimal application using the Qt console-style Jupyter frontend.

This is not a complete console app, as subprocess will not be able to receive
input, there is no real readline support, among other limitations.
    N)warn)parsentc                 C   s   | S N )funcr   r   _/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/qtconsole/qtconsoleapp.py<lambda>&       r	   c              
   C   sb   z)dd l }dd l}d}d}d|| ||}|jjd||| W t| || d S t| || w )Nr      zError starting QtConsole )ctypes	tracebackjoinformat_exceptionwindllZuser32ZMessageBoxWold_excepthook)exctypevaluetbr   r   ZMB_ICONERRORtitlemsgr   r   r   gui_excepthook(   s   r   )r   zJupyter.Qtconsole)QtCoreQtGui	QtWidgets
QT_VERSION)boolean_flag)catch_config_error)JupyterWidget)RichJupyterWidget)styles__version__)
MainWindow)QtKernelClient)QtKernelManager)DictUnicodeCBoolAny)
JupyterApp
base_flagsbase_aliases)JupyterConsoleAppapp_aliases	app_flags)is_local_ipz>
jupyter qtconsole                      # start the qtconsole
plainJupyterQtConsoleAppTzDisable rich text support.Zbannerz"JupyterQtConsoleApp.display_bannerz-Display a banner upon starting the QtConsole.z3Don't display a banner upon starting the QtConsole.JupyterWidget.syntax_stylezJupyterQtConsoleApp.stylesheetzJupyterWidget.editorzConsoleWidget.paging)style
stylesheetZeditorZpagingzgui-completionzConsoleWidget.gui_completionc                       s  e Zd ZdZeZdZeZe	ge
j ZeeZeeZeeZeeZeZeZeddddZeddddZeddd	dZeddd
dZeddddZdd Zee Z!d' fdd	Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd  Z*d!d" Z+e,d' fd#d$	Z- fd%d&Z.  Z/S )(r2   jupyter-qtconsolez
        The Jupyter QtConsole.

        This launches a Console-style application using Qt.  It is not a full
        console, in that launched terminal subprocesses will not be able to accept
        input.

    r   Tzpath to a custom CSS stylesheet)confighelpFz2Start the console window with the menu bar hidden.z#Start the console window maximized.zEUse a plaintext widget instead of rich text (plain can't print/save).z8Whether to display a banner upon starting the QtConsole.c                 C   s.   |rdnd}|| j j_|rt| _d S t| _d S )Nr1   rich)r7   ZConsoleWidgetkindr   widget_factoryr    )selfnameoldnewr:   r   r   r   _plain_changed   s
   


z"JupyterQtConsoleApp._plain_changedNc                    s   t  | | | j d S r   )superparse_command_lineZbuild_kernel_argv
extra_args)r<   argv	__class__r   r   rB      s   z&JupyterQtConsoleApp.parse_command_linec                 C   s   | j |  | dd}i }| jr| jjr| j|d< |jdi | | j|_| }|j	ddd | j
| jdd}| | ||_||_d|_d|_| j|_| j|_|S )	zW Create and return new frontend attached to new kernel, launched on localhost.
        T)connection_fileparentZautorestartZextra_arguments)shellZiopubr7   local_kernelFNr   )kernel_manager_classZ_new_connection_filekernel_managerZ	ipykernelZkernel_argvZstart_kernelkernel_client_classZclient_factoryclientstart_channelsr;   r7   init_colorskernel_client	_existing
_may_closeconfirm_exit_confirm_exitdisplay_banner_display_banner)r<   rM   kwargsrR   widgetr   r   r   new_frontend_master   s.   

z'JupyterQtConsoleApp.new_frontend_masterc                 C   sd   | j || jd}|  |  | j| jdd}| | d|_d|_d|_| j	|_
||_d|_|S )zCreate and return a new frontend attached to an existing kernel.

        Parameters
        ----------
        connection_file : str
            The connection_file path this frontend is to connect to
        rG   r7   FrJ   TN)rN   r7   load_connection_filerP   r;   rQ   rS   rT   rV   rW   rX   rR   rM   )r<   rG   rR   rZ   r   r   r   new_frontend_connection   s"   
z+JupyterQtConsoleApp.new_frontend_connectionc                 C   sj   | j |jj| jd}|  |  | j| jdd}| | d|_d|_	d|_
| j|_||_|j|_|S )zCreate and return a new frontend attached to an existing kernel.

        Parameters
        ----------
        current_widget : JupyterWidget
            The JupyterWidget whose kernel this frontend is to share
        r\   FrJ   T)rN   rR   rG   r7   r]   rP   r;   rQ   rS   rT   rV   rW   rX   rM   )r<   Zcurrent_widgetrR   rZ   r   r   r   new_frontend_slave   s"   
z&JupyterQtConsoleApp.new_frontend_slavec                 C   s<   t j d u rt dg| _| jd d S t j | _d S )Nr6   )r   QApplicationinstanceappZsetApplicationNamer<   r   r   r   init_qt_app  s   zJupyterQtConsoleApp.init_qt_appc                 C   s&  t jt jt}t j|ddd}t|| j_	t
j| jj	 | j}| j p,t|}| j| j|d| _| | j | j| j_| j | j_| j| j_| j| j_| j| j_| j| j_t| j| j| j| j| jd| _ | j!| j _!| j "| j | j #  t$j%dkr| j&r| j ' (d | j )d d S )	N	resourcesiconzJupyterConsole.svgrJ   )rU   Znew_frontend_factoryZslave_frontend_factoryZconnection_frontend_factorydarwinFzJupyter QtConsole)*ospathabspathdirname__file__r   r   ZQIconrb   rf   r   r`   ZsetWindowIconipexistingr0   r;   r7   rZ   rQ   rS   rT   rU   rV   rW   rX   rM   rR   r#   r[   r_   r^   windowlogZadd_tab_with_frontendZinit_menu_barsysplatformhide_menubarZmenuBarZ
setVisibleZsetWindowTitle)r<   	base_pathZ	icon_pathrm   rK   r   r   r   init_qt_elements  s8   






z$JupyterQtConsoleApp.init_qt_elementsc                 C   sF  | j }d|v r|jjnd}d|v r|jjnd}d|v r|jjnd}|r8| }|dv r.d}n |dv r5d}nd	}n|rL|d
krAd	}nt|rId}nd}nd}|rct	|||_||_|
  |  n|rk|j|d | jrtj| jrt| j}| }W d   n1 sw   Y  ntd| j |r||_|  dS dS )z$Configure the coloring of the widgetzZMQInteractiveShell.colorsNr3   zJupyterWidget.style_sheet)lightbgZlightrv   )Zdarklinuxrw   Znocolorbw)colorszStylesheet %r not found.)r7   ZMQInteractiveShellry   r   Zsyntax_styleZstyle_sheetlowerr!   Z
dark_styleZsheet_from_templateZ_syntax_style_changedZ_style_sheet_changedZset_default_styler5   rh   ri   isfileopenreadIOError)r<   rZ   cfgry   r4   Zsheetfr   r   r   rQ   1  sH   


zJupyterQtConsoleApp.init_colorsc                    sB   t  t j fdd t }|jdd  |d | _dS )zallow clean shutdown on sigintc                    s
     dS )N)exit)sigframerc   r   r   r	   g  s   
 z1JupyterQtConsoleApp.init_signal.<locals>.<lambda>c                   S   s   d S r   r   r   r   r   r   r	   m  r
      N)signalSIGINTr   ZQTimertimeoutconnectstartZ_sigint_timer)r<   timerr   rc   r   init_signale  s
   

zJupyterQtConsoleApp.init_signalc              
      sZ    |v r+| j d| d fdd| j   D  | }|| |   |S dS )zWarn about deprecated config.z1Use %s in config, not %s. Outdated config:
    %sz
    c                 3   s$    | ]\}}d j || dV  qdS )z{name}.{key} = {value!r})keyr   r=   N)format).0r   r   old_namer   r   	<genexpr>x  s    
z8JupyterQtConsoleApp._deprecate_config.<locals>.<genexpr>N)rp   warningr   r7   itemscopymerge)r<   r   r   new_namer   r   r   _deprecate_configr  s   	z%JupyterQtConsoleApp._deprecate_configc                 C   st   t jdr4t jdkr6ddl}z
ddlm}m} W n
 ty#   Y dS w t|	 |u r8|
|  dS dS dS dS )a  
        Same workaround fix as https://github.com/ipython/ipykernel/pull/456

        Set default asyncio policy to be compatible with tornado
        Tornado 6 (at least) is not compatible with the default
        asyncio implementation on Windows
        Pick the older SelectorEventLoopPolicy on Windows
        if the known-incompatible default policy is in use.
        do this as early as possible to make it a low priority and overrideable
        ref: https://github.com/tornadoweb/tornado/issues/2608
        FIXME: if/when tornado supports the defaults in asyncio,
               remove and bump tornado requirement for py38
        win)      r   N)WindowsProactorEventLoopPolicyWindowsSelectorEventLoopPolicy)rq   rr   
startswithversion_infoasyncior   r   ImportErrortypeget_event_loop_policyset_event_loop_policy)r<   r   r   r   r   r   r   _init_asyncio_patch  s   z'JupyterQtConsoleApp._init_asyncio_patchc                    s   t jdkrtd}tt}||k rdtjd< |   |   t 	| | j
r)d S dD ]\}}| | j||}|r>| | q+t	| | |   |   d S )Nrg   z5.15.21ZQT_MAC_WANTS_LAYER))IPythonQtConsoleAppZJupyterQtConsole)ZIPythonWidgetr   )ZRichIPythonWidgetr    )rq   rr   r   r   rh   environr   rd   rA   
initializeZ_dispatchingr   r7   Zupdate_configr-   ru   r   )r<   rD   Zv_5_15_2Z	v_currentr   r   r   rE   r   r   r     s$   


zJupyterQtConsoleApp.initializec                    s>   t    | jr| j  n| j  | j  | j  d S r   )	rA   r   maximizero   ZshowMaximizedshowZraise_rb   exec_rc   rE   r   r   r     s   


zJupyterQtConsoleApp.startr   )0__name__
__module____qualname__r=   r"   versiondescription	_examplesZexamplesr   r-   classesr&   flagsaliasesr)   qt_flagsZfrontend_flags
qt_aliasesZfrontend_aliasesr$   rN   r%   rL   r'   r5   r(   rs   r   r1   rW   r@   r    r;   rB   r[   r^   r_   rd   ru   rQ   r   r   r   r   r   r   __classcell__r   r   rE   r   r2      sT    	$4c                       s   e Zd Z fddZ  ZS )r   c                    s    t dt t j|i | d S )Nz:IPythonQtConsoleApp is deprecated; use JupyterQtConsoleApp)r   DeprecationWarningrA   __init__)r<   akwrE   r   r   r     s   zIPythonQtConsoleApp.__init__)r   r   r   r   r   r   r   rE   r   r     s    r   c                   C   s   t   d S r   )r2   Zlaunch_instancer   r   r   r   main  s   r   __main__)C__doc__rh   r   rq   warningsr   Zpackaging.versionr   r=   
excepthookr   Zundocr   r   r   Zshell32Z'SetCurrentProcessExplicitAppUserModelIDAttributeErrorZqtpyr   r   r   r   Ztraitlets.config.applicationr   r   Zqtconsole.jupyter_widgetr   Zqtconsole.rich_jupyter_widgetr    Z	qtconsoler!   r"   Zqtconsole.mainwindowr#   Zqtconsole.clientr$   Zqtconsole.managerr%   Z	traitletsr&   r'   r(   r)   Zjupyter_core.applicationr*   r+   r,   Zjupyter_client.consoleappr-   r.   r/   Zjupyter_client.localinterfacesr0   r   dictr   r   updater   r   setkeysr2   r   r   r   r   r   r   r   <module>   s    	

	



  I

