
    RiGh                       U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZ ddlmZmZmZmZmZmZmZ dd	lm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%m&Z& ddl'm(Z( ddl m)Z) erddl*m+Z+ ddl,m-Z- ddl.m/Z/ e0e1e2e1ef         f         Z3de4d<   	 e0e1e3f         Z5de4d<   	  eddd          Z6	 dFdGd$Z7dHd&Z8	 	 dIdJd+Z9dKd0Z:dLd3Z;	 dMdNd6Z<dOd;Z= G d< d=ee6                   Z> G d> d?e>d                   Z? G d@ dAe>d                   Z@ G dB dCe(          ZA G dD dEe(          ZBdS )Pa<  
Load setuptools configuration from ``setup.cfg`` files.

**API will be made private in the future**

To read project metadata, consider using
``build.util.project_wheel_metadata`` (https://pypi.org/project/build/).
For simple scenarios, you can also try parsing the file directly
with the help of ``configparser``.
    )annotationsN)abstractmethod)defaultdict)IterableIterator)partialwraps)TYPE_CHECKINGAnyCallableClassVarGenericTypeVarcast)default_environment)InvalidRequirementRequirement)InvalidVersionVersion   )_static)StrPath)	FileErrorOptionError)SetuptoolsDeprecationWarning   )expand)	TypeAliasDistribution)DistributionMetadatar   SingleCommandOptionsAllCommandOptionsTargetr    r!   Ffilepathr   find_othersboolignore_option_errorsreturndictc                    ddl m}  |            }|r|                                ng }t          || ||          }t	          |          S )a,  Read given configuration file and returns options from it as a dict.

    :param str|unicode filepath: Path to configuration file
        to get options from.

    :param bool find_others: Whether to search for other configuration files
        which could be on in various places.

    :param bool ignore_option_errors: Whether to silently ignore
        options, values of which could not be resolved (e.g. due to exceptions
        in directives such as file:, attr:, etc.).
        If False exceptions are propagated as expected.

    :rtype: dict
    r   r   )setuptools.distr    find_config_files_applyconfiguration_to_dict)r%   r&   r(   r    dist	filenameshandlerss          Z/Users/shanyulin/my-agent/.venv/lib/python3.11/site-packages/setuptools/config/setupcfg.pyread_configurationr4   3   s^    $ -,,,,,<>>D,7?&&(((RIdHi1EFFH ***    r0   c                N    t          | |           |                                  | S )z`Apply the configuration from a ``setup.cfg`` file into an existing
    distribution object.
    )r.   _finalize_requires)r0   r%   s     r3   apply_configurationr8   M   s+     4Kr5    other_filesIterable[StrPath]2tuple[ConfigMetadataHandler, ConfigOptionsHandler]c                f   ddl m} t          j                            |          }t          j                            |          st          d| d          t          j                    }t          j        t          j        	                    |                     g ||}	 |
                    | t          t          t                   |                     t          | | j        |          }|                                  t          j        |           n# t          j        |           w xY w|S )zHRead configuration from ``filepath`` and applies to the ``dist`` object.r   )_DistributionzConfiguration file z does not exist.)r1   )r(   )r,   r>   ospathabspathisfiler   getcwdchdirdirnameparse_config_filesr   liststrparse_configurationcommand_options_finalize_license_files)r0   r%   r:   r(   r>   current_directoryr1   r2   s           r3   r.   r.   V   s"    .-----wx((H7>>(## JHhHHHIII	HRW__X&&'''(+(x(I$((d3i9S9S(TTT&$&=Q
 
 
 	$$&&&
"####"####Os   #A D D.
target_obj#Distribution | DistributionMetadatakeyrH   c                x    d| }t          j        t          | |          }t          | ||          } |            S )z
    Given a target object and option key, get that option from
    the target object, either through a get_{key} method or
    from an attribute directly.
    get_)	functoolsr   getattr)rM   rO   getter_nameby_attributegetters        r3   _get_optionrW   u   s?     ,,K$Wj#>>LZl;;F688Or5   r2   KIterable[ConfigHandler[Distribution] | ConfigHandler[DistributionMetadata]]c                    t          t                    }| D ]1}|j        D ]'}t          |j        |          }|||j                 |<   (2|S )zReturns configuration data gathered by given handlers as a dict.

    :param Iterable[ConfigHandler] handlers: Handlers list,
        usually from parse_configuration()

    :rtype: dict
    )r   r*   set_optionsrW   rM   section_prefix)r2   config_dicthandleroptionvalues        r3   r/   r/      sk     $D))K @ @) 	@ 	@F 2F;;E:?K./77	@ r5   distributionrJ   c           	        t          j        |           5 }t          | |||          }|                                 | j        s|j        | _        t          | j        |||| j        | j                  }|                                 | j        	                    |j        |j                   ddd           n# 1 swxY w Y   ||fS )a  Performs additional parsing of configuration options
    for a distribution.

    Returns a list of used option handlers.

    :param Distribution distribution:
    :param dict command_options:
    :param bool ignore_option_errors: Whether to silently ignore
        options, values of which could not be resolved (e.g. due to exceptions
        in directives such as file:, attr:, etc.).
        If False exceptions are propagated as expected.
    :rtype: list
    N)
r   EnsurePackagesDiscoveredConfigOptionsHandlerparsepackage_dirConfigMetadataHandlermetadatasrc_root_referenced_filesupdate)r`   rJ   r(   ensure_discoveredoptionsmetas         r3   rI   rI      s   $ 
	(	6	6 
:K& 	
 
 	' 	;'.':L$$! $!
 
 	

&--%t'=	
 	
 	
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2 =s   BB77B;>B;label
orig_valueparsedrG   c                   d|v st                    dk    rdS t                                                      }	 t          d                   }|j        |v r$t
                              | d                    dS dS # t          $ rX}t          fd|D                       r2t
          	                    | d                   }t          |          |Y d}~dS d}~ww xY w)am  Because users sometimes misinterpret this configuration:

    [options.extras_require]
    foo = bar;python_version<"4"

    It looks like one requirement with an environment marker
    but because there is no newline, it's parsed as two requirements
    with a semicolon as separator.

    Therefore, if:
        * input string does not contain a newline AND
        * parsed result contains two requirements AND
        * parsing of the two parts from the result ("<first>;<second>")
        leads in a valid Requirement with a valid marker
    a UserWarning is shown to inform the user about the possible problem.
    
