Ë
    øÿæi  ã            
       ó¨  — 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 j                   ej                  j                  dd«      «      Zeed<   e e j                   ej                  j                  dd	d«      d
¬«      z  Ze e j                   ej                  j                  d	d«      «      z  Zej                  j!                  e
«      ree
gz  Zefde	eee   f   de	eee   f   ddfd„Zdedee   ddfd„Zdeddfd„Zddeddfd„Zefde	eee   f   ddfd„Zdedededdfd„Zdedededdfd„Zefdedede	eee   f   ddfd„Zy)é    N)ÚSequence)Úpprint)ÚUnionzrequirements.txtÚrequirementsz*.txtÚREQUIREMENT_FILES_ALLz**T)Ú	recursiveúpyproject.tomlÚpackagesÚ	req_filesÚreturnc                 óv   — t        | t        «      r| g} t        |t        «      r|g}|D ]  }t        || «       Œ y)zãRemove one or more packages from the specified requirement files.

    Args:
        packages: A package name or list of package names to remove.
        req_files: A path or list of paths to requirement files to process.

    N)Ú
isinstanceÚstrÚ_prune_packages)r
   r   Úreqs      úy/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_utilities/cli/dependencies.pyÚprune_packages_in_requirementsr      s:   € ô �(œCÔ Ø�:ˆÜ�)œSÔ!Ø�Kˆ	ÛˆÜ˜˜XÕ&ñ ó    Úreq_filec                 ó^  — t        | «      5 }|j                  «       }ddd«       t        |t        «      r|g}|D ]#  }D �cg c]  }|j	                  |«      rŒ|‘Œ }}Œ% t        «       t        | d«      5 }|j                  |«       ddd«       y# 1 sw Y   ŒvxY wc c}w # 1 sw Y   yxY w)zúRemove all occurrences of the given packages (by line prefix) from a requirements file.

    Args:
        req_file: Path to a requirements file.
        packages: Package names to remove. Lines starting with any of these names will be dropped.

    NÚw)ÚopenÚ	readlinesr   r   Ú
startswithr   Ú
writelines)r   r
   ÚfpÚlinesÚpkgÚlns         r   r   r   '   s•   € ô 
ˆhŒ˜2Ø—‘“ˆ÷ 
ô �(œCÔ Ø�:ˆÛˆÙ#Ó>™e˜¨2¯=©=¸Õ+=’˜eˆÑ>ð ä
ˆ5„Mä	ˆh˜Ô	 Ø
�‰�eÔ÷ 
Ð	÷ 
ˆüò ?÷ 
Ð	ús#   ŒBÁBÁBÁ7B#ÂBÂ#B,c                 óè   — t        | «      5 }|j                  «       j                  dd«      }ddd«       t        | d«      5 }|j                  «       ddd«       y# 1 sw Y   Œ0xY w# 1 sw Y   yxY w)z¡Replace all occurrences of '>=' with '==' in a plain text requirements file.

    Args:
        req_file: Path to the requirements.txt-like file to update.

    ú>=ú==Nr   )r   ÚreadÚreplaceÚwrite)r   Úfopenr   Úfws       r   Ú_replace_min_req_in_txtr(   <   sX   € ô 
ˆhŒ˜5Ø�j‰j‹l×"Ñ" 4¨Ó.ˆ÷ 
ä	ˆh˜Ô	 Ø
�‰�Œ÷ 
Ð	÷ 
ˆúç	Ð	ús   Œ!AÁA(ÁA%Á(A1Ú	proj_filec                 ó°  — ddl }t        | d¬«      5 }|j                  «       }ddd«       |j                  «      }|j	                  di «      j	                  d«      }|syt        |«      D ]  \  }}|j                  dd«      ||<   Œ t        | d	d¬«      5 }|j                  |j                  |«      «       ddd«       y# 1 sw Y   ŒžxY w# 1 sw Y   yxY w)
zÙReplace all '>=' with '==' in the [project.dependencies] section of a standard pyproject.toml.

    Preserves formatting and comments using tomlkit.

    Args:
        proj_file: Path to the pyproject.toml file.

    r   Núutf-8©ÚencodingÚprojectÚdependenciesr!   r"   r   )	Útomlkitr   r#   ÚparseÚgetÚ	enumerater$   r%   Údumps)r)   r0   ÚfÚcontentÚdocÚdepsÚir   s           r   Ú"_replace_min_req_in_pyproject_tomlr:   I   s½   € ó ô 
