o
    }!g%                     @   sB  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 ej	
ej	edZ	d$deeef dee ded	ee d
ef
ddZdeeef dee defddZ	d$d	ee dee d
edeee ee f fddZdefddZdd Zdd ZdeddfddZdeddfddZdedefdd Zd!eddfd"d#ZdS )%    N)Path)DictListTuplezmappings.jsonFmappingsinstalled_modulesline_idxlinesverbosec              	      s@  g }g }g }d}d}	||d  D ]}
|	d7 }	d|
v r?|
|
  dd   g}|d dr6g |d< d}n	|
|d d	g}|rYd
|
v rHd}nd|
vrY|d |
  dd |st|dkrdd |d D }i }|D ]M}|| v r| | }||vr|g||< qp|| | qptd| d |d dd dd }d|vr|dd}||vr|g||< qp|| | qp| D ]F\}}|dddd  |vr fdd|D }t|dkr|  |d  d d	|}|d| d| d d}i }g }q||||	f  S |s||
 q||||	fS )NFr      from  import (Tz, ), c                 S   s   g | ]}|  qS  )strip.0xr   r   ^/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/llama_index/cli/upgrade/base.py
<listcomp>(   s    z'_parse_from_imports.<locals>.<listcomp>zModule not found: z
Switching to corezllama_index.corellama_index.-_c                    s   g | ]}| v r|qS r   r   r   new_install_parentr   r   r   G       %pip install 
)	r   split
startswithappendreplacelenprintitemsjoin)r   r   r   r	   r
   	new_linesnew_installsimported_modulesparsing_modulesskipped_lineslineimported_module_namesnew_importsmodulenew_import_parentoverlapr   r   r   _parse_from_imports
   sp   


r6   r0   c                 C   s   d}t ||}g }g }|rX| \}}|r|n|}	|	| v rK| |	 }
|d|
 d|	 d |
dddd}||vrJ|d| d || ntd	|	 d
 || |||fS )Nzqdownload_loader\([\"']([A-Z,a-z]+)[\"'][\s,a-z,A-Z,_=]*\)|download_tool\([\"']([a-z,A-Z]+)[\"'][A-Z,a-z,\s,_=]*\)r   r   r"   r   r   r   r!   zReader/Tool not found: z
Keeping line as is.)researchgroupsr%   r&   r(   )r   r   r0   regexresultr+   r,   toolreaderr3   r4   r   r   r   r   _parse_hub_downloadsZ   s$   


r>   returnc                 C   s  t t}t|}W d    n1 sw   Y  g }g }d}d}t| D ]a\}	}
g }g }g }|dkr7|d8 }|r>|dkr>q%d}d|
v sLd|
v sLd|
v r\t|||	| |d\}}}}d}nd	|
v sdd
|
v rot|||
d\}}}n|st|
g}||7 }||7 }||7 }tt|}q%|tt|fS )NFr   r   zfrom llama_index.zfrom llama_index importzfrom llama_hub.)r   r   r   r	   r
   Tzdownload_loader(zdownload_tool()r   r   r0   )	openmappings_pathjsonload	enumerater6   r>   listset)r	   r   r
   fr   r,   r+   just_found_importsr/   idxr0   this_new_linesthis_new_installsthis_installed_modulesr   r   r   parse_linest   sb   
rM   c                    sJ   | d  g d}t  dkrdS | d dkr#t fdd|D r#d	S dS )
Nsource)zpip install llama-hubzimport download_loaderzimport download_toolr   F	cell_typecodec                 3   s    | ]	}| d  v V  qdS )r   Nr   )r   elr	   r   r   	<genexpr>   s    
z+_cell_installs_llama_hub.<locals>.<genexpr>T)r'   any)cellllama_hub_partial_statementsr   rR   r   _cell_installs_llama_hub   s   rW   c                 C   s2   | rt t| } | d d | d ddg S | S )Nr   r"   r   )rE   rF   r&   )r,   r   r   r   _format_new_installs   s   rX   c                 C   sj  t d|  ddd t| }t|}W d    n1 sw   Y  d}| dkr+d}dg}g }g }d}t|d	 D ]4\}}	|	d
 dkri|rOt d|	 dd |dkrU|}|	d }
t|
||\}}||7 }||	d< ||	 q:t|dkr||d	< di d g t|d}|	|| dd |D }||d	< t| d}tj
||ddd W d    d S 1 sw   Y  d S )Nz
=====================
r"   T)flushFz9../docs/examples/managed/manage_retrieval_benchmark.ipynbllama-index-corer   cellsrO   rP   zcell: rN   r   )rO   metadataexecution_countoutputsrN   c                 S      g | ]}t |s|qS r   )rW   )r   rU   r   r   r   r      r    z#upgrade_nb_file.<locals>.<listcomp>wr   )indentensure_ascii)r(   r@   rB   rC   rD   rM   r%   r'   rX   insertdump)	file_pathrG   notebookr
   r   	cur_cellsr,   first_code_idxrI   rU   rP   r+   cur_new_installsnew_cellr   r   r   upgrade_nb_file   sH   
"rk   re   c                 C   s   t | }| }W d    n1 sw   Y  dg}t||\}}t | d}|d| W d    n1 s:w   Y  t|dkrItd |D ]}t| dd qKd S )NrZ   r`   r   r   zNew installs:%)	r@   	readlinesrM   writer*   r'   r(   r   r&   )re   rG   r	   r   r+   r,   installr   r   r   upgrade_py_md_file   s   

rp   c                 C   s:   |  drt|  d S |  drt|  d S td|  )Nz.ipynb)z.pyz.mdzFile type not supported: )endswithrk   rp   	Exception)re   r   r   r   upgrade_file  s
   

rs   pathc                 C   s   t dd | jD S )Nc                 s   s"    | ]}| d o|dvV  qdS )r   )r   z..N)r$   )r   partr   r   r   rS     s     z_is_hidden.<locals>.<genexpr>)rT   parts)rt   r   r   r   
_is_hidden  s   rw   	input_dirc                 C   sn   t t| d}|t t| d7 }|t t| d7 }dd |D }|D ]}| r4tt| q(d S )Nz*.pyz*.ipynbz*.mdc                 S   r_   r   )rw   r   r   r   r   r     r    zupgrade_dir.<locals>.<listcomp>)rE   r   rglobis_filers   str)rx   	file_refsfile_refr   r   r   upgrade_dir  s   r~   )F)rB   osr7   pathlibr   typingr   r   r   rt   r*   dirname__file__rA   r{   intboolr6   r>   rM   rW   rX   rk   rp   rs   rw   r~   r   r   r   r   <module>   sT    

P


A.	