r   Nr   )fieldreqc              3  N   K   | ]}d                               |          V   dS )r   N
startswith).0markerrp   s     r3   	<genexpr>z8_warn_accidental_env_marker_misconfig.<locals>.<genexpr>   s5      BBvay##F++BBBBBBr5   )
len
marker_envkeysr   name_AmbiguousMarkeremitr   anymessage)rn   ro   rp   markersrt   exmsgs     `    r3   %_warn_accidental_env_marker_misconfigr      s   " zS[[A--ll!!G2&)$$8w!!6!9!=====  2 2 2BBBB'BBBBB 	2"**F1I*FFC$S))r1	2 	2 	2 	2 	2 	22s   A B   
C"
ACC"c                  D   e Zd ZU dZded<   	 i Zded<   	 d%dZed&d            Ze	e
d'd                        Zd(dZed)d            Zed             Zed             Zed             Zd*dZd+dZed             Zed             Zed,d!            Zd(d"Zd(d#Zd$ Zd S )-ConfigHandlerz1Handles metadata supplied in configuration files.rH   r[   zClassVar[dict[str, str]]aliasesrM   r$   rl   r#   rk   expand.EnsurePackagesDiscoveredr)   Nonec                    || _         || _        t          |                     |                    | _        g | _        || _        t          t                               | _	        d S N)
r(   rM   r*   _section_optionssectionsrZ   rk   setrH   ri   )selfrM   rl   r(   rk   s        r3   __init__zConfigHandler.__init__   sZ     %9!",T227;;<<&(!2!$S	 	r5   *Iterator[tuple[str, SingleCommandOptions]]c              #     K   |                                 D ]?\  }}|                    | j                  \  }}}|r&|                    d          |fV  @d S )N.)items	partitionr[   lstrip)clsrl   	full_namer_   pre_sepr~   s          r3   r   zConfigHandler._section_options  su       !( 	* 	*Iu'11#2DEEOCt ++c""E)))))		* 	*r5   dict[str, Callable]c                :    t          | j        j         d          ).Metadata item name to parser function mapping.z must provide .parsers property)NotImplementedError	__class____name__)r   s    r3   parserszConfigHandler.parsers  s'     "~&GGG
 
 	
r5   c                   | j         }| j                            ||          }	 t          ||          }n"# t          $ r}t          |          |d }~ww xY w|rd S 	  | j                            |d           |          }n# t          f| j        z  $ r Y d S w xY wt          j
        |j        |          }t          |d| |          } ||           | j                            |           d S )Nc                    | S r   r9   )xs    r3   <lambda>z+ConfigHandler.__setitem__.<locals>.<lambda>(  s    Q r5   set_)rM   r   getrS   AttributeErrorKeyErrorr   	Exceptionr(   rR   r   __setattr__rZ   append)	r   option_namer_   rM   current_valueerp   simple_settersetters	            r3   __setitem__zConfigHandler.__setitem__  s'   _
 l&&{K@@	/#J<<MM 	/ 	/ 	/;''Q.	/  	F	?T\%%k;;??FFFF|d77 	 	 	FF	 ")**@+NN%9K%9%9=IIv,,,,,s&   5 
AAA%B BB,c                    t          |t                    r|S d|v r|                                }n|                    |          }d |D             S )zRepresents value as a list.

        Value is split either by separator (defaults to comma) or by lines.

        :param value:
        :param separator: List items separator character.
        :rtype: list
        rr   c                ^    g | ]*}|                                 |                                 +S r9   strip)rx   chunks     r3   
<listcomp>z-ConfigHandler._parse_list.<locals>.<listcomp>D  s-    BBB%EKKMMBBBBr5   )
isinstancerG   
splitlinessplit)r   r_   	separators      r3   _parse_listzConfigHandler._parse_list2  s\     eT"" 	L5==$$&&EEKK	**EBB5BBBBr5   c                    d}i }|                      |          D ]\}|                    |          \  }}}||k    rt          d|           |                                ||                                <   ]|S )zPRepresents value as a dict.

        :param value:
        :rtype: dict
        =z&Unable to parse option value to dict: )r   r   r   r   )r   r_   r   resultlinerO   sepvals           r3   _parse_dictzConfigHandler._parse_dictF  s     	OOE** 	. 	.D NN955MCci!"R5"R"RSSS"%))++F399;;r5   c                2    |                                 }|dv S )zQRepresents value as boolean.

        :param value:
        :rtype: bool
        )1trueyes)lowerr   r_   s     r3   _parse_boolzConfigHandler._parse_boolW  s     ,,,r5   c                    fd}|S )zReturns a parser function to make sure field inputs
        are not files.

        Parses a value after getting the key so error messages are
        more informative.

        :param key:
        :rtype: callable
        c                    d}|                      |          rt          d d          t          j        |           S )Nfile:z"Only strings are accepted for the z field, files are not accepted)rw   
ValueErrorr   Str)r_   exclude_directiverO   s     r3   parserz3ConfigHandler._exclude_files_parser.<locals>.parserm  sZ     ' 122  - - - -   ;u%%%r5   r9   )r   rO   r   s    ` r3   _exclude_files_parserz#ConfigHandler._exclude_files_parsera  s#    	& 	& 	& 	& 	& r5   root_dirStrPath | Nonec                t   d}t          |t                    s|S |                    |          st          j        |          S |t          |          d         }d |                    d          D             }| j                            |           t          j        t          j
        ||                    S )aO  Represents value as a string, allowing including text
        from nearest files using `file:` directive.

        Directive is sandboxed and won't reach anything outside
        directory with setup.py.

        Examples:
            file: README.rst, CHANGELOG.md, src/file.txt

        :param str value:
        :rtype: str
        r   Nc                6    g | ]}|                                 S r9   r   )rx   r@   s     r3   r   z-ConfigHandler._parse_file.<locals>.<listcomp>  s     >>>dTZZ\\>>>r5   r   )r   rH   rw   r   r   r{   r   ri   rj   r   
read_files)r   r_   r   include_directivespec	filepathss         r3   _parse_filezConfigHandler._parse_filex  s     $%%% 	L 122 	&;u%%%S*++--.>>djjoo>>>	%%i000{6,YAABBBr5   r   c                    d}|                     |          st          j        |          S |                    |d          }|                    | j        j                   t          j        |||          S )zRepresents value as a module attribute.

        Examples:
            attr: package.attr
            attr: package.module.attr

        :param str value:
        :rtype: str
        zattr: )	rw   r   r   replacerj   rk   re   r   	read_attr)r   r_   re   r   attr_directive	attr_descs         r3   _parse_attrzConfigHandler._parse_attr  ss     !// 	&;u%%%MM."55	 	41=>>>	;AAAr5   c                    fd}|S )zReturns parser function to represents value as a list.

        Parses a value applying given methods one after another.

        :param parse_methods:
        :rtype: callable
        c                ,    | }D ]} ||          }|S r   r9   )r_   rp   methodparse_methodss      r3   rd   z1ConfigHandler._get_parser_compound.<locals>.parse  s+    F' ( (Mr5   r9   )r   r   rd   s    ` r3   _get_parser_compoundz"ConfigHandler._get_parser_compound  s#    	 	 	 	 	 r5   c                b    i }|                                 D ]\  }\  }} |||          ||<   |S )a  Parses section options into a dictionary.

        Applies a given parser to each option in a section.

        :param dict section_options:
        :param callable values_parser: function with 2 args corresponding to key, value
        :rtype: dict
        )r   )r   section_optionsvalues_parserr_   rO   _r   s          r3   _parse_section_to_dict_with_keyz-ConfigHandler._parse_section_to_dict_with_key  sH     ,2244 	1 	1MC!S&sC00E#JJr5   Nc                D    rfdnd }|                      ||          S )a   Parses section options into a dictionary.

        Optionally applies a given parser to each value.

        :param dict section_options:
        :param callable values_parser: function with 1 arg corresponding to option value
        :rtype: dict
        c                     |          S r   r9   )r   vr   s     r3   r   z6ConfigHandler._parse_section_to_dict.<locals>.<lambda>  s    }}Q// r5   c                    |S r   r9   )r   r   s     r3   r   z6ConfigHandler._parse_section_to_dict.<locals>.<lambda>  s    UV r5   )r   )r   r   r   r   s     ` r3   _parse_section_to_dictz$ConfigHandler._parse_section_to_dict  s7     5BW/////22?FKKKr5   c                    |                                 D ]>\  }\  }}t          j        t                    5  || |<   ddd           n# 1 swxY w Y   ?dS )zQParses configuration file section.

        :param dict section_options:
        N)r   
