o
    poi                  
   @   s  U 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 d dlm	Z	 dZ
e  ejddZeed< ee j ejdd	dd
d7 Zee  ejd	d7 Zeje
rYee
g7 Zefde	eee f de	eee f ddfddZdedee ddfddZdeddfddZd$deddfddZefde	eee f ddfddZdedededdfddZdedededdfd d!Zefdedede	eee f ddfd"d#ZdS )%    N)Sequence)pprint)Unionzrequirements.txtrequirementsz*.txtREQUIREMENT_FILES_ALLz**T)	recursivepyproject.tomlpackages	req_filesreturnc                 C   s8   t | tr| g} t |tr|g}|D ]}t||  qdS )2Remove some packages from given requirement files.N)
isinstancestr_prune_packages)r	   r
   req r   X/home/ubuntu/.local/lib/python3.10/site-packages/lightning_utilities/cli/dependencies.pyprune_packages_in_requirements   s   

r   req_filec                    s   t | }| }W d   n1 sw   Y  t|tr |g}|D ]  fdd|D }q"t| t | d}|| W d   dS 1 sHw   Y  dS )r   Nc                    s   g | ]	}|  s|qS r   )
startswith).0lnpkgr   r   
<listcomp>)   s    z#_prune_packages.<locals>.<listcomp>w)open	readlinesr   r   r   
writelines)r   r	   fplinesr   r   r   r   !   s   


"r   c                 C   sr   t | }| dd}W d    n1 sw   Y  t | d}|| W d    d S 1 s2w   Y  d S )N>===r   )r   readreplacewrite)r   fopenr   fwr   r   r   _replace_min_req_in_txt0   s   
"r(   	proj_filec                 C   s   ddl }t| dd}| }W d   n1 sw   Y  ||}|di d}|s0dS t|D ]\}}|dd||< q4t| d	dd}||| W d   dS 1 s\w   Y  dS )
zYReplace all `>=` with `==` in the standard pyproject.toml file in [project.dependencies].r   Nutf-8encodingprojectdependenciesr!   r"   r   )	tomlkitr   r#   parseget	enumerater$   r%   dumps)r)   r/   fcontentdocdepsir   r   r   r   "_replace_min_req_in_pyproject_toml7   s   

"r9   c                 C   sd   t | tr| g} | D ]%}|drt| q
tj|dkr#t| q
tj	d| dt
dd q
dS )z-Replace the min package version by fixed one..txtr   ^Only *.txt with plain list of requirements or standard pyproject.toml are supported.Provided '' is not supported.   
stacklevelN)r   r   endswithr(   ospathbasenamer9   warningswarnUserWarning)r
   fnamer   r   r   replace_oldest_versionO   s   



rH   old_packagenew_packagec                 C   s   t | }| }W d   n1 sw   Y  t|D ]\}}tdt| d ||||< qt | d}|| W d   dS 1 sGw   Y  dS )zQReplace one package by another with the same version in a given requirement file.N^z(?=[ <=>#]|$)r   )r   r   r2   resubescaper   )r   rI   rJ   r&   r   r8   r   r'   r   r   r   _replace_package_name_in_txta   s   

""rO   c           
      C   s   ddl }t| dd}| }W d   n1 sw   Y  ||}|di d}|s0dS t|D ]\}}	tdt| d ||	||< q4t| d	dd}|	|
| W d   dS 1 sdw   Y  dS )
zYReplace one package by another with the same version in the standard pyproject.toml file.r   Nr*   r+   r-   r.   rK   z(?=[ <=>]|$)r   )r/   r   r#   r0   r1   r2   rL   rM   rN   r%   r3   )
r)   rI   rJ   r/   r4   r5   r6   r7   r8   r   r   r   r   '_replace_package_name_in_pyproject_tomln   s   

""rP   c                 C   sl   t |tr|g}|D ])}|drt|| | q
tj|dkr't|| | q
tj	d| dt
dd q
dS )zLReplace one package by another with same version in given requirement files.r:   r   r;   r<   r=   r>   N)r   r   r@   rO   rA   rB   rC   rP   rD   rE   rF   )rI   rJ   r
   rG   r   r   r   replace_package_in_requirements   s   

rQ   )r   )globos.pathrA   rL   rD   collections.abcr   r   typingr   REQUIREMENT_ROOTrB   joinr   list__annotations__isfiler   r   r   r(   r9   rH   rO   rP   rQ   r   r   r   r   <module>   sJ   


"