
    c                        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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d0d(Zd1d)Z dS )2zUtility functions and classes.    )annotationsN)Fieldfieldsis_dataclassreplace)Path)AnyCallable	GeneratorMappingTypeVarRequirement)SpecifierSet   )	DataclassKey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 )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 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       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;   8   s6      " & &
*%%%%%%& &r"   Tr   )bounddataclass_fieldsdict[str, Field[Any]]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>B   s@       D%
##ej  r"   )items)r>   s    r!   
_subtablesrJ   A   s/     +1133   r"   c                4    d t          |           D             S )Nc                ,    i | ]}|j         	|j        |S rC   )initrF   )rE   rG   s     r!   rH   z_fields.<locals>.<dictcomp>J   s#    KKK%
KEJKKKr"   )r   )	dataclasss    r!   _fieldsrO   I   s    KK6)+<+<KKKKr"   rN   Callable[..., 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   )rO   rJ   rI   
isinstancer   _dict_to_dataclassrN   rQ   filtered_arg_dictr>   
sub_tableskey_namevalue	sub_tables           r!   rU   rU   M   s    (*y)),--J%++-- 0 0%z! 	0"8,IeW-----*<Y*N*Nh'')) 	0*/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.)rO   rJ   rI   getattrrT   r   _recursive_merger   rV   s           r!   r^   r^   [   s    (*y)),--J%++-- 0 0%z! 	0	844IeW-----*:9e*L*Lh'')) 	0*/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@   )r   r?   )rN   rP   rQ   rR   r   r<   )rN   r<   rQ   rR   r   r<   )!__doc__
__future__r   r+   dataclassesr   r   r   r   pathlibr   typingr	   r
   r   r   r   packaging.requirementsr   packaging.specifiersr   typesr   r   r   r2   r5   r;   r<   rJ   rO   rU   r^   rC   r"   r!   <module>rg      s   $ $ " " " " " " 



 < < < < < < < < < < < <       = = = = = = = = = = = = = = . . . . . . - - - - - - ! ! ! ! ! ! ! ! GKG G G G G"	' 	' 	' 	'	 	 	 	& & & & GC{###   L L L L* * * *3 3 3 3 3 3r"   