contextlibsuppressr   )r   r   r~   r   r_   s        r3   parse_sectionzConfigHandler.parse_section  s    
 !0 5 5 7 7 	# 	#D*1e$X.. # #"T
# # # # # # # # # # # # # # #	# 	#s   AA	A	c                    | j                                         D ]^\  }}d}|rd| }t          | d|                     dd          d          }|t	          d| j         d| d           ||           _dS )	zTParses configuration file items from one
        or more related sections.

        r   r   r   r   __Nz*Unsupported distribution option section: [])r   r   rS   r   r   r[   )r   section_namer   method_postfixsection_parser_methods        r3   rd   zConfigHandler.parse  s    
 .2]-@-@-B-B 	3 	3)L/N 4!3\!3!35<00088dCC	6 6! %,!>+> >.:> > >  
 "!/2222%	3 	3r5   c                D    t                    fd            }|S )zthis function will wrap around parameters that are deprecated

        :param msg: deprecation message
        :param func: function to be wrapped around
        c                 f                         dd           t          j        dfi   | i |S )N
stacklevelr   z Deprecated config in `setup.cfg`)
setdefault_DeprecatedConfigr   )argskwargsfunckwr   s     r3   config_handlerz@ConfigHandler._deprecated_config_handler.<locals>.config_handler  sH    MM,***"#EsQQbQQQ4((((r5   )r	   )r   r  r   r  r	  s    ``` r3   _deprecated_config_handlerz(ConfigHandler._deprecated_config_handler  sB     
t	) 	) 	) 	) 	) 	) 
	)
 r5   )rM   r$   rl   r#   rk   r   r)   r   )rl   r#   r)   r   r)   r   r)   r   )r   )r   r   )r   r   r   )r   
