
    bi4                    l   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
mZ ddlmZmZmZ ddlmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ  G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z#	 	 	 	 	 	 ddZ$e%dk(  re#jM                          yy)zApps for managing kernel specs.    )annotationsN)Path)
JupyterAppbase_aliases
base_flags)BoolDictInstanceListUnicode)Application   )__version__)KernelSpecManager)KernelProvisionerFactoryc                      e Zd ZdZeZdZ ee      Z	 e
ddd      Z e
ddd      Zd ddiidfd d	diid
fed   dZddZddZy)ListKernelSpecszAn app to list kernel specs.z%List installed kernel specifications.Fz7output spec name and location as machine-readable json.Thelpconfigz*List only specs with missing interpreters.json_outputmissing_kernelszoutput only missing kernelsdebug)jsonmissingr   c                0    t        | | j                        S )N)parentdata_dirr   r   selfs    W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jupyter_client/kernelspecapp.py_kernel_spec_manager_defaultz,ListKernelSpecs._kernel_spec_manager_default3   s     t}}EE    c                     j                   j                         } j                   j                         } j                  rt	        ||      \  }} j
                  s~|st        d       yt        t        |d       d         }d fd}t        d       t        |j                         |      D ]%  \  }}t        d|j                  |       d	|        ' |S t        t        j                  d
|id             |S )Start the application.zNo kernels availableNc                    t        |       S Nlennames    r"   <lambda>z'ListKernelSpecs.start.<locals>.<lambda>C   s
    #d) r$   keyc                ~    | d   }t        j                        D ]  \  }}|j                  |      s||fc S  d|fS )z+sort key function for Jupyter path priorityr   r0   )	enumeratejupyter_path
