
    Mh/=                       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
mZmZmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ej        j        Zd	Z  G d
 de          Z! ej"        dej#                  Z$d*dZ%dZ&d+dZ'd,dZ( G d de)          Z* G d de          Z+d-dZ,d.d Z-	 	 	 	 d/d0d'Z.e+j.        j         e._         d1d2d)Z/e+j/        j         e/_         dS )3zTools for managing kernel specs    )annotationsN)SYSTEM_JUPYTER_PATHjupyter_data_dirjupyter_path)	BoolCaselessStrEnumDict	HasTraitsListSetTypeUnicodeobserve)LoggingConfigurable   )KernelProvisionerFactorypython3c                     e Zd ZU dZ e            Zded<    e            Z e            Z	 e            Z
 e            Z e            Z e            Z eddgd          Z e            Zedd            ZddZddZdS )
KernelSpeczA kernel spec model object.	List[str]argvmessagesignal)default_valueclstype[KernelSpec]resource_dirstrreturnc                    t          |d          }t          |d          5 }t          j        |          }ddd           n# 1 swxY w Y    | dd|i|S )z|Create a KernelSpec object by reading kernel.json

        Pass the path to the *directory* containing kernel.json.
        kernel.jsonzutf-8)encodingNr    )pjoinopenjsonload)r   r   kernel_filefkernel_dicts        Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyter_client/kernelspec.pyfrom_resource_dirzKernelSpec.from_resource_dir%   s     L-88+000 	'A)A,,K	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's<<<<<<s   AA
Adict[str, t.Any]c                T    | j         | j        | j        | j        | j        | j        d}|S )z"Convert the kernel spec to a dict.r   envdisplay_namelanguageinterrupt_modemetadatar/   )selfds     r+   to_dictzKernelSpec.to_dict0   s7     I8 -"1
 
     c                N    t          j        |                                           S )zOSerialise this kernelspec to a JSON object.

        Returns a string.
        )r&   dumpsr7   r5   s    r+   to_jsonzKernelSpec.to_json=   s    
 z$,,..)))r8   N)r   r   r   r   r   r   r   r-   r   r   )__name__
__module____qualname____doc__r   r   __annotations__r   namemimetyper1   r2   r	   r0   r   r   r3   r4   classmethodr,   r7   r<   r#   r8   r+   r   r      s         %%dffD799DwyyH799LwyyH
$&&C799L$_i%:(SSSNtvvH= = = [=   * * * * * *r8   r   z^[a-z0-9._\-]+$rD   r   r   t.Anyc                6    t                               |           S )z"Check that a kernel name is valid.)_kernel_name_patmatchrD   s    r+   _is_valid_kernel_namerL   H   s     !!$'''r8   zuKernel names can only contain ASCII letters and numbers and these separators: - . _ (hyphen, period, and underscore).pathboolc                    t           j                            |           o,t           j                            t	          | d                    S )zIs ``path`` a kernel directory?r!   )osrM   isdirisfiler$   )rM   s    r+   _is_kernel_dirrS   T   s3    7==M27>>%m2L2L#M#MMr8   dir
str | Nonedict[str, str]c                P   | t           j                            |           si S i }t          j        |           D ]k}t	          | |          }t          |          s"|                                }t          |          s!t          j	        dt           d| d           |||<   l|S )zReturn a mapping of kernel names to resource directories from dir.

    If dir is None or does not exist, returns an empty dict.
    Nz#Invalid kernelspec directory name (z):    