__module____qualname____doc____annotations__r   r   classmethodr   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   rd   r
  r9   r5   r3   r   r      s        ;;
 )+G****   " * * * [* 
 
 
 ^ X
- - - -4 C C C [C&   [  - - [-   [,C C C C6B B B B(   [&   [ 
L 
L 
L [
L# # # #3 3 3 32    r5   r   c                  f     e Zd ZdZdddddZdZ	 dej        fd fdZe	dd            Z
d Z xZS )rf   rg   urldescriptionclassifiers	platforms)	home_pagesummary
classifierplatformFNrM   r!   rl   r#   r(   r'   rk   r   re   dict | Noner   r   r)   r   c                l    t                                          ||||           || _        || _        d S r   )superr   re   r   )r   rM   rl   r(   rk   re   r   r   s          r3   r   zConfigMetadataHandler.__init__  s8     	W.BDUVVV& r5   r   c                    |                      | j        t          j                  }|                      | j        t          j                  }t          | j        | j                  }| j	        }i dt          j
        dt          j
        dt          j
        dt          j
        d|d|d|d	|d
|                      ||          d |d          d|d|d|dt          j
        d| j        dt          j
        d|S )r   r   authorauthor_email
maintainermaintainer_emailr  keywordsprovides	obsoletesr  licenselicense_filesr  long_descriptionlong_description_content_typeversionr  project_urls)r   r   r   Listr   Dictr   r   r   r   r   _parse_version)r   parse_list_staticparse_dict_static
parse_fileexclude_files_parsers        r3   r   zConfigMetadataHandler.parsers'  s^    !55d6FUU 55d6FUUT-FFF
#9
gk
GK
 '+
 	

 *
 )
 )
 *
 444ZARSS
 ++I66
 .
 :
 

 ,W[
 t*
  7;!
" -#
 	
r5   c                H   |                      || j                  }||k    rO|                                }	 t          |           n(# t          $ r}t          d| d|           |d}~ww xY w|S t          j        |                     || j	        | j                            S )zSParses `version` option value.

        :param value:
        :rtype: str

        zVersion loaded from z does not comply with PEP 440: N)