startswith)itempathidxprefixr!   s       r"   path_keyz'ListKernelSpecs.start.<locals>.path_keyE   sL    Aw#,T->->#? +KCv. #T{*+ Dz!r$   zAvailable kernels:      kernelspecs   )indent)r5   t.Anyreturnr?   )kernel_spec_managerfind_kernel_specsget_all_specsr   _limit_to_missingr   printr*   sorteditemsljustr   dumps)r!   pathsspecsname_lenr9   
kernelnamer6   s   `      r"   startzListKernelSpecs.start6   s    ((::<((668,UE:LE5,-6%-CDRHIH" &'$*5;;=h$G C 
D:++H56d4&ABC  $**mU3A>?r$   Nr@   r   )r@   zdict[str, t.Any] | None)__name__
__module____qualname____doc__r   versiondescriptionr
   r   rA   r   r   r   r   flagsr#   rN    r$   r"   r   r      s    &G=K"#45FK
 9O  56E

 !2D 9:)
 G$
EFr$   r   c                  :    e Zd ZdZeZdZdZdZ e	e
      ZddZ e       Z eddd	      Zdd
Z eddd	      Z eddd	      Z eddd	      ZdddZej-                  e       d ddiidfd ddiidfd dej&                  iidfed   dZd fdZddZ xZS )InstallKernelSpecz An app to install a kernel spec.a=  Install a kernel specification directory.

    Given a SOURCE DIRECTORY containing a kernel spec,
    jupyter will copy that directory into one of the Jupyter kernel directories.
    The default is to install kernelspecs for all users.
    `--user` can be specified to install a kernel only for the current user.
    z>
    jupyter kernelspec install /path/to/my_kernel --user
    z1jupyter kernelspec install SOURCE_DIR [--options]c                .    t        | j                        S N)r   r   r    s    r"   r#   z.InstallKernelSpec._kernel_spec_manager_defaultg        $--88r$    Tz&Install the kernel spec with this namer   r   c                T    t         j                  j                  | j                        S r(   )osr6   basename	sourcedirr    s    r"   _kernel_name_defaultz&InstallKernelSpec._kernel_name_defaultm   s    ww//r$   F
        Try to install the kernel spec to the per-user directory instead of
        the system or environment directory.
        zSpecify a prefix to install to, e.g. an env.
        The kernelspec will be installed in PREFIX/share/jupyter/kernels/
        z0Replace any existing kernel spec with this name.zInstallKernelSpec.kernel_namezInstallKernelSpec.prefix)r,   r8   user'Install to the per-user kernel registryreplacer8   zEInstall to Python's sys.prefix. Useful in conda/virtual environments.r   )re   rg   z
sys-prefixr   c                    t         |   |       | j                  r| j                  d   | _        yt	        dt
        j                         | j                  d       y)Parse the command line args.r   zNo source directory specified.filer   N)superparse_command_line
extra_argsrb   rE   sysstderrexitr!   argv	__class__s     r"   rm   z$InstallKernelSpec.parse_command_line   sA    "4(??!__Q/DN2DIIaLr$   c                   | j                   r| j                  r| j                  d       	 | j                  j	                  | j
                  | j                  | j                   | j                  | j                         y# t        $ r}|j                  t        j                  k(  rTt        |t        j                         | j                   st        dt        j                         | j                  d        |j                  t        j                  k(  r9t        d|j                   t        j                         | j                  d        d}~ww xY w)r&   zCCan't specify both user and prefix. Please choose one or the other.)kernel_namere   r8   rg   rj   4Perhaps you want to install with `sudo` or `--user`?r   z$A kernel spec is already present at N)re   r8   rq   rA   install_kernel_specrb   rv   rg   OSErrorerrnoEACCESrE   ro   rp   EEXISTfilename)r!   es     r"   rN   zInstallKernelSpec.start   s    99II[\	$$88 ,,YY{{ 9   		ww%,,&acjj)yyPWZWaWab		!  ELL(<QZZLIPSPZPZ[		!		s   AA> >	ECEErO   )r@   str)rs   zNone | list[str]r@   Noner@   r   )rP   rQ   rR   rS   r   rT   rU   examplesusager
   r   rA   r#   r   rb   rv   rc   r   re   r8   rg   aliasesupdater   ro   r   rV   rm   rN   __classcell__rt   s   @r"   rY   rY   V   s   *GKH @E"#459 	I"T0XYK0 D 
F 5,^_G 0,G NN<  !64.15

 !9d"34>

 !8SZZ"89S
 G$E r$   rY   c                      e Zd ZdZeZdZdZ eddd      Z	 e
 e             Z eddd	      Z ee      Zdd
Zd ddiie	j$                  fd ddiidfdZej)                  ej&                         d fdZddZ xZS )RemoveKernelSpeczAn app to remove a kernel spec.z/Remove one or more Jupyter kernelspecs by name.z1jupyter kernelspec remove python2 [my_kernel ...]FTz-Force removal, don't prompt for confirmation.r^   zRemove missing specs.r   c                0    t        | j                  |       S )N)r   r   r   r    s    r"   r#   z-RemoveKernelSpec._kernel_spec_manager_default   s     $--EEr$   forcer   zremove missing kernels)fr   c                    t         |   |       | j                  r$t        t	        | j                              | _        yg | _        y)ri   N)rl   rm   rn   rF   set
spec_namesrr   s     r"   rm   z#RemoveKernelSpec.parse_command_line   s3    "4(??$S%9:DO DOr$   c           	        d| j                   _        | j                   j                         }| j                  rVt	        || j                   j                               \  }}t        t        | j                  t        |      z               | _        t        | j                        j                  t        |            }|r#| j                  ddj                  |      z         | j                  s| j                  st        d       | j                  D ]C  }|j!                  ||      }t        d|j#                  d       d|j#                  d              E t%        dt'        | j                        z        }|j)                         j+                  d	      sy
| j                  D ],  }	 | j                   j-                  |      }t        d        . y
# t.        $ rp}	|	j0                  t0        j2                  k(  rHt        |	t4        j6                         t        dt4        j6                         | j                  d       n Y d
}	~	d
}	~	ww xY w)r&   Fz Couldn't find kernel spec(s): %sz, zKernel specs to remove:r:      	zRemove %i kernel specs [y/N]: yNrj   zPerhaps you want sudo?r   zRemoved )rA   ensure_native_kernelrB   r   rD   rC   rF   r   r   list
differencerq   joinr   
answer_yesrE   getrH   inputr*   lowerr4   remove_kernel_specry   rz   r{   ro   rp   )
r!   
spec_paths_specr   r,   r6   answerrv   r~   s
             r"   rN   zRemoveKernelSpec.start   s   8=  5--??A
'((668GAt %S4:)E%FGDOdoo&11#j/BII8499W;MMN

doo+, ?!~~dD14::b>*"TZZ^,<=>? ;c$//>RRSF<<>,,S1?? 
	%K//BB;O HTF#$
	%  77ell*!#**-2DIIaL !	s   &G	IA&IIrO   )rs   zlist[str] | Noner@   r   r   )rP   rQ   rR   rS   r   rT   rU   r   r   r   r   r   r   r   r
   r   rA   r#   r   rV   r   r   rm   rN   r   r   s   @r"   r   r      s    )GGKFHt*]^EgiJ$O ##45F "GT?3UZZ@"3T!:;$
E 
LL!!"!%%r$   r   c                  j    e Zd ZdZeZdZ ee      Z	ddZ
 eddd      Zd ddiid	fed
   dZddZy)InstallNativeKernelSpecz)An app to install the native kernel spec.zG[DEPRECATED] Install the IPython kernel spec directory for this Python.c                .    t        | j                        S r[   r   r    s    r"   r#   z4InstallNativeKernelSpec._kernel_spec_manager_default  r\   r$   FTrd   r^   re   rf   r   )re   r   c                <   | j                   j                  d       	 ddlm} 	 j                  | j                  | j                         y	# t        $ r/ t        dt        j                         | j                  d       Y `w xY w# t        $ r}|j                  t        j                  k(  rSt        |t        j                         | j                  st        dt        j                         | j                  d       | j                  |       Y d	}~y	d	}~ww xY w)
