o
    û›hŽ  ã                   @   s”   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mZ ddlm	Z	m
Z
mZ dd„ Zdd„ Zh d	£Zh d
£Zh d£ZddhZe
G dd„ de	ƒƒZdS )z5Implementation of packaging-related magic functions.
é    N)ÚPath)ÚMagicsÚmagics_classÚ
line_magicc                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                     s(   t tjddƒ ¡ stdƒ‚ˆ | i |¤ŽS )z>Return True if the current Python executable is in a conda envú
conda-metaÚhistoryzbThe python kernel does not appear to be a conda environment.  Please use ``%pip install`` instead.)r   ÚsysÚprefixÚexistsÚ
ValueError)ÚargsÚkwargs©Úfunc© úSc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/core/magics/packaging.pyÚwrapper   s
   ÿz%is_conda_environment.<locals>.wrapper)Ú	functoolsÚwraps)r   r   r   r   r   Úis_conda_environment   s   
r   c                 C   s¤   d}d|   ¡ v r
d}|tjv r ttj| ƒ}| ¡ r t| ¡ ƒS ttjƒj	|  }| ¡ r0t|ƒS ttj
ddƒjdd�}tjd| › d	�|tjd
�}|rP| ¡ d S | S )z•Find the path to the given executable

    Parameters
    ----------

    executable: string
        Value should be: conda, mamba or micromamba
    Z	CONDA_EXEÚmambaZ	MAMBA_EXEr   r   zutf-8)Úencodingz^#\s*cmd:\s*(?P<command>.*z)\s[create|install])ÚflagsÚcommand)ÚlowerÚosÚenvironr   Úis_fileÚstrÚresolver   Ú
executableÚparentr	   Ú	read_textÚreÚsearchÚ	MULTILINEÚ	groupdict)r   Zbase_executabler    r   Úmatchr   r   r   Ú_get_conda_like_executable$   s&   

ýr(   >   ÚupdateÚupgradeÚremoveÚ	uninstallÚlistÚinstall>   r)   r*   r+   r,   r.   >   z-pz--nameú--prefixz-nz-yz--yc                   @   s`   e Zd ZdZedd„ ƒZdd„ Zeedd„ ƒƒZeedd	„ ƒƒZ	eed
d„ ƒƒZ
edd„ ƒZdS )ÚPackagingMagicsz*Magics related to packaging & installationc                 C   óN   t j}t jdkrd| d }nt |¡}| j d |dd|g¡¡ tdƒ dS )zmRun the pip package manager within the current kernel.

        Usage:
          %pip install [pkgs]
        Úwin32ú"ú ú-mÚpipúANote: you may need to restart the kernel to use updated packages.N©	r   r    ÚplatformÚshlexÚquoteÚshellÚsystemÚjoinÚprint©ÚselfÚlineÚpythonr   r   r   r6   \   ó   

zPackagingMagics.pipc                 C   sÚ   t  |¡}t|ƒdkr|d nd}t|ƒdkr|dd … ndg}g }t| jdd ƒd u}|tv }t|ƒ t¡}|rA|rA|sA| 	d¡ |t
v }	t|ƒ t¡}
|	rX|
sX| dtjg¡ | j d ||g| | ¡¡ tdƒ d S )	Nr   Ú é   Zkernelz--yesr/   r4   zB
Note: you may need to restart the kernel to use updated packages.)r:   ÚsplitÚlenÚgetattrr<   ÚCONDA_COMMANDS_REQUIRING_YESÚsetÚintersectionÚCONDA_YES_FLAGSÚappendÚCONDA_COMMANDS_REQUIRING_PREFIXÚCONDA_ENV_FLAGSÚextendr   r	   r=   r>   r?   )rA   ÚcmdrB   r   r   Ú
extra_argsZstdin_disabledZ	needs_yesZhas_yesZneeds_prefixZ
has_prefixr   r   r   Ú_run_commandm   s   

zPackagingMagics._run_commandc                 C   ó   t dƒ}|  ||¡ dS )zqRun the conda package manager within the current kernel.

        Usage:
          %conda install [pkgs]
        ÚcondaN©r(   rT   )rA   rB   rV   r   r   r   rV   …   ó   zPackagingMagics.condac                 C   rU   )zqRun the mamba package manager within the current kernel.

        Usage:
          %mamba install [pkgs]
        r   NrW   )rA   rB   r   r   r   r   r   �   rX   zPackagingMagics.mambac                 C   rU   )zvRun the conda package manager within the current kernel.

        Usage:
          %micromamba install [pkgs]
        Ú
micromambaNrW   )rA   rB   rY   r   r   r   rY   ›   rX   zPackagingMagics.micromambac                 C   r1   )zoRun the uv package manager within the current kernel.

        Usage:
          %uv pip install [pkgs]
        r2   r3   r4   r5   Úuvr7   Nr8   r@   r   r   r   rZ   ¦   rD   zPackagingMagics.uvN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r6   rT   r   rV   r   rY   rZ   r   r   r   r   r0   X   s     
			r0   )r^   r   r   r#   r:   r   Úpathlibr   ZIPython.core.magicr   r   r   r   r(   rO   rJ   rP   rM   r0   r   r   r   r   Ú<module>   s     
*