r   r   r   r   r   r   r   r,  r   re   )r   r_   r,  r   s       r3   r0  z$ConfigMetadataHandler._parse_versionC  s     ""5$-88emmooG    !   !65 6 6,36 6   N~d..ud6FVVWWWs   A 
A,A''A,)rM   r!   rl   r#   r(   r'   rk   r   re   r  r   r   r)   r   r  )r   r  r  r[   r   strict_moder?   curdirr   r  r   r0  __classcell__r   s   @r3   rf   rf   
  s        N  #	 G K $(#%9! ! ! ! ! ! ! 
 
 
 X
6X X X X X X Xr5   rf   c                       e Zd ZdZd fdZed             Zd ZddZe	dd            Z
d Zd Zd Zd dZd Zd dZd dZd dZd dZ xZS )!rc   rl   rM   r    r#   r(   r'   rk   r   r)   r   c                v    t                                          ||||           |j        | _        i | _        d S r   )r  r   rh   r   re   )r   rM   rl   r(   rk   r   s        r3   r   zConfigOptionsHandler.__init__`  s=     	W.BDUVVV"++-r5   c                0    |                      |d          S )N;)r   )r   r   s     r3   _parse_list_semicolonz*ConfigOptionsHandler._parse_list_semicolonk  s    u444r5   c                :    |                      || j                  S )Nr   )r   r   )r   r_   s     r3   _parse_file_in_rootz(ConfigOptionsHandler._parse_file_in_rooto  s    >>>r5   rn   rH   r_   c                    |                      |                     |                    }t          |||           t          j        d |D                       S )Nc              3  D   K   | ]}|                     d           |V  dS )#Nrv   )rx   r   s     r3   rz   z@ConfigOptionsHandler._parse_requirements_list.<locals>.<genexpr>x  s3      PPT4??3;O;OPDPPPPPPr5   )r>  r@  r   r   r.  )r   rn   r_   rp   s       r3   _parse_requirements_listz-ConfigOptionsHandler._parse_requirements_listr  sV    ++D,D,DU,K,KLL-eUFCCC |PPVPPPPPPr5   r   c                    | j         }| j        }| j        }||| j        ||||                     |d          t          | j        d          | j        | j        | j	        |t          j        |dS )r   zeThe namespace_packages parameter is deprecated, consider using implicit namespaces instead (PEP 420).install_requires)zip_safeinclude_package_datare   scriptseager_resourcesdependency_linksnamespace_packagesrF  setup_requirespackagesentry_points
py_modulespython_requirescmdclass)r   r   _parse_cmdclassr   r
  r   rD  r>  _parse_packagesr@  r   SpecifierSet)r   
