
    <h/=                    $   S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSK	r	SSK
JrJrJr  SSKJrJrJrJrJrJrJrJrJr  SSKJr  SSKJr  \R:                  R<                  rS	r  " S
 S\5      r!\RD                  " S\RF                  5      r$SS jr%Sr&SS jr'SS jr( " S S\)5      r* " S S\5      r+SS jr,SS jr-    S           SS jjr.\+R\                  R                   \.l         S S!S jjr/\+R^                  R                   \/l         g)"z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                      \ rS rSr% Sr\" 5       rS\S'   \" 5       r	\" 5       r
\" 5       r\" 5       r\" 5       r\" 5       r\" SS/SS9r\" 5       r\SS j5       rSS	 jrSS
 jrSrg)
KernelSpec   zA kernel spec model object.	List[str]argvmessagesignal)default_valuec                    [        US5      n[        USS9 n[        R                  " U5      nSSS5        U " SSU0WD6$ ! , (       d  f       N= f)zlCreate a KernelSpec object by reading kernel.json

Pass the path to the *directory* containing kernel.json.
kernel.jsonzutf-8)encodingNresource_dir )pjoinopenjsonload)clsr   kernel_filefkernel_dicts        lC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\jupyter_client/kernelspec.pyfrom_resource_dirKernelSpec.from_resource_dir%   sJ     L-8+0A))A,K 1<<<< 10s   A  
Ac                    U R                   U R                  U R                  U R                  U R                  U R
                  S.nU$ )z"Convert the kernel spec to a dict.r   envdisplay_namelanguageinterrupt_modemetadatar-   )selfds     r)   to_dictKernelSpec.to_dict0   s@     II88 --"11
     c                J    [         R                  " U R                  5       5      $ )z?Serialise this kernelspec to a JSON object.

Returns a string.
)r#   dumpsr5   r3   s    r)   to_jsonKernelSpec.to_json=   s    
 zz$,,.))r7   r    N)r%   ztype[KernelSpec]r   strreturnr   r>   zdict[str, t.Any]r>   r=   )__name__
