
    xd                        d 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 n# e$ r dZY nw xY wej        j        Zdej        d         z  Z eej                            e          d	          ZddZddZddZddeddddfdZddlmZ  G d de          Zedk    re                                 dS dS )z#The IPython kernel spec for Jupyter    N)KernelSpecManager)Unicode   )_is_debugpy_availableFzpython%i	resourcesipykernel_launcherc                 b    |t           j        }|pg }|d| ddg}|                    |           |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
    Nz-mz-fz{connection_file})sys
executableextend)modr   extra_arguments	argumentss       4lib/python3.11/site-packages/ipykernel/kernelspec.pymake_ipkernel_cmdr      sF      ^
%+OT3.ABI_%%%    c                 `    t          |           dt          j        d         z  ddt          idS )zConstruct dict for kernel.jsonr   zPython %i (ipykernel)r   pythondebugger)argvdisplay_namelanguagemetadata)r   r
   version_infor   r   s    r   get_kernel_dictr   7   s=     "/BBB/#2B12EE!67	  r   c                 (   | 8t           j                            t          j        d          t
                    } t          j        t          |            t          j	        |           j
        }|t          j        z  s"t          j        | |t          j        z             t          |          }|r|                    |           t          t!          | d          d          5 }t#          j        ||d           ddd           n# 1 swxY w Y   | S )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wr   )indent)ospathjointempfilemkdtempKERNEL_NAMEshutilcopytree	RESOURCESstatst_modeS_IWUSRchmodr   updateopenpjoinjsondump)r#   	overridesr   maskkernel_dictfs         r   write_kernel_specr8   A   s/    |w||H,J???MM OIt$$$ 74== D$, ,
tdl*+++ "/22K &9%%%	eD-((#	.	. ,!	+q++++, , , , , , , , , , , , , , , Ks   #DDDc                 *   | t                      } |t          k    r||}i }|r||d<   |r!d|g}|sdt          j        d         |fz  |d<   nd}|r||d<   t	          ||          }	|                     |	|||          }
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

    Returns
    -------
    The path where the kernelspec was installed.
    Nr   	--profilezPython %i [profile=%s]r   env)r4   r   )kernel_nameuserprefix)r   r'   r
   r   r8   install_kernel_specr(   rmtree)kernel_spec_managerr=   r<   r   r>   profiler;   r4   r   r#   dests              r   installrD   _   s    J "/11{"")= #I 1$0	.! &0 	b(@CDTUVDWY`Ca(aIn%
 	%y/RRRD22+D 3  D M$Kr   )Applicationc                   6    e Zd ZdZ ed          ZddZd ZdS )InstallIPythonKernelSpecAppzDummy app wrapping argparsezipython-kernel-installNc                 @    |t           j        dd         }|| _        dS )zInitialize the app.Nr   )r
   r   )selfr   s     r   
initializez&InstallIPythonKernelSpecApp.initialize   s!    <8ABB<D			r   c                    ddl }|                    | j        d          }|                    ddd           |                    d	t          t
          d
           |                    dt          d           |                    dt          d           |                    dt          d           |                    ddt          j        ddt          j        z             |                    ddddd           |                    | j	                  }|j
        rt          |j
                  |_
        	 t          |j        |j        |j        |j        |j        |j
                  }nz# t           $ rm}|j        t"          j        k    rRt'          |t          j                   |j        rt'          d t          j                   |                     d!            d}~ww xY wt'          d"|j         d#|            dS )$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defaultrP   z--display-namezdSpecify the display name for the kernelspec. This is helpful when you have multiple IPython kernels.)rQ   rP   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_constr>   z[Install to Python's sys.prefix. Shorthand for --prefix='%s'. For use in conda/virtual-envs.)rO   constrC   rP   z--envappend   )ENVVALUEz)Set environment variables for the kernel.)rO   nargsmetavarrP   )r=   r<   rB   r>   r   r;   )filez$Perhaps you want `sudo` or `--user`?r   zInstalled kernelspec z in )argparseArgumentParsernameadd_argumentstrr'   r
   r>   
parse_argsr   r;   dictrD   r=   rB   r   OSErrorerrnoEACCESprintstderrexit)rI   r\   parseroptsrC   es         r   startz!InstallIPythonKernelSpecApp.start   s{   (((J ) 
 
 	F 	 	
 	
 	

 	Q	 	 	
 	
 	
 	G 	 	
 	
 	
 	H 	 	
 	
 	
 	c 	 	
 	
 	
 	 *KMPZX 	 	
 	
 	
 	$< 	 	
 	
 	
   ++8 	&DH~~DH	Y I{!.H  DD  	 	 	w%,&&acj))))9 S@szRRRR		!	 	;di;;T;;<<<<<s   93E- -
G$7A(GG$N)__name__
__module____qualname____doc__r   r^   rJ   rl    r   r   rG   rG      sR        %%7+,,D   G= G= G= G= G=r   rG   __main__)r   NNrm   )NNN) rq   rd   r2   r"   r(   r+   r
   r%   jupyter_client.kernelspecr   	traitletsr   r   r   ImportErrorr#   r$   r1   r   r'   dirname__file__r*   r   r   r8   rD   traitlets.configrE   rG   rn   launch_instancerr   r   r   <module>r{      s   ) )
   				   



  7 7 7 7 7 7      "/////// " " "!" 	3+A.. E"'//(++[99	   2      > 	> > > >F ) ( ( ( ( (R= R= R= R= R=+ R= R= R=j z//11111 s   3 ==