parse_list
parse_boolparse_cmdclasss       r3   r   zConfigOptionsHandler.parsers{  s     %
%
- #$.+!) *"&"A"AH# # !(-/A! ! #8, 4$&3&+
 
 	
r5   c                v    | j         j        }t          j        |                     |          || j                  S r   )rk   re   r   rR  r   r   )r   r_   re   s      r3   rS  z$ConfigOptionsHandler._parse_cmdclass  s1    ,8t//66T]SSSr5   c                :   ddg}|                                 }||vr|                     |          S |                     | j                            di                     }|                    ||d         k    | j        | j                   t          j	        di |S )zTParses `packages` option value.

        :param value:
        :rtype: list
        zfind:zfind_namespace:zpackages.findr   )
namespacesr   fill_package_dirr9   )
r   r   parse_section_packages__findr   r   rj   r   re   r   find_packages)r   r_   find_directivestrimmed_valuefind_kwargss        r3   rT  z$ConfigOptionsHandler._parse_packages  s     #$56//##E*** 77Mor22
 
 	%);;]!- 	 	
 	
 	
 #22k222r5   c                    |                      || j                  }g dfd|                                D             }|                    d          }||d         |d<   |S )zParses `packages.find` configuration file section.

        To be used in conjunction with _parse_packages().

        :param dict section_options:
        )whereincludeexcludec                (    i | ]\  }}|v 	|||S r9   r9   )rx   kr   
