o
    5‘ði‹  ã                   @  s¼   d Z ddlmZ ddlZddlZddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ dd	lmZ ed
dd�Zeddd�Zdd„ Zd%dd„Zefd&dd„Z	d'd(d"d#„Zejeed$�ZdS ))z2Timestamp comparison of files and groups of files.é    )ÚannotationsN)ÚCallableÚIterable)ÚLiteralÚTypeVar)Úsplaté   )Ú
zip_strict)ÚDistutilsFileErrorÚ	_SourcesTú3str | bytes | os.PathLike[str] | os.PathLike[bytes])ÚboundÚ	_TargetsTc                 C  s&   t j |¡ pt j | ¡t j |¡kS ©N)ÚosÚpathÚexistsÚgetmtime©ÚsourceÚtarget© r   ú^/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_distutils/_modified.pyÚ_newer   s   ÿr   r   r   ÚreturnÚboolc                 C  s.   t j | ¡stdt j | ¡›d�ƒ‚t| |ƒS )zÛ
    Is source modified more recently than target.

    Returns True if 'source' is modified more recently than
    'target' or if 'target' does not exist.

    Raises DistutilsFileError if 'source' does not exist.
    zfile z does not exist)r   r   r   r
   Úabspathr   r   r   r   r   Únewer   s   
r   ÚsourcesúIterable[_SourcesT]ÚtargetsúIterable[_TargetsT]ú&Callable[[_SourcesT, _TargetsT], bool]ú'tuple[list[_SourcesT], list[_TargetsT]]c                 C  s.   t t|ƒt| |ƒƒ}tttt|Ž ƒƒpg g fS )a1  
    Filter filenames where sources are newer than targets.

    Walk two filename iterables in parallel, testing if each source is newer
    than its corresponding target.  Returns a pair of lists (sources,
    targets) where source is newer than target, according to the semantics
    of 'newer()'.
    )Úfilterr   r	   ÚtupleÚmapÚlistÚzip)r   r    r   Únewer_pairsr   r   r   Únewer_pairwise/   s   r*   Úerrorú=Iterable[str | bytes | os.PathLike[str] | os.PathLike[bytes]]Úmissingú#Literal['error', 'ignore', 'newer']c                   sL   ‡ fdd„‰ˆ dkrt jjnd}t j ˆ¡ p%t‡‡fdd„t|| ƒD ƒƒS )aÛ  
    Is target out-of-date with respect to any file in sources.

    Return True if 'target' is out-of-date with respect to any file
    listed in 'sources'. In other words, if 'target' exists and is newer
    than every file in 'sources', return False; otherwise return True.
    ``missing`` controls how to handle a missing source file:

    - error (default): allow the ``stat()`` call to fail.
    - ignore: silently disregard any missing source files.
    - newer: treat missing source files as "target out of date". This
      mode is handy in "dry-run" mode: it will pretend to carry out
      commands that wouldn't work because inputs are missing, but
      that doesn't matter because dry-run won't run the commands.
    c                   s   ˆ dko
t j | ¡ S )Nr   )r   r   r   )r   )r-   r   r   Úmissing_as_newerU   s   z%newer_group.<locals>.missing_as_newerÚignoreNc                 3  s"   � | ]}ˆ |ƒpt |ˆƒV  qd S r   )r   )Ú.0r   )r/   r   r   r   Ú	<genexpr>Y   s
   € ÿ
ÿznewer_group.<locals>.<genexpr>)r   r   r   Úanyr$   )r   r   r-   Úignoredr   )r-   r/   r   r   Únewer_group@   s
   þr5   )r   )r   r   r   r   r   r   )r   r   r    r!   r   r"   r   r#   )r+   )r   r,   r   r   r-   r.   r   r   )Ú__doc__Ú
__future__r   Ú	functoolsÚos.pathr   Úcollections.abcr   r   Útypingr   r   Újaraco.functoolsr   Úcompat.py39r	   Úerrorsr
   r   r   r   r   r*   r5   ÚpartialÚnewer_pairwise_groupr   r   r   r   Ú<module>   s,    ÿÿ
ýý