stacklevel)rP   rM   rQ   listdirr$   rS   lowerrL   warningswarn_kernel_name_description)rT   kernelsr)   rM   keys        r+   _list_kernels_inrb   Y   s    
 {"'--,,{	GZ__ 
 
S!}}d## 	ggii$S)) 	MY6NYYSWYY    Nr8   c                  "    e Zd ZdZd	dZd
dZdS )NoSuchKernelz7An error raised when there is no kernel of a give name.rD   r   r   Nonec                    || _         dS )zInitialize the error.NrK   )r5   rD   s     r+   __init__zNoSuchKernel.__init__r   s    			r8   c                    d| j          S )NzNo such kernel named rK   r;   s    r+   __str__zNoSuchKernel.__str__v   s    2ty222r8   N)rD   r   r   re   r>   )r?   r@   rA   rB   rg   ri   r#   r8   r+   rd   rd   o   sB        AA   3 3 3 3 3 3r8   rd   c                  r   e Zd ZU dZ eedd          Z eddd          Z e	            Z
d0dZ e	            Zd0d	Z edd
          Z edd          Z ed          Zded<   ddiZ e ee           d1d            Zd2dZd3dZd4dZd5dZd6d Zd7d"Zd8d$Z	 d9d:d*Z	 	 	 	 d;d<d.Z d=d>d/Z!d&S )?KernelSpecManagerzA manager for kernel specs.TzThe kernel spec class.  This is configurable to allow
        subclassing of the KernelSpecManager for customized behavior.
        )confighelpzIf there is no Python kernelspec registered and the IPython
        kernel is available, ensure it is added to the spec list.
        r   r   c                    t                      S )N)r   r;   s    r+   _data_dir_defaultz#KernelSpecManager._data_dir_default   s    !!!r8   c                ,    t          | j        d          S )Nr`   )r$   data_dirr;   s    r+   _user_kernel_dir_defaultz*KernelSpecManager._user_kernel_dir_default   s    T]I...r8   z@Deprecated, use `KernelSpecManager.allowed_kernelspecs`
        z^List of allowed kernel names.

        By default, all installed kernels are allowed.
        zLList of kernel directories to search. Later ones take priority over earlier.)rm   r   kernel_dirs	whitelist)allowed_kernelspecsz7.0changerG   re   c                   |j         }| j        |         \  }}t          | |          }||j        k    rU| j                            | j        j         d| d| d| j        j         d| d
           t          | ||j                   dS dS )zobserver for deprecated traits.z! is deprecated in jupyter_client z, use z insteadN)	rD   _deprecated_aliasesgetattrnewlogwarning	__class__r?   setattr)r5   rv   old_attrnew_attrversion	new_values         r+   _deprecated_traitz#KernelSpecManager._deprecated_trait   s     ; 4X>'D(++	
"" H>* O OX O OO O"&."9O O<DO O O   D(FJ///// #"r8   	list[str]c                    t          d          }	 ddlm} |                    t          j                             |            d                     n# t          $ r Y nw xY w|S )Nr`   r   )get_ipython_dir)r   IPython.pathsr   appendrP   rM   joinModuleNotFoundError)r5   dirsr   s      r+   _kernel_dirs_defaultz&KernelSpecManager._kernel_dirs_default   sx    I&&	555555KK__%6%6	BBCCCC" 	 	 	D	s   AA 
A A rV   c                    i } j         D ]P}t          |          }|                                D ]*\  }}||vr! j                            d||           |||<   +Q j        rlt          |vrc	 ddlm}  j                            dt          |           ||t          <   n0# t          $ r#  j        
                    dt                     Y nw xY w j        r  fd|                                D             }|S )<Returns a dict mapping kernel names to resource directories.zFound kernel %s in %sr   	RESOURCESz$Native kernel (%s) available from %sz#Native kernel (%s) is not availablec                .    i | ]\  }}|j         v ||S r#   )ru   ).0rD   specr5   s      r+   
<dictcomp>z7KernelSpecManager.find_kernel_specs.<locals>.<dictcomp>   s,    \\\
d44C[;[;[t;[;[;[r8   )rs   rb   itemsr|   debugensure_native_kernelNATIVE_KERNEL_NAMEipykernel.kernelspecr   ImportErrorr}   ru   )r5   r6   
kernel_dirr`   knamer   r   s   `      r+   find_kernel_specsz#KernelSpecManager.find_kernel_specs   sH   * 	$ 	$J&z22G&}} $ $t>>HNN#:E:NNN#AeH$
 $ 	\);1)D)D