valid_keyss      r3   
<dictcomp>zEConfigOptionsHandler.parse_section_packages__find.<locals>.<dictcomp>  s)    VVV1ZTUq!r5   rc  Nr   )r   r   r   r   )r   r   section_datara  rc  rh  s        @r3   r]  z1ConfigOptionsHandler.parse_section_packages__find  sx     22?DDTUU444
VVVV(:(:(<(<VVV((#(8K r5   c                F    |                      || j                  }|| d<   dS )z`Parses `entry_points` configuration file section.

        :param dict section_options:
        rO  N)r   r   r   r   rp   s      r3   parse_section_entry_pointsz/ConfigOptionsHandler.parse_section_entry_points  s,    
 ,,_d>NOO%^r5   c                `    |                      || j                  }t          j        |          S r   )r   r   r   canonic_package_data)r   r   package_datas      r3   _parse_package_dataz(ConfigOptionsHandler._parse_package_data  s+    22?DDTUU*<888r5   c                6    |                      |          | d<   dS )z`Parses `package_data` configuration file section.

        :param dict section_options:
        rp  Nrq  r   r   s     r3   parse_section_package_dataz/ConfigOptionsHandler.parse_section_package_data  s"    
  $77HH^r5   c                6    |                      |          | d<   dS )zhParses `exclude_package_data` configuration file section.

        :param dict section_options:
        exclude_package_dataNrs  rt  s     r3   "parse_section_exclude_package_dataz7ConfigOptionsHandler.parse_section_exclude_package_data  s#    
 (,'?'?'P'P#$$$r5   c                h                           | fd          }t          j        |           d<   dS )zbParses `extras_require` configuration file section.

        :param dict section_options:
        c                8                         d|  d|          S )Nzextras_require[r   )rD  )rg  r   r   s     r3   r   zCConfigOptionsHandler.parse_section_extras_require.<locals>.<lambda>  s#    667M7M7M7MqQQ r5   extras_requireN)r   r   r/  rl  s   `  r3   parse_section_extras_requirez1ConfigOptionsHandler.parse_section_extras_require  sF    
 55QQQQ
 

 ")f!5!5r5   c                v    |                      || j                  }t          j        || j                  | d<   dS )z^Parses `data_files` configuration file section.

        :param dict section_options:
        
data_filesN)r   r   r   canonic_data_filesr   rl  s      r3   parse_section_data_filesz-ConfigOptionsHandler.parse_section_data_files  s;    
 ,,_d>NOO#6vt}MM\r5   )
rM   r    rl   r#   r(   r'   rk   r   r)   r   )rn   rH   r_   rH   r  r  )r   r  r  r[   r   r  r>  r@  rD  r  r   rS  rT  r]  rm  rq  ru  rx  r|  r  r8  r9  s   @r3   rc   rc   ]  sW       N	. 	. 	. 	. 	. 	. 5 5 [5? ? ?Q Q Q Q 
 
 
 X
<T T T3 3 32  $& & & &9 9 9I I I IQ Q Q Q
6 
6 
6 
6N N N N N N N Nr5   rc   c                  0    e Zd ZdZdZdZed             ZdS )r   zAmbiguous requirement marker.z
    One of the parsed requirements in `{field}` looks like a valid environment marker:

        {req!r}

    Please make sure that the configuration file is correct.
    You can use dangling lines to avoid this problem.
    z'userguide/declarative_config.html#opt-2c                \    d| j          }|                     | j        | j        ||          S )Nz%https://setuptools.pypa.io/en/latest/)see_urlformat_args)	_SEE_DOCS_format_SUMMARY_DETAILS)r   r  docss      r3   r   z_AmbiguousMarker.message  s0    Fs}FF{{3<tQS{TTTr5   N)r   r  r  r  r  r  r  r   r9   r5   r3   r   r     sG        .HH :I U U [U U Ur5   r   c                      e Zd ZdZdS )r  z!userguide/declarative_config.htmlN)r   r  r  r  r9   r5   r3   r  r    s        3IIIr5   r  )FF)r%   r   r&   r'   r(   r'   r)   r*   )r0   r    r%   r   r)   r    )r9   F)
r0   r    r%   r   r:   r;   r(   r'   r)   r<   )rM   rN   rO   rH   )r2   rX   r)   r*   )F)r`   r    rJ   r#   r(   r'   r)   r<   )rn   rH   ro   rH   rp   rG   )Cr  
__future__r   r   rR   r?   abcr   collectionsr   collections.abcr   r   r   r	   typingr
   r   r   r   r   r   r   packaging.markersr   r|   packaging.requirementsr   r   packaging.versionr   r   r   r   _pathr   errorsr   r   warningsr   r   typing_extensionsr   r,   r    distutils.distr!   r*   rH   tupler"   r  r#   r$   r4   r8   r.   rW   r/   rI   r   r   rf   rc   r   r  r9   r5   r3   <module>r     s  	 	 	 # " " " " "         				       # # # # # # . . . . . . . . $ $ $ $ $ $ $ $ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q ? ? ? ? ? ? B B B B B B B B 5 5 5 5 5 5 5 5             + + + + + + + + 3 3 3 3 3 3       4++++++,,,,,,333333"&sE#s(O';"<  < < < <
  $C)=$=>  > > > > 	>+A	B	B PU+ + + + +4    &(!&	    >	 	 	 	   2 "'+ + + + +\2 2 2 2@b b b b bGFO b b bJ	PX PX PX PX PXM*@A PX PX PXfYN YN YN YN YN=8 YN YN YNxU U U U U3 U U U(4 4 4 4 44 4 4 4 4 4r5   