
    XhP&                       d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ej*                  j,                  Zd	e	j0                  d   z  Z e ee      j6                  d
      Z	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 ddZ	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZddedddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ  G d de      Z!e"dk(  re!jG                          yy)z#The IPython kernel spec for Jupyter    )annotationsN)Path)Any)KernelSpecManager)Unicode)Applicationzpython%i	resourcesc                \    |t         j                  }|xs g }|xs g }|g|d| dd|S )a  Build Popen command list for launching an IPython kernel.

    Parameters
    ----------
    mod : str, optional (default 'ipykernel')
        A string of an IPython module whose __main__ starts an IPython kernel
    executable : str, optional (default sys.executable)
        The Python executable to use for the kernel process.
    extra_arguments : list, optional
        A list of extra arguments to pass when executing the launch code.

    Returns
    -------
    A Popen command list
    z-mz-fz{connection_file})sys
executable)modr   extra_argumentspython_argumentss       H/var/www/html/myenv/lib/python3.12/site-packages/ipykernel/kernelspec.pymake_ipkernel_cmdr      sR    * ^^
%+O'-2b)b4bbdb<ObRabb    c                R    t        | |      dt        j                  d   z  dddidS )zConstruct dict for kernel.jsonr   r   zPython %i (ipykernel)r   pythondebuggerT)argvdisplay_namelanguagemetadata)r   r   version_infor   s     r   get_kernel_dictr   ;   s<    
 "+>N
 0#2B2B12EE& r   c                6   | &t        t        j                  d            t        z  } t	        j
                  t        |        t        |       j                         j                  }|t        j                  z  s+t        |       j                  |t        j                  z         t        ||      }|r|j                  |       t        t        | d      d      5 }t        j                   ||d       ddd       t#        |       S # 1 sw Y   t#        |       S xY w)zWrite a kernel spec directory to `path`

    If `path` is not specified, a temporary directory is created.
    If `overrides` is given, the kernelspec JSON is updated before writing.

    The path to the kernelspec is always returned.
    N_kernels)suffixzkernel.jsonw   )indent)r   tempfilemkdtempKERNEL_NAMEshutilcopytree	RESOURCESstatst_modeS_IWUSRchmodr   updateopenpjoinjsondumpstr)path	overridesr   r   maskkernel_dictfs          r   write_kernel_specr8   I   s     |H$$J78;F OOIt$ :??$$D$,,T
,- "/3CDK9%	eD-(#	. ,!		+q+, t9, t9s   DDFc                   | 
t               } |i }|t        k7  r||}i }|r||d<   |r"d|g}	|sdt        j                  d   |fz  |d<   nd}	d}
t        j                  dk\  r&t	        j
                         dk(  r|sdg}
n	d	|vrd
|d	<   |r||d<   t        ||	|
      }| j                  ||||      }t        j                  |       |S )a  Install the IPython kernelspec for Jupyter

    Parameters
    ----------
    kernel_spec_manager : KernelSpecManager [optional]
        A KernelSpecManager to use for installation.
        If none provided, a default instance will be created.
    user : bool [default: False]
        Whether to do a user-only install, or system-wide.
    kernel_name : str, optional
        Specify a name for the kernelspec.
        This is needed for having multiple IPython kernels for different environments.
    display_name : str, optional
        Specify the display name for the kernelspec
    profile : str, optional
        Specify a custom profile to be loaded by the kernel.
    prefix : str, optional
        Specify an install prefix for the kernelspec.
        This is needed to install into a non-default location, such as a conda/virtual-env.
    env : dict, optional
        A dictionary of extra environment variables for the kernel.
        These will be added to the current environment variables before the
        kernel is started
    frozen_modules : bool, optional
        Whether to use frozen modules for potentially faster kernel startup.
        Using frozen modules prevents debugging inside of some built-in
        Python modules, such as io, abc, posixpath, ntpath, or stat.
        The frozen modules are used in CPython for faster interpreter startup.
        Ignored for cPython <3.11 and for other Python implementations.

    Returns
    -------
    The path where the kernelspec was installed.
    Nr   	--profilezPython %i [profile=%s]r   )      CPythonz-Xfrozen_modules=offPYDEVD_DISABLE_FILE_VALIDATION1env)r4   r   r   )kernel_nameuserprefix)
