
    JjL=                       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            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        m/home/rurouni/.cache/uv/archive-v0/6mr0qdqUAO9GXgnL/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                `    | j         | j        | j        | j        | j        | j        | j        d}|S )z"Convert the kernel spec to a dict.r   envdisplay_namelanguageinterrupt_modemetadatakernel_protocol_versionr/   )selfds     r+   to_dictzKernelSpec.to_dict2   s=     I8 -"1'+'C
 
     c                N    t          j        |                                           S )zOSerialise this kernelspec to a JSON object.

        Returns a string.
        )r&   dumpsr8   r6   s    r+   to_jsonzKernelSpec.to_json@   s    
 z$,,..)))r9   N)r   r   r   r   r   r   r   r-   r   r   )__name__
__module____qualname____doc__r   r   __annotations__r   namemimetyper1   r2   r5   r	   r0   r   r   r3   r4   classmethodr,   r8   r=   r#   r9   r+   r   r      s         %%dffD799DwyyH799LwyyH%gii
$&&C799L$_i%:(SSSNtvvH= = = [=   * * * * * *r9   r   z^[a-z0-9._\-]+$rE   r   r   t.Anyc                6    t                               |           S )z"Check that a kernel name is valid.)_kernel_name_patmatchrE   s    r+   _is_valid_kernel_namerM   K   s     !!$'''r9   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!   )osrN   isdirisfiler$   )rN   s    r+   _is_kernel_dirrT   W   s3    7==M27>>%m2L2L#M#MMr9   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)rQ   rN   rR   listdirr$   rT   lowerrM   warningswarn_kernel_name_description)rU   kernelsr)   rN   keys        r+   _list_kernels_inrc   \   s    
 {"'--,,{	GZ__ 
 
S!}}d## 	ggii$S)) 	MY6NYYSWYY    Nr9   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.rE   r   r   Nonec                    || _         dS )zInitialize the error.NrL   )r6   rE   s     r+   __init__zNoSuchKernel.__init__u   s    			r9   c                    d| j          S )NzNo such kernel named rL   r<   s    r+   __str__zNoSuchKernel.__str__y   s    2ty222r9   N)rE   r   r   rf   r?   )r@   rA   rB   rC   rh   rj   r#   r9   r+   re   re   r   sB        AA   3 3 3 3 3 3r9   re   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    !!!r9   c                ,    t          | j        d          S )Nra   )r$   data_dirr<   s    r+   _user_kernel_dir_defaultz*KernelSpecManager._user_kernel_dir_default   s    T]I...r9   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.)rn   r   kernel_dirs	whitelist)allowed_kernelspecsz7.0changerH   rf   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)	rE   _deprecated_aliasesgetattrnewlogwarning	__class__r@   setattr)r6   rw   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///// #"r9   	list[str]c                    t          d          }	 ddlm} |                    t          j                             |            d                     n# t          $ r Y nw xY w|S )Nra   r   )get_ipython_dir)r   IPython.pathsr   appendrQ   rN   joinModuleNotFoundError)r6   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 rW   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#   )rv   ).0rE   specr6   s      r+   
<dictcomp>z7KernelSpecManager.find_kernel_specs.<locals>.<dictcomp>   s,    \\\
d44C[;[;[t;[;[;[r9   )rt   rc   itemsr}   debugensure_native_kernelNATIVE_KERNEL_NAMEipykernel.kernelspecr   ImportErrorr~   rv   )r6   r7   
kernel_dirra   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_availablere   )r6   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rV   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#   )rQ   rN   rR   )r   kds     r+   
<listcomp>z:KernelSpecManager._find_spec_directory.<locals>.<listcomp>  s+    NNN"BGMM"<M<MN2NNNr9   r   r   N)
rt   rQ   r\   r$   r]   rT   r   r   r   r   )r6   r   r   filesr)   rN   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                      |                     |                                          }|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: )rM   r}   r~   r`   r   r]   re   r   )r6   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{+++,,[,GGGr9   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   rl   r   r   r8   re   	Exceptionr}   r~   )r6   r7   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;rE   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   rQ   rN   islinkremoveshutilrmtree)r6   rE   save_nativespecsspec_dirs        r+   remove_kernel_specz$KernelSpecManager.remove_kernel_specC  s    
 /	4(-D%**,,E(3D%%D%3333;}h///7>>(## 	$IhM(###s   , 	5FNuserrO   prefixc                ,   |r%t           j                            | j        |          S |r@t           j                            t           j                            |          ddd|          S t           j                            t
          d         d|          S )Nsharejupyterra   r   )rQ   rN   r   user_kernel_dirabspathr   )r6   r   r   r   s       r+   _get_destination_dirz&KernelSpecManager._get_destination_dirV  sx      	P7<< 4kBBB 	P7<< 7 7)YXcddd7<< 3A 6	;OOOr9   
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   rZ   )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)rstriprQ   rN   basenamer]   rM   r`   
ValueErrorr^   r_   DeprecationWarningr   r}   r   dirnamert   r~   rR   infor   r   copytree)	r6   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r9   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   rZ   r   )installr   N)r^   r_   r   r   )r6   r   r   s      r+   install_native_kernel_specz,KernelSpecManager.install_native_kernel_spec  sP    `	
 	
 	
 	
 	1000004      r9   r?   )rw   rH   r   rf   )r   r   r   rW   )r   r   r   r   r   r   )r   r   r   rV   r   r   r   r   r>   )rE   r   r   r   )FN)r   r   r   rO   r   rV   r   r   )NFNNr   r   r   rV   r   rO   r   r   r   rV   r   r   Fr   rO   r   rf   )"r@   rA   rB   rC   r   r   r   r   r   r   rr   rp   r   rs   r   ru   rv   r   rt   rD   rz   r   listr   r   r   r   r   r   r   r   r   r   r   r#   r9   r+   rl   rl   }   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! ! ! ! ! ! !r9   rl   c                 B    t                                                      S )r   )rl   r   r#   r9   r+   r   r     s    00222r9   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.
    )rl   r   )r   s    r+   r   r     s    
 ..{;;;r9   Fr   r   r   r   r   c                L    t                                          | ||||          S )z+Install a kernel spec in a given directory.)rl   r   )r   r   r   r   r   s        r+   r   r     s(     22:{DRY[abbbr9   rf   c                J    t                                          |            dS )zInstall the native kernel spec.r   N)rl   r   r   s    r+   r   r     s%    222=====r9   )rE   r   r   rH   )rN   r   r   rO   )rU   rV   r   rW   r   r   )NFFNr   r   r   )0rC   
__future__r   r&   rQ   rer   typingtr^   jupyter_core.pathsr   r   r   	traitletsr   r   r	   r
   r   r   r   r   r   traitlets.configr   provisioningr   r   rN   r   r$   r   r   compile
IGNORECASErJ   rM   r`   rT   rc   KeyErrorre   rl   r   r   r   r   r#   r9   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
 ,* ,* ,* ,* ,* ,* ,* ,*^ 2:0"-@@ ( ( ( (/ N N N N
   ,3 3 3 3 38 3 3 3g! g! g! g! g!+ g! g! g!T	3 3 3 3
< < < < # c c c c c 0CK  > > > > >
 &7%Q%Y  " " "r9   