\:::::::&  
 )2$%% \ \ \  !FHZ[[[[[\ # 	]\\\\aggii\\\As   -1B *CCkernel_namer   r   c                B   d}|t           k    r9	 ddlm}m} ||k    r |            } | j        dd|i|}n# t
          $ r Y nw xY w|s| j                            |          }t          j        | j	                  
                    |          st          |          |S )zaReturns a :class:`KernelSpec` instance for a given kernel_name
        and resource_dir.
        Nr   )r   get_kernel_dictr   )parentr#   )r   r   r   r   kernel_spec_classr   r,   KPFinstancer   is_provisioner_availablerd   )r5   r   r   kspecr   r   kdicts          r+   _get_kernel_spec_by_namez*KernelSpecManager._get_kernel_spec_by_name   s     ,,,WKKKKKKKK
  9,,+O--E2D2VVVPUVVE      	K*<<\JJE|4;///HHOO 	,{+++s   7 
AArU   c                "   d | j         D             D ]X}t          j        |          }|D ]?}t          ||          }|                                |k    rt          |          r|c c S @Y|t          k    r	 ddlm} |S # t          $ r Y nw xY wdS )z2Find the resource directory of a named kernel specc                P    g | ]#}t           j                            |          !|$S r#   )rP   rM   rQ   )r   kds     r+   
<listcomp>z:KernelSpecManager._find_spec_directory.<locals>.<listcomp>   s+    NNN"BGMM"<M<MN2NNNr8   r   r   N)
rs   rP   r[   r$   r\   rS   r   r   r   r   )r5   r   r   filesr)   rM   r   s          r+   _find_spec_directoryz&KernelSpecManager._find_spec_directory   s    NN(8NNN 	  	 JJz**E    Z++7799++t0D0D+KKKKK 
 ,,,!:::::: !      ts   7A? ?
BBc                <   t          |          s%| j                            d| dt                      |                     |                                          }|*| j                            d|           t          |          |                     ||          S )zReturns a :class:`KernelSpec` instance for the given kernel_name.

        Raises :exc:`NoSuchKernel` if the given kernel name is not found.
        zKernelspec name z is invalid: Nz#Kernelspec name %s cannot be found!)rL   r|   r}   r_   r   r\   rd   r   )r5   r   r   s      r+   get_kernel_specz!KernelSpecManager.get_kernel_spec  s    
 %[11 	HW;WW=UWW   001B1B1D1DEEHBKPPP{+++,,[,GGGr8   r-   c                   |                                  }i }|                                D ]\  }}	 | j        t          u r|                     ||          }n|                     |          }||                                d||<   [# t          $ r Y gt          $ r  | j	        
                    d|d           Y w xY w|S )a*  Returns a dict mapping kernel names to kernelspecs.

        Returns a dict of the form::

            {
              'kernel_name': {
                'resource_dir': '/path/to/kernel_name',
                'spec': {"the spec itself": ...}
              },
              ...
            }
        )r   r   zError loading kernelspec %rT)exc_info)r   r   r~   rk   r   r   r7   rd   	Exceptionr|   r}   )r5   r6   resr   r   r   s         r+   get_all_specszKernelSpecManager.get_all_specs!  s     ""$$#$7799 	V 	VE<V>%66688MMDD
  //66D.:DLLNNSSE

    V V V  !>PT UUUUUV
s   AB
B;&B;:B;rD   c                J   | j         }	 d| _         |                                 }|| _         n# || _         w xY w||         }| j                            d|           t          j                            |          rt	          j        |           nt          j	        |           |S )z\Remove a kernel spec directory by name.

        Returns the path that was deleted.
        FzRemoving %s)
