
    Qne                        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d0d#Zd1d&Zd2d*Z d3d+Z!dS )4zUtility functions and classes.    )annotationsN)Fieldfieldsis_dataclassreplace)Path)TYPE_CHECKINGAny	GeneratorMappingTypeVarRequirement)SpecifierSet   )Key)DataclassInstanceworking_directoryr   filenamestrbaseslist[str] | NonereturnPath | Nonec                    |ddg}	 | |z  }|                                 r|S |D ]}| |z                                   r dS | | j        k    rdS 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)r   r   r   targetbases        2lib/python3.11/site-packages/pytoolconfig/utils.pyr   r      s      }2)F}}   $,,.. 	44	-444t-4hFFF    	specifiertuple[int, int]c                    t          |           }t          dt          j        j                  D ] }|                    d|           r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r#   parsedis      r!   min_py_versionr2   0   sm    
 )$$F1c&,--  ??888$$ 	q6MMM	s%&&r"   c                    t          |           }t          t          j        j        dd          D ] }|                    d|           rd|fc S !dS )zSReturn the maximum python 3 version.

    Between 3.4 and interpreter version.
    r&   r'   r(   )r(   r&   r)   r/   s      r!   max_py_versionr5   <   sc    
 )$$F3#)1b11  ??888$$ 	q6MMM	6r"   dependencies	list[str]"Generator[Requirement, None, None]c              #  6   K   | D ]}t          |          V  dS )z1Parse the dependencies from TOML using packaging.Nr   )r6   
dependencys     r!   parse_dependenciesr;   H   s6      " & &
*%%%%%%& &r"   Tr   )bounddataclass_fieldsdict[str, Field]dict[str, type[Any]]c                >    d |                                  D             S )Nc                L    i | ]!\  }}t          |j                  ||j        "S  )r   type).0namefields      r!   
<dictcomp>z_subtables.<locals>.<dictcomp>R   s@       D%
##ej  r"   )items)r>   s    r!   
_subtablesrJ   Q   s/     +1133   r"   	dataclass+DataclassInstance | type[DataclassInstance]c                4    d t          |           D             S )Nc                ,    i | ]}|j         	|j        |S rC   )initrF   )rE   rG   s     r!   rH   z_fields.<locals>.<dictcomp>Z   s#    KKK%
KEJKKKr"   )r   )rK   s    r!   _fieldsrP   Y   s    KK6)+<+<KKKKr"   type[T]
dictionaryMapping[str, Key]c                   i }t          |           }t          |          }|                                D ]E\  }}||v r3||         }t          |t                    sJ t          ||          ||<   <||v r|||<   F | di |S )NrC   )rP   rJ   rI   
isinstancer   _dict_to_dataclassrK   rR   filtered_arg_dictr>   
sub_tableskey_namevalue	sub_tables           r!   rV   rV   ]   s     )+y)),--J%++-- 0 0%z!!"8,IeW-----*<Y*N*Nh'')))*/h'9))()))r"   c                    i }t          |           }t          |          }|                                D ]M\  }}||v r;t          | |          }t	          |t
                    sJ t          ||          ||<   D||v r|||<   Nt          | fi |S )z?Overwrite every value specified in dictionary on the dataclass.)rP   rJ   rI   getattrrU   r   _recursive_merger   rW   s           r!   r_   r_   n   s    (*y)),--J%++-- 0 0%z!!	844IeW-----*:9e*L*Lh'')))*/h'922 1222r"   )N)r   r   r   r   r   r   r   r   )r#   r   r   r$   )r6   r7   r   r8   )r>   r?   r   r@   )rK   rL   r   r?   )rK   rQ   rR   rS   r   r<   )rK   r<   rR   rS   r   r<   )"__doc__
__future__r   r+   dataclassesr   r   r   r   pathlibr   typingr	   r
   r   r   r   packaging.requirementsr   packaging.specifiersr   typesr   	_typeshedr   r   r2   r5   r;   r<   rJ   rP   rV   r_   rC   r"   r!   <module>ri      s   $ $ " " " " " " 



 < < < < < < < < < < < <       B B B B B B B B B B B B B B . . . . . . - - - - - -       ,++++++ #G G G G G<	' 	' 	' 	'	 	 	 	& & & & GC*+++   L L L L* * * *"3 3 3 3 3 3r"   