ˆi 'Õ	*¨aØ—&‘&“(ˆ÷ 
+à
�-‰-˜Ó
 €Cð �7‰7�9˜bÓ!×%Ñ% nÓ5€DÙØô ˜D–/‰ˆˆ3à—+‘+˜d DÓ)ˆˆQŠð "ô
 
ˆi˜ wÕ	/°1Ø	�‰�—‘˜cÓ"Ô#÷ 
0Ð	/÷ 
+Ð	*ú÷ 
0Ð	/ús   ’C Â!CÃ C	ÃCc                 ó  — t        | t        «      r| g} | D ]m  }|j                  d«      rt        |«       Œ t        j
                  j                  |«      dk(  rt        |«       ŒNt        j                  d|› d�t        d¬«       Œo y)a#  Convert minimal version specifiers (>=) to pinned ones (==) in the given requirement files.

    Supports plain *.txt requirements and pyproject.toml files. Unsupported file types trigger a warning.

    Args:
        req_files: A path or list of paths to requirement files to process.

    ú.txtr	   ú^Only *.txt with plain list of requirements or standard pyproject.toml are supported.Provided 'ú' is not supported.é   ©Ú
stacklevelN)r   r   Úendswithr(   ÚosÚpathÚbasenamer:   ÚwarningsÚwarnÚUserWarning)r   Úfnames     r   Úreplace_oldest_versionrJ   h   sw   € ô �)œSÔ!Ø�Kˆ	ÛˆØ�>‰>˜&Ô!Ü# EÕ*Ü�W‰W×Ñ˜eÓ$Ð(8Ò8Ü.¨uÕ5ä�M‰MðØ"˜GÐ#6ð8äØö	ñ r   Úold_packageÚnew_packagec                 óT  — t        | «      5 }|j                  «       }ddd«       t        «      D ]8  \  }}t        j                  dt        j
                  |«      z   dz   ||«      ||<   Œ: t        | d«      5 }|j                  |«       ddd«       y# 1 sw Y   ŒvxY w# 1 sw Y   yxY w)a   Rename a package in a plain text requirements file, preserving version specifiers and markers.

    Args:
        req_file: Path to the requirements.txt-like file to update.
        old_package: The original package name to replace.
        new_package: The new package name to use.

    NÚ^z(?=[ <=>#]|$)r   )r   r   r3   ÚreÚsubÚescaper   )r   rK   rL   r&   r   r9   r   r'   s           r   Ú_replace_package_name_in_txtrR   �   s’   € ô 
ˆhŒ˜5Ø—‘Ó(ˆ÷ 
ô ˜LÖ)‰ˆˆ3ÜŸ&™& ¬¯	©	°+Ó(>Ñ!>ÐAQÑ!QÐS^Ð`cÓdˆ�QŠð *ô 
ˆh˜Ô	 Ø
�‰�lÔ#÷ 
Ð	÷ 
ˆú÷ 
Ð	ús   ŒBÁ7BÂBÂB'c                 óì  — ddl }t        | d¬«      5 }|j                  «       }ddd«       |j                  «      }|j	                  di «      j	                  d«      }|syt        |«      D ]8  \  }}	t        j                  dt        j                  |«      z   dz   ||	«      ||<   Œ: t        | d	d¬«      5 }|j                  |j                  |«      «       ddd«       y# 1 sw Y   Œ¼xY w# 1 sw Y   yxY w)
a  Rename a package in the [project.dependencies] section of a standard pyproject.toml, preserving constraints.

    Args:
        proj_file: Path to the pyproject.toml file.
        old_package: The original package name to replace.
        new_package: The new package name to use.

    r   Nr+   r,   r.   r/   rN   z(?=[ <=>]|$)r   )r0   r   r#   r1   r2   r3   rO   rP   rQ   r%   r4   )
r)   rK   rL   r0   r5   r6   r7   r8   r9   r   s
             r   Ú'_replace_package_name_in_pyproject_tomlrT   •   sÓ   € ó ô 
ˆi 'Õ	*¨aØ—&‘&“(ˆ÷ 
+à
�-‰-˜Ó
 €Cð �7‰7�9˜bÓ!×%Ñ% nÓ5€DÙØô ˜D–/‰ˆˆ3ä—&‘&˜¤§	¡	¨+Ó 6Ñ6¸ÑHÈ+ÐWZÓ[ˆˆQŠð "ô
 
ˆi˜ wÕ	/°1Ø	�‰�—‘˜cÓ"Ô#÷ 
0Ð	/÷ 
+Ð	*ú÷ 
0Ð	/ús   ’CÂ4!C*ÃC'Ã*C3c                 ó  — t        |t        «      r|g}|D ]q  }|j                  d«      rt        || |«       Œ"t        j
                  j                  |«      dk(  rt        || |«       ŒRt        j                  d|› d�t        d¬«       Œs y)a‘  Rename a package across multiple requirement files while keeping version constraints intact.

    Supports plain *.txt requirements and pyproject.toml files. Unsupported file types trigger a warning.

    Args:
        old_package: The original package name to replace.
        new_package: The new package name to use.
        req_files: A path or list of paths to requirement files to process.

    r<   r	   r=   r>   r?   r@   N)r   r   rB   rR   rC   rD   rE   rT   rF   rG   rH   )rK   rL   r   rI   s       r   Úreplace_package_in_requirementsrV   ´   s   € ô �)œSÔ!Ø�Kˆ	ÛˆØ�>‰>˜&Ô!Ü(¨°¸[ÕIÜ�W‰W×Ñ˜eÓ$Ð(8Ò8Ü3°E¸;ÈÕTä�M‰MðØ"˜GÐ#6ð8äØö	ñ r   )r	   )ÚglobÚos.pathrC   rO   rF   Úcollections.abcr   r   Útypingr   ÚREQUIREMENT_ROOTrD   Újoinr   ÚlistÚ__annotations__Úisfiler   r   r   r(   r:   rJ   rR   rT   rV   © r   r   Ú<module>ra      sä  ðô
 Û Û 	Û Ý $Ý Ý à%Ð Ø'˜dŸi™i¨¯©¯©°^ÀWÓ(MÓNÐ �tÓ NØ ˜˜Ÿ™ 2§7¡7§<¡<°ÀÀgÓ#NÐZ^Ô_Ñ _Ð Ø ˜˜Ÿ™ 2§7¡7§<¡<°Ð6FÓ#GÓHÑ HÐ Ø‡7�7‡>�>Ð"Ô#ØÐ.Ð/Ñ/Ðð Qfñ'Ø�C˜ #™Ð&Ñ'ð'Ø49¸#¸xÈ¹}Ð:LÑ4Mð'à	ó'ð$˜cð ¨X°c©]ð ¸tó ð*
 cð 
¨dó 
ñ$°#ð $ÈTó $ð> CXñ  e¨C°¸#±Ð,>Ñ&?ð Ð\`ó ð2$¨3ð $¸Sð $Èsð $ÐW[ó $ð($°sð $Èð $Ð[^ð $Ðcgó $ð@ PeñØðØ#&ðØ38¸¸hÀs¹mÐ9KÑ3Lðà	ôr   