
    JiGh                       % S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
JrJr  SSKJrJr  SSKJrJrJrJrJrJrJr  SS	KJr  SS
KJrJr  SSKJrJr  SSK J!r!  SSK"J#r#  SSK$J%r%J&r&  SSK'J(r(  SSK J)r)  \(       a  SSK*J+r+  SSK,J-r-  SSK.J/r/  \0\1\2\1\4   4   r3S\4S'    \0\1\34   r5S\4S'    \" SSS5      r6 S-       S.S jjr7S/S jr8  S0         S1S jjr9S2S jr:    S3S  jr; S4       S5S! jjr<S6S" jr= " S# S$\\6   5      r> " S% S&\>S   5      r? " S' S(\>S   5      r@ " S) S*\(5      rA " S+ S,\(5      rBg)7a<  
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!   c                |    SSK Jn  U" 5       nU(       a  UR                  5       O/ n[        X@XR5      n[	        U5      $ )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)filepathfind_othersignore_option_errorsr    dist	filenameshandlerss          \/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/setuptools/config/setupcfg.pyread_configurationr1   3   s7    $ ->D,7&&(RIdiFH **    c                <    [        X5        U R                  5         U $ )zXApply the configuration from a ``setup.cfg`` file into an existing
distribution object.
)r(   _finalize_requires)r-   r*   s     r0   apply_configurationr5   M   s     4Kr2   c                H   SSK Jn  [        R                  R	                  U5      n[        R                  R                  U5      (       d  [        SU S35      e[        R                  " 5       n[        R                  " [        R                  R                  U5      5        / UQUPn UR                  U [        [        [           U5      S9  [        X R                  US9nU R!                  5         [        R                  " U5        U$ ! [        R                  " U5        f = f)zHRead configuration from ``filepath`` and applies to the ``dist`` object.r   )_DistributionzConfiguration file z does not exist.)r.   )r,   )r&   r7   ospathabspathisfiler   getcwdchdirdirnameparse_config_filesr   liststrparse_configurationcommand_options_finalize_license_files)r-   r*   other_filesr,   r7   current_directoryr.   r/   s           r0   r(   r(   V   s     .wwx(H77>>(##-hZ7GHII		HHRWW__X&'(+(x(I$((d3i9S(T&&&=Q
 	$$&
"#O 	"#s   (A	D	 	D!c                h    SU 3n[         R                  " [        X5      n[        XU5      nU" 5       $ )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)
target_objkeygetter_nameby_attributegetters        r0   _get_optionrP   u   s4     ,K$$Wj>LZl;F8Or2   c                    [        [        5      nU  H=  nUR                   H*  n[        UR                  U5      nXAUR
                     U'   M,     M?     U$ )zReturns configuration data gathered by given handlers as a dict.

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

:rtype: dict
)r   dictset_optionsrP   rK   section_prefix)r/   config_dicthandleroptionvalues        r0   r)   r)      sU     $D)K))F 2 2F;E:?../7 * 
 r2   c           	        [         R                  " U 5       n[        U UUU5      nUR                  5         U R                  (       d  UR                  U l        [        U R                  UUUU R                  U R                  5      nUR                  5         U R                  R                  UR                  UR                  5        SSS5        XT4$ ! , (       d  f       WW4$ = f)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)distributionrC   r,   ensure_discoveredoptionsmetas         r0   rB   rB      s    $ 
	(	(	6:K& 	
 	'''.':':L$$!! $$!!
 	

&&--%%t'='=	
+ 
72 =3 
7	62 =s   B/C
C"c                x  ^ SU;   d  [        T5      S:w  a  g[        5       R                  5       n [        TS   5      nUR                  U;   a  [
        R                  U TS   S9  gg! [         aG  n[        U4S jU 5       5      (       a#  [
        R                  U TS   S9n[        U5      Ue SnAgSnAff = f)a=  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  L   >#    U  H  nTS    R                  U5      v   M     g7f)r   N
startswith).0markerparseds     r0   	<genexpr>8_warn_accidental_env_marker_misconfig.<locals>.<genexpr>   s#     B'vay##F++'s   !$)
len
marker_envkeysr   name_AmbiguousMarkeremitr   anymessage)label
orig_valuerp   markersrj   exmsgs     `    r0   %_warn_accidental_env_marker_misconfigr      s    " zS[A-l!G2&)$88w!!6!9!=  2B'BBB"**F1I*FC$S)r1 C2s   5A( (
B92=B44B9c                  :   \ rS rSr% SrS\S'    0 rS\S'            SS jr\    SS j5       r	\
\SS	 j5       5       rSS
 jr\SS j5       r\S 5       r\S 5       r\S 5       rSS jrSS jr\S 5       r\S 5       r\S S j5       rSS jrSS jrS rSrg)!ConfigHandler   z1Handles metadata supplied in configuration files.rA   rT   zClassVar[dict[str, str]]aliasesc                    X0l         Xl        [        U R                  U5      5      U l        / U l        X@l        [        [           " 5       U l	        g N)
r,   rK   rR   _section_optionssectionsrS   rd   setrA   ra   )selfrK   re   r,   rd   s        r0   __init__ConfigHandler.__init__   sG     %9!",T227;<&(!2!$S	r2   c              #     #    UR                  5        HA  u  p#UR                  U R                  5      u  pEnU(       a  M,  UR                  S5      U4v   MC     g 7f)N.)items	partitionrT   lstrip)clsre   	full_namerX   pre_seprv   s          r0   r   ConfigHandler._section_options  sN      !(I'11#2D2DEOCt++c"E))	 !0s   AAc                F    [        U R                  R                   S35      e).Metadata item name to parser function mapping.z must provide .parsers property)NotImplementedError	__class____name__)r   s    r0   parsersConfigHandler.parsers  s'     "~~&&''FG
 	
r2   c                   U R                   nU R                  R                  X5      n [        X15      nU(       a  g  U R                  R                  US 5      " U5      n[        R                  " UR                  U5      n[        USU 3U5      nU" U5        U R                  R                  U5        g ! [         a  n[        U5      UeS nAff = f! [        4U R                  -   a     g f = f)Nc                    U $ r    )xs    r0   <lambda>+ConfigHandler.__setitem__.<locals>.<lambda>(  s    Qr2   set_)rK   r   getrJ   AttributeErrorKeyErrorr   	Exceptionr,   rI   r   __setattr__rS   append)	r   option_namerX   rK   current_valueerp   simple_settersetters	            r0   __setitem__ConfigHandler.__setitem__  s    __
 ll&&{@	/#J<M 	\\%%k;?FF "))**@*@+NtK=%9=Iv,!  	/;'Q.	/ |d777 		s(   B5 #C 5
C?CCC.-C.c                    [        U[        5      (       a  U$ SU;   a  UR                  5       nOUR                  U5      nU Vs/ s H)  o3R	                  5       (       d  M  UR	                  5       PM+     sn$ s  snf )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
rh   )
isinstancer@   
splitlinessplitstrip)r   rX   	separatorchunks       r0   _parse_listConfigHandler._parse_list2  s_     eT""L5=$$&EKK	*E+0B5%KKM5BBBs   A7 A7c                    Sn0 nU R                  U5       HJ  nUR                  U5      u  pVnXb:w  a  [        SU 35      eUR                  5       X5R                  5       '   ML     U$ )z8Represents value as a dict.

:param value:
:rtype: dict
=z&Unable to parse option value to dict: )r   r   r   r   )r   rX   r   resultlinerL   sepvals           r0   _parse_dictConfigHandler._parse_dictF  sg     	OOE*D NN95MCc!$J5'"RSS"%))+F99;	 + r2   c                ,    UR                  5       nUS;   $ )z9Represents value as boolean.

:param value:
:rtype: bool
)1trueyes)lowerr   rX   s     r0   _parse_boolConfigHandler._parse_boolW  s     ,,,r2   c                   ^ U4S jnU$ )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                ~   > SnU R                  U5      (       a  [        ST S35      e[        R                  " U 5      $ )Nfile:z"Only strings are accepted for the z field, files are not accepted)rm   
ValueErrorr   Str)rX   exclude_directiverL   s     r0   parser3ConfigHandler._exclude_files_parser.<locals>.parserm  sJ     ' 122 8 >- -  ;;u%%r2   r   )r   rL   r   s    ` r0   _exclude_files_parser#ConfigHandler._exclude_files_parsera  s    	& r2   c                   Sn[        U[        5      (       d  U$ UR                  U5      (       d  [        R                  " U5      $ U[        U5      S nUR                  S5       Vs/ s H  oUR                  5       PM     nnU R                  R                  U5        [        R                  " [        R                  " Xb5      5      $ s  snf )a  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   N,)r   rA   rm   r   r   rs   r   r   ra   rb   r   
read_files)r   rX   root_dirinclude_directivespecr9   	filepathss          r0   _parse_fileConfigHandler._parse_filex  s     $%%%L 122;;u%%S*+-..2jjo>odZZ\o	>%%i0{{6,,YABB ?s   'Cc                    SnUR                  U5      (       d  [        R                  " U5      $ UR                  US5      nUR	                  U R
                  R                  5        [        R                  " XRU5      $ )zRepresents value as a module attribute.

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

:param str value:
:rtype: str
zattr: )	rm   r   r   replacerb   rd   r]   r   	read_attr)r   rX   r]   r   attr_directive	attr_descs         r0   _parse_attrConfigHandler._parse_attr  sh     !//;;u%%MM."5	 	411==>	AAr2   c                   ^ U4S jnU$ )zReturns parser function to represents value as a list.

Parses a value applying given methods one after another.

:param parse_methods:
:rtype: callable
c                .   > U nT H  nU" U5      nM     U$ r   r   )rX   rp   methodparse_methodss      r0   r\   1ConfigHandler._get_parser_compound.<locals>.parse  s"    F' ( Mr2   r   )r   r   r\   s    ` r0   _get_parser_compound"ConfigHandler._get_parser_compound  s    	 r2   c                V    0 nUR                  5        H  u  nu  pVU" XF5      X4'   M     U$ )zParses 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_parserrX   rL   _r   s          r0   _parse_section_to_dict_with_key-ConfigHandler._parse_section_to_dict_with_key  s3     ,224MC!&s0EJ 5r2   Nc                F   ^ T(       a  U4S jOS nU R                  X5      $ )zParses 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                   > T" U5      $ r   r   )r   vr   s     r0   r   6ConfigHandler._parse_section_to_dict.<locals>.<lambda>  s
    }Q/r2   c                    U$ r   r   )r   r   s     r0   r   r     s    UVr2   )r   )r   r   r   r   s     ` r0   _parse_section_to_dict$ConfigHandler._parse_section_to_dict  s!     5B/22?KKr2   c                    UR                  5        H/  u  nu  p4[        R                  " [        5         X@U'   SSS5        M1     g! , (       d  f       MC  = f)zAParses configuration file section.

:param dict section_options:
N)r   
contextlibsuppressr   )r   r   rv   r   rX   s        r0   parse_sectionConfigHandler.parse_section  sB    
 !0 5 5 7D*1$$X."T
 /. !8..s   A
A	c                    U R                   R                  5        HZ  u  pSnU(       a  SU 3n[        U SU 3R                  SS5      S5      nUc  [	        SU R
                   SU S35      eU" U5        M\     g)	zDParses configuration file items from one
or more related sections.

r   r   r   r   __Nz*Unsupported distribution option section: [])r   r   rJ   r   r   rT   )r   section_namer   method_postfixsection_parser_methods        r0   r\   ConfigHandler.parse  s    
 .2]]-@-@-B)LN#$\N!35</088dC	6! %,!++,Al^1> 
 "/2% .Cr2   c                8   ^^^ [        T5      UUU4S j5       nU$ )zthis function will wrap around parameters that are deprecated

:param msg: deprecation message
:param func: function to be wrapped around
c                 h   > TR                  SS5        [        R                  " ST40 TD6  T" U 0 UD6$ )N
stacklevelr   z Deprecated config in `setup.cfg`)
setdefault_DeprecatedConfigrx   )argskwargsfunckwr   s     r0   config_handler@ConfigHandler._deprecated_config_handler.<locals>.config_handler  s7    MM,*""#EsQbQ(((r2   )r	   )r   r  r   r  r  s    ``` r0   _deprecated_config_handler(ConfigHandler._deprecated_config_handler  s#     
t	) 
	)
 r2   )ra   rd   r,   r   rS   rK   )rK   r$   re   r#   rd   expand.EnsurePackagesDiscoveredreturnNone)re   r#   r  z*Iterator[tuple[str, SingleCommandOptions]]r  zdict[str, Callable]r  r  )r   )r   StrPath | None)r   r   r   )r   
__module____qualname____firstlineno____doc____annotations__r   r   classmethodr   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r\   r  __static_attributes__r   r2   r0   r   r      s=   ;
 )+G%* #
 ; 
" *'*	3* * 
  
-4 C C&    - -  ,C6B(  &   
L 
L#32r2   r   c                     ^  \ rS rSrSrSSSSS.rSr S	\R                  4             SU 4S
 jjjr	\
SS j5       rS rSrU =r$ )r^   i
  r_   urldescriptionclassifiers	platforms)	home_pagesummary
classifierplatformFNc                >   > [         TU ]  XX45        XPl        X`l        g r   )superr   r]   r   )r   rK   re   r,   rd   r]   r   r   s          r0   r   ConfigMetadataHandler.__init__  s      	.BV& r2   c                N   U R                  U R                  [        R                  5      nU R                  U R                  [        R
                  5      n[        U R                  U R                  S9nU R                  n0 S[        R                  _S[        R                  _S[        R                  _S[        R                  _SU_SU_SU_S	U_S
U R                  X15      _SU" S5      _SU_SU_SU_S[        R                  _SU R                  _S[        R                  _SU_$ )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        r0   r   ConfigMetadataHandler.parsers'  sg    !55d6F6FU 55d6F6FUT--F
#99
gkk
GKK
 '++
 	

 *
 )
 )
 *
 444ZS
 +I6
 .
 :
 

 ,W[[
 t**
  7;;!
" -#
 	
r2   c                :   U R                  XR                  5      nX!:w  a  UR                  5       n [        U5        U$ [        R                  " U R                  XR                  U R                  5      5      $ ! [         a  n[        SU SU 35      UeSnAff = f)z;Parses `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   r]   )r   rX   r:  r   s       r0   r>  $ConfigMetadataHandler._parse_versionC  s     ""5--8mmoG  N~~d..u6F6FVWW " !*5' 2,,396 s   A9 9
BBBr]   r   )rK   r!   re   r#   r,   boolrd   r  r]   zdict | Noner   r  r  r  r  )r   r  r  r  rT   r   strict_moder8   curdirr   r  r   r>  r   __classcell__r   s   @r0   r^   r^   
  s    N  #	G K $(#%99!(! #! #	!
 ;! !! !! 
! ! 
 
6X Xr2   r^   c                     ^  \ rS rSrSr          SU 4S jjr\S 5       rS rSS jr	\
SS j5       rS rS	 rS
 rSS jrS rSS jrSS jrSS jrSS jrSrU =r$ )r[   i]  re   c                V   > [         TU ]  XX45        UR                  U l        0 U l        g r   )r+  r   r`   r   r]   )r   rK   re   r,   rd   r   s        r0   r   ConfigOptionsHandler.__init__`  s*     	.BV"+++-r2   c                "    U R                  USS9$ )N;)r   )r   r   s     r0   _parse_list_semicolon*ConfigOptionsHandler._parse_list_semicolonk  s    u44r2   c                4    U R                  XR                  S9$ )Nr.  )r   r   )r   rX   s     r0   _parse_file_in_root(ConfigOptionsHandler._parse_file_in_rooto  s    >>r2   c                    U R                  U R                  U5      5      n[        XU5        [        R                  " S U 5       5      $ )Nc              3  T   #    U  H  oR                  S 5      (       a  M  Uv   M      g7f)#Nrl   )rn   r   s     r0   rq   @ConfigOptionsHandler._parse_requirements_list.<locals>.<genexpr>x  s     PVT??3;ODDVs   (	()rQ  rT  r   r   r<  )r   r{   rX   rp   s       r0   _parse_requirements_list-ConfigOptionsHandler._parse_requirements_listr  s>    ++D,D,DU,KL-eFC ||PVPPPr2   c                    U R                   nU R                  nU R                  nUUU R                  UUUU R	                  US5      [        U R                  S5      U R                  U R                  U R                  U[        R                  US.$ )r   zeThe namespace_packages parameter is deprecated, consider using implicit namespaces instead (PEP 420).install_requires)zip_safeinclude_package_datar]   scriptseager_resourcesdependency_linksnamespace_packagesr]  setup_requirespackagesentry_points
py_modulespython_requirescmdclass)r   r   _parse_cmdclassr   r  r   rZ  rQ  _parse_packagesrT  r   SpecifierSet)r   
parse_list
parse_boolparse_cmdclasss       r0   r   ConfigOptionsHandler.parsers{  s     %%
%%
-- #$.++!) *"&"A"AH# !(--/A! #88,, 44$&33&+
 	
r2   c                    U R                   R                  n[        R                  " U R	                  U5      X R
                  5      $ r   )rd   r]   r   ri  r   r   )r   rX   r]   s      r0   rj  $ConfigOptionsHandler._parse_cmdclass  s3    ,,88t//6]]SSr2   c                ,   SS/nUR                  5       nX2;  a  U R                  U5      $ U R                  U R                  R	                  S0 5      5      nUR                  X2S   :H  U R                  U R                  S9  [        R                  " S0 UD6$ )z<Parses `packages` option value.

:param value:
:rtype: list
zfind:zfind_namespace:zpackages.findr   )
namespacesr   fill_package_dirr   )
r   r   parse_section_packages__findr   r   rb   r   r]   r   find_packages)r   rX   find_directivestrimmed_valuefind_kwargss        r0   rk  $ConfigOptionsHandler._parse_packages  s     #$56/##E** 77MMor2
 	%);;]]!-- 	 	
 ##2k22r2   c                    U R                  XR                  5      n/ SQnUR                  5        VVs0 s H  u  pEXC;   d  M  U(       d  M  XE_M     nnnUR                  S5      nUb  US   US'   U$ s  snnf )zParses `packages.find` configuration file section.

To be used in conjunction with _parse_packages().

:param dict section_options:
)whereincludeexcluder}  r   )r   r   r   r   )r   r   section_data
valid_keyskr   rz  r}  s           r0   rv  1ConfigOptionsHandler.parse_section_packages__find  s{     22?DTDTU4
(4(:(:(<V(<tTUtqt(<V(#(8K  Ws   A2A2A2c                B    U R                  XR                  5      nX S'   g)zPParses `entry_points` configuration file section.

:param dict section_options:
rf  N)r   r   r   r   rp   s      r0   parse_section_entry_points/ConfigOptionsHandler.parse_section_entry_points  s"    
 ,,_>N>NO%^r2   c                d    U R                  XR                  5      n[        R                  " U5      $ r   )r   r   r   canonic_package_data)r   r   package_datas      r0   _parse_package_data(ConfigOptionsHandler._parse_package_data  s)    22?DTDTU**<88r2   c                ,    U R                  U5      U S'   g)zPParses `package_data` configuration file section.

:param dict section_options:
r  Nr  r   r   s     r0   parse_section_package_data/ConfigOptionsHandler.parse_section_package_data  s    
  $77H^r2   c                ,    U R                  U5      U S'   g)zXParses `exclude_package_data` configuration file section.

:param dict section_options:
exclude_package_dataNr  r  s     r0   "parse_section_exclude_package_data7ConfigOptionsHandler.parse_section_exclude_package_data  s    
 (,'?'?'P#$r2   c                d   ^  T R                  UU 4S j5      n[        R                  " U5      T S'   g)zRParses `extras_require` configuration file section.

:param dict section_options:
c                0   > TR                  SU  S3U5      $ )Nzextras_require[r  )rZ  )r  r   r   s     r0   r   CConfigOptionsHandler.parse_section_extras_require.<locals>.<lambda>  s    6617MqQr2   extras_requireN)r   r   r=  r  s   `  r0   parse_section_extras_require1ConfigOptionsHandler.parse_section_extras_require  s1    
 55Q

 ")f!5r2   c                    U R                  XR                  5      n[        R                  " X R                  5      U S'   g)zNParses `data_files` configuration file section.

:param dict section_options:

data_filesN)r   r   r   canonic_data_filesr   r  s      r0   parse_section_data_files-ConfigOptionsHandler.parse_section_data_files  s3    
 ,,_>N>NO#66v}}M\r2   rF  )
rK   r    re   r#   r,   rG  rd   r  r  r  )r{   rA   rX   rA   r  r  )r   r  r  r  rT   r   r  rQ  rT  rZ  r  r   rj  rk  rv  r  r  r  r  r  r  r   rJ  rK  s   @r0   r[   r[   ]  s    N	. 	. #	. #		.
 ;	. 
	. 5 5?Q 
 
<T32$&9IQ
6N Nr2   r[   c                  0    \ rS rSrSrSrSr\S 5       rSr	g)rw   i  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                j    SU R                    3nU R                  U R                  U R                  X!S9$ )Nz%https://setuptools.pypa.io/en/latest/)see_urlformat_args)	_SEE_DOCS_format_SUMMARY_DETAILS)r   r  docss      r0   rz   _AmbiguousMarker.message  s/    6s}}oF{{3<<t{TTr2   r   N)
r   r  r  r  r  r  r  r  rz   r   r   r2   r0   rw   rw     s+    .HH :I U Ur2   rw   c                      \ rS rSrSrSrg)r
  i  z!userguide/declarative_config.htmlr   N)r   r  r  r  r  r   r   r2   r0   r
  r
    s    3Ir2   r
  )FF)r*   r   r+   rG  r,   rG  r  rR   )r-   r    r*   r   r  r    )r   F)
r-   r    r*   r   rE   zIterable[StrPath]r,   rG  r  2tuple[ConfigMetadataHandler, ConfigOptionsHandler])rK   z#Distribution | DistributionMetadatarL   rA   )r/   zKIterable[ConfigHandler[Distribution] | ConfigHandler[DistributionMetadata]]r  rR   )F)rc   r    rC   r#   r,   rG  r  r  )r{   rA   r|   rA   rp   r@   )Cr  
__future__r   r   rI   r8   abcr   collectionsr   collections.abcr   r   r   r	   typingr
   r   r   r   r   r   r   packaging.markersr   rt   packaging.requirementsr   r   packaging.versionr   r   r   r   _pathr   errorsr   r   warningsr   r   typing_extensionsr   r&   r    distutils.distr!   rR   rA   tupler"   r  r#   r$   r1   r5   r(   rP   r)   rB   r   r   r^   r[   rw   r
  r   r2   r0   <module>r     s  	 #   	  # . $ Q Q Q ? B 5   + 3 +,3"&sE#s(O';"< i <
  $C)=$=> 9 > 	>+A	B PU++$(+HL+	+4 &(!&	
 # 	
 8>	 
	2 "'++&+ + 8	+\2@bGFO bJ	PXM*@A PXfYN=8 YNxU3 U(44 4r2   