__module____qualname____firstlineno____doc__r   r   __annotations__r   namemimetyper/   r0   r	   r.   r   r   r1   r2   classmethodr*   r5   r;   __static_attributes__r    r7   r)   r   r      so    %fD)9DyH9LyH
&C9L$i%:(SNvH= =*r7   r   z^[a-z0-9._\-]+$c                ,    [         R                  U 5      $ )z"Check that a kernel name is valid.)_kernel_name_patmatchrG   s    r)   _is_valid_kernel_namerO   H   s     !!$''r7   zuKernel names can only contain ASCII letters and numbers and these separators: - . _ (hyphen, period, and underscore).c                    [         R                  R                  U 5      =(       a)    [         R                  R                  [	        U S5      5      $ )zIs ``path`` a kernel directory?r   )ospathisdirisfiler!   )rR   s    r)   _is_kernel_dirrU   T   s.    77==M277>>%m2L#MMr7   c                V   U b$  [         R                  R                  U 5      (       d  0 $ 0 n[         R                  " U 5       Hc  n[	        X5      n[        U5      (       d  M   UR                  5       n[        U5      (       d  [        R                  " S[         SU 3SS9  X1U'   Me     U$ )z}Return a mapping of kernel names to resource directories from dir.

If dir is None or does not exist, returns an empty dict.
z#Invalid kernelspec directory name (z):    
stacklevel)rQ   rR   rS   listdirr!   rU   lowerrO   warningswarn_kernel_name_description)dirkernelsr'   rR   keys        r)   _list_kernels_inrb   Y   s    
 {"''--,,	GZZ_S}d##ggi$S))MM56N5OsSWRXY   Nr7   c                  ,    \ rS rSrSrSS jrSS jrSrg)	NoSuchKernelo   z7An error raised when there is no kernel of a give name.c                    Xl         g)zInitialize the error.NrN   )r3   rG   s     r)   __init__NoSuchKernel.__init__r   s    	r7   c                     SU R                    3$ )NzNo such kernel named rN   r:   s    r)   __str__NoSuchKernel.__str__v   s    &tyyk22r7   rN   N)rG   r=   r>   Noner@   )rA   rB   rC   rD   rE   rg   rj   rJ   r    r7   r)   rd   rd   o   s    A3r7   rd   c                  h   \ rS rSr% Sr\" \SSS9r\" SSSS9r	\
" 5       rSS jr\
" 5       rSS jr\" SS	S9r\" SS
S9r\" SS9rS\S'   SS0r\" \" \5      6 SS j5       rS S jrS!S jrS"S jrS#S jrS$S jrS%S jrS&S jr S'       S(S jjr     S)           S*S jjr!S+S,S jjr"Sr#g)-KernelSpecManagerz   z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.
        c                    [        5       $ )N)r   r:   s    r)   _data_dir_default#KernelSpecManager._data_dir_default   s    !!r7   c                .    [        U R                  S5      $ )Nr`   )r!   data_dirr:   s    r)   _user_kernel_dir_default*KernelSpecManager._user_kernel_dir_default   s    T]]I..r7   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.)rq   r   kernel_dirs	whitelist)allowed_kernelspecsz7.0c                D   UR                   nU R                  U   u  p4[        X5      nXQR                  :w  ai  U R                  R                  U R                  R                   SU SU SU R                  R                   SU S3
5        [        XUR                  5        gg)zobserver for deprecated traits.z! is deprecated in jupyter_client z, use z insteadN)	rG   _deprecated_aliasesgetattrnewlogwarning	__class__rA   setattr)r3   changeold_attrnew_attrversion	new_values         r)   _deprecated_trait#KernelSpecManager._deprecated_trait   s     ;; 44X>D+	

" HH>>**+1XJ6W)6$.."9"9!:!H:XO DFJJ/ #r7   c                    [        S5      n SSKJn  UR                  [        R
                  R                  U" 5       S5      5        U$ ! [         a     U$ f = f)Nr`   r   )get_ipython_dir)r   IPython.pathsr   appendrQ   rR   joinModuleNotFoundError)r3   dirsr   s      r)   _kernel_dirs_default&KernelSpecManager._kernel_dirs_default   sR    I&	5KK_%6	BC  # 		s   :A	 	
AAc                T   0 nU R                    HN  n[        U5      nUR                  5        H,  u  pEXA;  d  M  U R                  R	                  SXB5        XQU'   M.     MP     U R
                  (       a:  [        U;  a0   SSKJn  U R                  R	                  S[        U5        Xa[        '   U R                  (       a5  UR                  5        VVs0 s H  u  puXpR                  ;   d  M  Xu_M     nnnU$ ! [         a#    U R                  R                  S[        5         Ntf = fs  snnf )<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 available)ry   rb   itemsr   debugensure_native_kernelNATIVE_KERNEL_NAMEipykernel.kernelspecr   ImportErrorr   r{   )r3   r4   
kernel_dirr`   knamespecr   rG   s           r)   find_kernel_specs#KernelSpecManager.find_kernel_specs   s    **J&z2G&}}>HHNN#:EN#eH  / + $$);1)D
\::&
 )2$% ##./ggi\i
4C[C[;[iA\  \  !FHZ[\
 ]s   =/C4 D$)D$4*D! D!c                N   SnU[         :X  a)   SSKJnJn  X$:X  a  U" 5       nU R                  " SSU0UD6nU(       d  U R                  R                  U5      n[        R                  " U R                  S9R                  U5      (       d  [        U5      eU$ ! [
         a     Nmf = f)zQReturns 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   )r3   kernel_namer   kspecr   r   kdicts          r)   _get_kernel_spec_by_name*KernelSpecManager._get_kernel_spec_by_name   s     ,,WK
  ,+-E 22VVPUVE**<<\JE||4;;/HHOO{++  s   B 
B$#B$c                   U R                    Vs/ s H+  n[        R                  R                  U5      (       d  M)  UPM-     sn HY  n[        R                  " U5      nU H:  n[        X55      nUR                  5       U:X  d  M$  [        U5      (       d  M6  Us  s  $    M[     U[        :X  a	   SSK	J
n  U$ gs  snf ! [         a     gf = f)z2Find the resource directory of a named kernel specr   r   N)ry   rQ   rR   rS   rZ   r!   r[   rU   r   r   r   r   )r3   r   kdr   filesr'   rR   r   s           r)   _find_spec_directory&KernelSpecManager._find_spec_directory   s    (,(8(8N(8"BGGMM"<M2(8NJJJz*EZ+779+t0D0DK  O ,,!: !  O   	s   (B5B5,B: :
CCc                    [        U5      (       d%  U R                  R                  SU S[         35        U R	                  UR                  5       5      nUc'  U R                  R                  SU5        [        U5      eU R                  X5      $ )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: z#Kernelspec name %s cannot be found!)rO   r   r   r^   r   r[   rd   r   )r3   r   r   s      r)   get_kernel_spec!KernelSpecManager.get_kernel_spec  s    
 %[11HH";-}=U<VW 001B1B1DEHHBKP{++,,[GGr7   c                b   U R                  5       n0 nUR                  5        HP  u  p4 U R                  [        L a  U R	                  X45      nOU R                  U5      nXER                  5       S.X#'   MR     U$ ! [         a     Mc  [         a    U R                  R                  SUSS9   M  f = f)zReturns 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   rn   r   r   r5   rd   	Exceptionr   r   )r3   r4   resr   r   r   s         r)   get_all_specsKernelSpecManager.get_all_specs!  s     ""$#$779EV>>%6688MD
  //6D.:LLNS
 $- 
	    V  !>PT UVs   A
A99
B.$B.-B.c                T   U R                   n SU l         U R                  5       nX l         X1   nU R                  R                  SU5        [        R
                  R                  U5      (       a  [        R                  " U5        U$ [        R                  " U5        U$ ! X l         f = f)zLRemove a kernel spec directory by name.

Returns the path that was deleted.
FzRemoving %s)
r   r   r   r   rQ   rR   islinkremoveshutilrmtree)r3   rG   save_nativespecsspec_dirs        r)   remove_kernel_spec$KernelSpecManager.remove_kernel_specA  s    
 //	4(-D%**,E(3%;}h/77>>(##IIh  MM(# )4%s   B B'Nc                B   U(       a*  [         R                  R                  U R                  U5      $ U(       a@  [         R                  R                  [         R                  R	                  U5      SSSU5      $ [         R                  R                  [
        S   SU5      $ )Nsharejupyterr`   r   )rQ   rR   r   user_kernel_dirabspathr   )r3   r   userprefixs       r)   _get_destination_dir&KernelSpecManager._get_destination_dirT  sk     77<< 4 4kBB77<< 7)YXcdd77<< 3A 6	;OOr7   c                f   UR                  S5      nU(       d  [        R                  R                  U5      nUR	                  5       n[        U5      (       d  SU< S[         3n[        U5      eU(       a  U(       a  Sn[        U5      eUb  [        R                  " S[        SS9  U R                  X#US9nU R                  R                  S	U5        [        R                  R                  U5      nXR                  ;  a'  U R                  R!                  S
UU R                  5        [        R                  R#                  U5      (       a2  U R                  R%                  SU5        [&        R(                  " U5        [&        R*                  " X5        U R                  R%                  SX'5        U$ )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.zTreplace is ignored. Installing a kernelspec always replaces an existing installation   rX   )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   rR   basenamer[   rO   r^   
ValueErrorr\   r]   DeprecationWarningr   r   r   dirnamery   r   rS   infor   r   copytree)	r3   
source_dirr   r   replacer   msgdestinationr   s	            r)   install_kernel_spec%KernelSpecManager.install_kernel_spec^  sU   *  &&u-
''**:6K!'')$[11(s;S:TUCS/!FWCS/!MM"	 //v/V4kBWW__[1
---HHX   77==%%HHMM>LMM+&
05{Pr7   c                F    [         R                  " SSS9  SSKJn  U" XS9  g)z,DEPRECATED: Use ipykernel.kernelspec.installzRinstall_native_kernel_spec is deprecated. Use ipykernel.kernelspec import install.r   rX   r   )installr   N)r\   r]   r   r   )r3   r   r   s      r)   install_native_kernel_spec,KernelSpecManager.install_native_kernel_spec  s!    `	
 	1 r7   )r   r@   )r   t.Anyr>   rl   )r>   z	list[str]r>   dict[str, str])r   r=   r   r=   r>   r   )r   r=   r>   
str | Noner   r=   r>   r   r?   )rG   r=   r>   r=   )FN)r   r=   r   boolr   r   r>   r=   )NFNNr   r=   r   r   r   r   r   zbool | Noner   r   r>   r=   Fr   r   r>   rl   )$rA   rB   rC   rD   rE   r   r   r   r   r   r   rv   rs   r   rw   r   rz   r{   r   ry   rF   r~   r   listr   r   r   r   r   r   r   r   r   r   r   rJ   r    r7   r)   rn   rn   z   sk   %   yH" iO/ I
  "[K 
 	3 d&'(0 )0:.$H"@( JNPP&*P<FP	P #'#!::  : 	:
 : : 
:x! !r7   rn   c                 2    [        5       R                  5       $ )r   )rn   r   r    r7   r)   r   r     s    0022r7   c                4    [        5       R                  U 5      $ )zzReturns a :class:`KernelSpec` instance for the given kernel_name.

Raises KeyError if the given kernel name is not found.
)rn   r   )r   s    r)   r   r     s    
 ..{;;r7   c                8    [        5       R                  XX#U5      $ )z+Install a kernel spec in a given directory.)rn   r   )r   r   r   r   r   s        r)   r   r     s     22:D[abbr7   c                2    [        5       R                  U S9  g)zInstall the native kernel spec.r   N)rn   r   r   s    r)   r   r     s    222=r7   )rG   r=   r>   r   )rR   r=   r>   r   )r_   r   r>   r   r   r   )NFFNr   r   r   )0rE   
__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   rR   r   r!   r   r   compile
IGNORECASErL   rO   r^   rU   rb   KeyErrorrd   rn   r   r   r   r   r    r7   r)   <module>r      s1   % #  	 	    R R _ _ _ 0 9
 ** **Z ::0"--@ (/ N
,38 3h!+ h!V	3
< # ccc c 	c
 c 	c 0CCKK  >
 &7%Q%Q%Y%Y  "r7   