
     Rne                       d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
 ddlmZmZmZmZmZ ddlmZ ddlmZ d	d
lmZ erddlmZ 	 d	 	 	 	 	 	 	 ddZddZddZddZ edd      ZddZddZ	 	 	 	 	 	 ddZ ddZ!y)zUtility functions and classes.    )annotationsN)Fieldfieldsis_dataclassreplace)Path)TYPE_CHECKINGAny	GeneratorMappingTypeVarRequirement)SpecifierSet   )Key)DataclassInstancec                    |ddg}	 | |z  }|j                         r|S |D ]  }| |z  j                         s y | | j                  k(  ryt        | j                  ||      S )zFind a configuration file given a working directory.

    Args:
        working_directory: Working directory to start from
        filename: Filename to look for
        bases: Bases to stop at

    Returns:
        Path of config file

    Nz.gitz.hg)existsparentfind_config_file)working_directoryfilenamebasestargetbases        2lib/python3.12/site-packages/pytoolconfig/utils.pyr   r      sz      }2)F}} $,,. -444-44hFF    c                    t        |       }t        dt        j                  j                        D ]  }|j                  d|       sd|fc S  dt        j                  j                  fS )zSReturn the minimum python 3 version.

    Between 3.4 and interpreter version.
       3.   r   rangesysversion_infominorcontains	specifierparsedis      r   min_py_versionr-   0   sd    
 )$F1c&&,,- ??Rs8$q6M s%%&&r   c                    t        |       }t        t        j                  j                  dd      D ]  }|j                  d|       sd|fc S  y)zSReturn the maximum python 3 version.

    Between 3.4 and interpreter version.
    r    r!   r"   )r"   r    r#   r)   s      r   max_py_versionr0   <   sR    
 )$F3##))1b1 ??Rs8$q6M r   c              #  4   K   | D ]  }t        |        yw)z1Parse the dependencies from TOML using packaging.Nr   )dependencies
dependencys     r   parse_dependenciesr4   H   s      " &
*%%&s   Tr   )boundc                    | j                         D ci c]'  \  }}t        |j                        r||j                  ) c}}S c c}}w N)itemsr   type)dataclass_fieldsnamefields      r   
_subtablesr>   Q   sF     ,113D%

# 	ejj  s   ,Ac                n    t        |       D ci c]  }|j                  s|j                  | c}S c c}w r8   )r   initr<   )	dataclassr=   s     r   _fieldsrB   Y   s*    +1)+<K%

EJJKKKs   22c                    i }t        |       }t        |      }|j                         D ]:  \  }}||v r'||   }t        |t              sJ t        ||      ||<   1||v s6|||<   <  | di |S )N )rB   r>   r9   
isinstancer   _dict_to_dataclassrA   
dictionaryfiltered_arg_dictr;   
sub_tableskey_namevalue	sub_tables           r   rF   rF   ]   s     )+y),-J%++- 0%z!"8,IeW--*<Y*Nh'))*/h'0 )())r   c                    i }t        |       }t        |      }|j                         D ]A  \  }}||v r.t        | |      }t	        |t
              sJ t        ||      ||<   8||v s=|||<   C t        | fi |S )z?Overwrite every value specified in dictionary on the dataclass.)rB   r>   r9   getattrrE   r   _recursive_merger   rG   s           r   rP   rP   n   s    (*y),-J%++- 0%z!	84IeW--*:9e*Lh'))*/h'0 92 122r   r8   )r   r   r   strr   zlist[str] | NonereturnzPath | None)r*   rQ   rR   ztuple[int, int])r2   z	list[str]rR   z"Generator[Requirement, None, None])r;   dict[str, Field]rR   zdict[str, type[Any]])rA   z+DataclassInstance | type[DataclassInstance]rR   rS   )rA   ztype[T]rH   Mapping[str, Key]rR   r5   )rA   r5   rH   rT   rR   r5   )"__doc__
__future__r   r%   dataclassesr   r   r   r   pathlibr   typingr	   r
   r   r   r   packaging.requirementsr   packaging.specifiersr   typesr   	_typeshedr   r   r-   r0   r4   r5   r>   rB   rF   rP   rD   r   r   <module>r^      s    $ " 
 < <  B B . - + #GGG G 	G<	'	& C*+L**!* *"3r   