r   r   r|   r   rP   rM   islinkremoveshutilrmtree)r5   rD   save_nativespecsspec_dirs        r+   remove_kernel_specz$KernelSpecManager.remove_kernel_specA  s    
 /	4(-D%**,,E(3D%%D%3333;}h///7>>(## 	$IhM(###s   , 	5FNuserrN   prefixc                ,   |r%t           j                            | j        |          S |r@t           j                            t           j                            |          ddd|          S t           j                            t
          d         d|          S )Nsharejupyterr`   r   )rP   rM   r   user_kernel_dirabspathr   )r5   r   r   r   s       r+   _get_destination_dirz&KernelSpecManager._get_destination_dirT  sx      	P7<< 4kBBB 	P7<< 7 7)YXcddd7<< 3A 6	;OOOr8   
source_dirreplacebool | Nonec                L   |                     d          }|st          j                            |          }|                                }t          |          sd|dt           }t          |          |r|rd}t          |          |t          j	        dt          d           |                     |||	          }| j                            d
|           t          j                            |          }|| j        vr!| j                            d|| j                   t          j                            |          r/| j                            d|           t'          j        |           t'          j        ||           | j                            d||           |S )a#  Install a kernel spec by copying its directory.

        If ``kernel_name`` is not given, the basename of ``source_dir`` will
        be used.

        If ``user`` is False, it will attempt to install into the systemwide
        kernel registry. If the process does not have appropriate permissions,
        an :exc:`OSError` will be raised.

        If ``prefix`` is given, the kernelspec will be installed to
        PREFIX/share/jupyter/kernels/KERNEL_NAME. This can be sys.prefix
        for installation inside virtual or conda envs.
        z/\zInvalid kernel name z.  zCCan't specify both user and prefix. Please choose one or the other.NzTreplace is ignored. Installing a kernelspec always replaces an existing installation   rY   )r   r   zInstalling kernelspec in %szFInstalling to %s, which is not in %s. The kernelspec may not be found.z"Removing existing kernelspec in %szInstalled kernelspec %s in %s)rstriprP   rM   basenamer\   rL   r_   
ValueErrorr]   r^   DeprecationWarningr   r|   r   dirnamers   r}   rQ   infor   r   copytree)	r5   r   r   r   r   r   msgdestinationr   s	            r+   install_kernel_specz%KernelSpecManager.install_kernel_spec^  s   *  &&u--
 	7'**:66K!''))$[11 	"UUU;SUUCS//! 	"F 	"WCS//!M"	    //$v/VV4kBBBW__[11
T---HX    7==%% 	'HMM>LLLM+&&&
K0005{KPPPr8   c                X    t          j        dd           ddlm}  || |           dS )z,DEPRECATED: Use ipykernel.kernelspec.installzRinstall_native_kernel_spec is deprecated. Use ipykernel.kernelspec import install.r   rY   r   )installr   N)r]   r^   r   r   )r5   r   r   s      r+   install_native_kernel_specz,KernelSpecManager.install_native_kernel_spec  sP    `	
 	
 	
 	
 	1000004      r8   r>   )rv   rG   r   re   )r   r   r   rV   )r   r   r   r   r   r   )r   r   r   rU   r   r   r   r   r=   )rD   r   r   r   )FN)r   r   r   rN   r   rU   r   r   )NFNNr   r   r   rU   r   rN   r   r   r   rU   r   r   Fr   rN   r   re   )"r?   r@   rA   rB   r   r   r   r   r   r   rq   ro   r   rr   r   rt   ru   r   rs   rC   ry   r   listr   r   r   r   r   r   r   r   r   r   r   r#   r8   r+   rk   rk   z   sN        %%    4   wyyH" " " " giiO/ / / /   I
 #   "T[  K    
 	3 Wdd&''(0 0 0 )(0      :   .   $H H H H"   @   ( JNP P P P P #'#!: : : : :x! ! ! ! ! ! !r8   rk   c                 B    t                                                      S )r   )rk   r   r#   r8   r+   r   r     s    00222r8   r   c                D    t                                          |           S )zReturns a :class:`KernelSpec` instance for the given kernel_name.

    Raises KeyError if the given kernel name is not found.
    )rk   r   )r   s    r+   r   r     s    
 ..{;;;r8   Fr   r   r   r   r   c                L    t                                          | ||||          S )z+Install a kernel spec in a given directory.)rk   r   )r   r   r   r   r   s        r+   r   r     s(     22:{DRY[abbbr8   re   c                J    t                                          |            dS )zInstall the native kernel spec.r   N)rk   r   r   s    r+   r   r     s%    222=====r8   )rD   r   r   rG   )rM   r   r   rN   )rT   rU   r   rV   r   r   )NFFNr   r   r   )0rB   
__future__r   r&   rP   rer   typingtr]   jupyter_core.pathsr   r   r   	traitletsr   r   r	   r
   r   r   r   r   r   traitlets.configr   provisioningr   r   rM   r   r$   r   r   compile
IGNORECASErI   rL   r_   rS   rb   KeyErrorrd   rk   r   r   r   r   r#   r8   r+   <module>r      sl   % % # " " " " "  				 				       R R R R R R R R R R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0 0 0 0 0 0 9 9 9 9 9 9
 ** ** ** ** ** ** ** **Z 2:0"-@@ ( ( ( (/ N N N N
   ,3 3 3 3 38 3 3 3h! h! h! h! h!+ h! h! h!V	3 3 3 3
< < < < # c c c c c 0CK  > > > > >
 &7%Q%Y  " " "r8   