r&   z`jupyter kernelspec install-self` is DEPRECATED as of 4.0. You probably want `ipython kernel install` to install the IPython kernelspec.r   )
kernelspecz0ipykernel not available, can't install its spec.rj   r   )re   rw   N)logwarning	ipykernelr   ModuleNotFoundErrorrE   ro   rp   rq   installrA   re   ry   rz   r{   )r!   r   r~   s      r"   rN   zInstallNativeKernelSpec.start"  s    ]	
	,	t77diiH	 # 	D3::VIIaL	
  		ww%,,&acjj)yyN ZZ 		!IIaLL		s)   A 'B 5BB	DBDDNrO   r   )rP   rQ   rR   rS   r   rT   rU   r
   r   rA   r#   r   re   r   rV   rN   rW   r$   r"   r   r     sc    3G_K"#459 D '75
 G$Er$   r   c                       e Zd ZdZeZdZddZy)ListProvisionerszAn app to list provisioners.z=List available provisioners for use in kernel specifications.c                    t        j                  |       }t        d       |j                         }t	        t        |d       d         }t        |      D ]%  }t        d|j                  |       d||           ' y)	r&   )r   zAvailable kernel provisioners:c                    t        |       S r(   r)   r+   s    r"   r-   z(ListProvisioners.start.<locals>.<lambda>H  s
    SY r$   r.   r0   r:   r;   N)r   instancerE   get_provisioner_entriesr*   rF   rH   )r!   kfpprovisionersrL   r,   s        r"   rN   zListProvisioners.startA  s}    &//t<./224 vl0FGKL<( 	GDBtzz(+,Dd1C0DEF	Gr$   Nr   )rP   rQ   rR   rS   r   rT   rU   rN   rW   r$   r"   r   r   ;  s    &GUK
Gr$   r   c            
      p   e Zd ZdZeZdZdZ ee	e	j                  j                         d   feej                  j                         d   fedfeej                  j                         d   feej                  j                         d   feej                  j                         d   fd      Zi Zi Zd	dZy)
KernelSpecAppzAn app to manage kernel specs.zjupyter kernelspecz%Manage Jupyter kernel specifications.r   zAlias for remove)r   r   	uninstallremovezinstall-selfr   c                   | j                   ]t        dt        | j                        z         t                | j	                          | j                          | j                  d       y| j                   j                         S )r&   Nz0No subcommand specified. Must specify one of: %sr   )subapprE   r   subcommandsprint_descriptionprint_subcommandsrq   rN   r    s    r"   rN   zKernelSpecApp.starti  s`    ;;DtDL\L\G]]^G""$""$IIaL;;$$&&r$   Nr   )rP   rQ   rR   rS   r   rT   r,   rU   r	   r   
splitlinesrY   r   r   r   r   r   rV   rN   rW   r$   r"   r   r   N  s    (GD=K$o&A&A&L&L&Nq&QR!!--88:1= +,>?')9)E)E)P)P)RST)UV''33>>@C ./?/K/K/V/V/XYZ/[\	
K" GE	'r$   r   c                
   ddl m} i }|j                         D ]7  \  }}|d   d   d   }t        |      j	                         s ||      r3|||<   9 | j                         D ci c]  \  }}||v s|| }	}}|	|fS c c}}w )Nr   )whichr   rs   )shutilr   rG   r   exists)
rJ   rK   r   r   r,   dataexekvpaths_s
             r"   rD   rD   u  s      "Gkkm 
d6l6"1%9s 05{{}Mtq!WadMFM7? Ns   &A?3A?__main__)rJ   zdict[str, str]rK   zdict[str, t.Any]r@   z'tuple[dict[str, str], dict[str, t.Any]])'rS   
__future__r   rz   r   os.pathr`   ro   typingtpathlibr   jupyter_core.applicationr   r   r   	traitletsr   r	   r
   r   r   traitlets.config.applicationr   r]   r   r   r   provisioning.factoryr   r   rY   r   r   r   r   rD   rP   launch_instancerW   r$   r"   <module>r      s    % #    
   I I 9 9 4  ) :<j <~`
 `FK%z K%\1j 1hGz G&$'K $'N"2," z!!# r$   