r   r%   r   r   platformpython_implementationr8   install_kernel_specr&   rmtree)kernel_spec_managerrB   rA   r   rC   profiler@   frozen_modulesr4   r   r   r3   dests                r   installrL   l   s   X "/1
{{")= # "I$0	.!&0(@CDTDTUVDWY`Ca(aIn% 7"x'E'E'G9'T 67-S8 58C01
	%_O_D 22+D 3 D MM$Kr   c                  2    e Zd ZdZ ed      ZdddZddZy)	InstallIPythonKernelSpecAppzDummy app wrapping argparsezipython-kernel-installNc                <    |t         j                  dd }|| _        y)zInitialize the app.Nr!   )r   r   )selfr   s     r   
initializez&InstallIPythonKernelSpecApp.initialize   s    <88AB<D	r   c                N   ddl }|j                  | j                  d      }|j                  ddd       |j                  d	t        t
        d
       |j                  dt        d       |j                  dt        d       |j                  dt        d       |j                  ddt        j                  ddt        j                  z         |j                  ddddd       |j                  ddd       |j                  | j                        }|j                  rt        |j                        |_
        	 t        |j                  |j                  |j                  |j                  |j                  |j                         }t'        d$|j                   d%|        y# t         $ rv}|j"                  t"        j$                  k(  rSt'        |t        j(                  !       |j                  rt'        d"t        j(                  !       | j+                  d#        d}~ww xY w)&zStart the app.r   Nz Install the IPython kernel spec.)progdescriptionz--user
store_truez3Install for the current user instead of system-wide)actionhelpz--namezdSpecify a name for the kernelspec. This is needed to have multiple IPython kernels at the same time.)typedefaultrW   z--display-namezdSpecify the display name for the kernelspec. This is helpful when you have multiple IPython kernels.)rX   rW   r:   z]Specify an IPython profile to load. This can be used to create custom versions of the kernel.z--prefixzSpecify an install prefix for the kernelspec. This is needed to install into a non-default location, such as a conda/virtual-env.z--sys-prefixstore_constrC   z[Install to Python's sys.prefix. Shorthand for --prefix='%s'. For use in conda/virtual-envs.)rV   constrK   rW   z--envappend   )ENVVALUEz)Set environment variables for the kernel.)rV   nargsmetavarrW   z--frozen_moduleszEnable frozen modules for potentially faster startup. This has a downside of preventing the debugger from navigating to certain built-in modules.)rB   rA   rI   rC   r   r@   )filez$Perhaps you want `sudo` or `--user`?r!   zInstalled kernelspec z in )argparseArgumentParsernameadd_argumentr2   r%   r   rC   
parse_argsr   r@   dictrL   rB   rI   r   OSErrorerrnoEACCESprintstderrexit)rP   rc   parseroptsrK   es         r   startz!InstallIPythonKernelSpecApp.start   s   (((J ) 
 	F 	 	

 	Q	 	 	
 	G 	 	
 	H 	 	
 	c 	 	
 	 **KMPZZX 	 	
 	$< 	 	
 	k 	 	
   +88DHH~DH	YY II{{!..HHD 	%dii[TF;<  	ww%,,&acjj)99@szzR		!	s   <AF% %	H$.A1HH$)N)r   list[str] | NonereturnNone)rt   ru   )__name__
__module____qualname____doc__r   re   rQ   rr    r   r   rN   rN      s    %+,DM=r   rN   __main__)ipykernel_launcherNNN)
r   r2   r   
str | Noner   rs   r   rs   rt   z	list[str])NN)r   rs   r   rs   rt   zdict[str, Any])NNNN)
r3   zPath | str | Noner4   zdict[str, Any] | Noner   rs   r   rs   rt   r2   )rH   zKernelSpecManager | NonerB   boolrA   r2   r   r}   rC   r}   rI   r}   r@   zdict[str, str] | NonerJ   r~   rt   r2   )$ry   
__future__r   rj   r0   osrD   r&   r)   r   r#   pathlibr   typingr   jupyter_client.kernelspecr   	traitletsr   traitlets.configr   r3   joinr/   r   r%   __file__parentr(   r   r   r8   rL   rN   rv   launch_instancerz   r   r   <module>r      s   )
 #   	    
    7  (
3++A.. $x.''5	 $!(,)-	c	cc &c '	c
 c: TX%@P #'+(,)-	 
 $  &  '	 
 	 H 59"#!% W1W
W W 	W
 W W 
W W 	WzX=+ X=v z//1 r   