
    5h                        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          Z edd          Zd Zd"dZefd#dZ	 d$d%d Z ej        ee!          ZdS )&z2Timestamp comparison of files and groups of files.    )annotationsN)CallableIterable)LiteralTypeVar)splat   )
zip_strict)DistutilsFileError	_SourcesT3str | bytes | os.PathLike[str] | os.PathLike[bytes])bound	_TargetsTc                    t           j                            |           p?t           j                            |           t           j                            |          k    S N)ospathexistsgetmtimesourcetargets     ?lib/python3.11/site-packages/setuptools/_distutils/_modified.py_newerr      sH    w~~f%%% 
  27#3#3F#;#;;    r   r   returnboolc                    t           j                            |           s0t          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   s     r   newerr       sS     7>>&!! U !S)@)@!S!S!STTT&&!!!r   sourcesIterable[_SourcesT]targetsIterable[_TargetsT]r    &Callable[[_SourcesT, _TargetsT], bool]'tuple[list[_SourcesT], list[_TargetsT]]c                    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_pairss       r   newer_pairwiser.   /   sI     uz'7'C'CDDKT3,--..:2r(:r   error=Iterable[str | bytes | os.PathLike[str] | os.PathLike[bytes]]missing#Literal['error', 'ignore', 'newer']c                    fddk    rt           j        j        nd}t           j                                       p)t          f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                P    dk    ot           j                            |            S )Nr    )r   r   r   )r   r1   s    r   missing_as_newerz%newer_group.<locals>.missing_as_newerU   s$    '!@"'..*@*@&@@r   ignoreNc              3  N   K   | ]} |          pt          |          V   d S r   )r   ).0r   r5   r   s     r   	<genexpr>znewer_group.<locals>.<genexpr>Y   sQ       - - 	  :F66$:$:- - - - - -r   )r   r   r   anyr(   )r!   r   r1   ignoredr5   s    `` @r   newer_groupr<   @   s    *A A A A A !(8 3 3bgnnGw~~f%%%  - - - - -Wg..- - - * * r   )r    )r   r   r   r   r   r   )r!   r"   r#   r$   r    r%   r   r&   )r/   )r!   r0   r   r   r1   r2   r   r   )__doc__
__future__r   	functoolsos.pathr   collections.abcr   r   typingr   r   jaraco.functoolsr   compat.py39r
   errorsr   r   r   r   r    r.   r<   partialnewer_pairwise_group r   r   <module>rI      sQ   8 8 " " " " " "      . . . . . . . . # # # # # # # # " " " " " " # # # # # # & & & & & &GL  	 GL  	
  " " " "* 5:; ; ; ; ;( 4;    > )y({KKK   r   