
    vKgd                    ~   % 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	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  SSKJr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\0\4   4   r2S\3S'    \/\0\24   r4S\3S'    \" SSS5      r5 S,       S-S jjr6S.S jr7  S/         S0S jjr8S1S jr9    S2S jr: S3       S4S  jjr;S5S! jr< " S" S#\\5   5      r= " S$ S%\=S   5      r> " S& S'\=S   5      r? " S( S)\&5      r@ " S* S+\&5      rAg)6a<  
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)defaultdict)IterableIterator)partialwraps)TYPE_CHECKINGAnyCallableClassVarGenericTypeVarcast)default_environment)InvalidRequirementRequirement)SpecifierSet)InvalidVersionVersion   )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          Z/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/setuptools/config/setupcfg.pyread_configurationr0   2   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     r/   apply_configurationr4   L   s     4Kr1   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%   r6   ospathabspathisfiler   getcwdchdirdirnameparse_config_filesr   liststrparse_configurationcommand_options_finalize_license_files)r,   r)   other_filesr+   r6   current_directoryr-   r.   s           r/   r'   r'   U   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        r/   _get_optionrO   t   s4     ,K$$Wj>LZl;F8Or1   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_optionsrO   rJ   section_prefix)r.   config_dicthandleroptionvalues        r/   r(   r(      sU     $D)K))F 2 2F;E:?../7 * 
 r1   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)distributionrB   r+   ensure_discoveredoptionsmetas         r/   rA   rA      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  J   >#    U H  nTS    R                  U5      v   M     g7f)r   N)
startswith).0markerparseds     r/   	<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_valuern   markersri   exmsgs     `    r/   %_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	 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.r@   rS   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+   rJ   rQ   _section_optionssectionsrR   rc   setr`   )selfrJ   rd   r+   rc   s        r/   __init__ConfigHandler.__init__   sC     %9!",T227;<&(!2+.5	r1   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	partitionrS   lstrip)clsrd   	full_namerW   pre_seprt   s          r/   r   ConfigHandler._section_options  sN      !(I'11#2D2DEOCt++c"E))	 !0s   AAc                F    [        SU R                  R                  -  5      e).Metadata item name to parser function mapping.z!%s must provide .parsers property)NotImplementedError	__class____name__)r   s    r/   parsersConfigHandler.parsers  s#     "/$..2I2II
 	
r1   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    r/   <lambda>+ConfigHandler.__setitem__.<locals>.<lambda>&  s    Qr1   set_)rJ   r   getrI   AttributeErrorKeyErrorr   	Exceptionr+   rH   r   __setattr__rR   append)	r   option_namerW   rJ   current_valueern   simple_settersetters	            r/   __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
rg   )
isinstancer?   
splitlinessplitstrip)r   rW   	separatorchunks       r/   _parse_listConfigHandler._parse_list0  s_     eT""L5=$$&EKK	*E+0B5%KKM5BBBs   A6A6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   rW   r   resultlinerK   sepvals           r/   _parse_dictConfigHandler._parse_dictD  sg     	OOE*D NN95MCc!$J5'"RSS"%))+F99;	 + r1   c                ,    UR                  5       nUS;   $ )z9Represents value as boolean.

:param value:
:rtype: bool
)1trueyes)lowerr   rW   s     r/   _parse_boolConfigHandler._parse_boolU  s     ,,,r1   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                V   > SnU R                  U5      (       a  [        ST S35      eU $ )Nfile:z"Only strings are accepted for the z field, files are not accepted)rk   
ValueError)rW   exclude_directiverK   s     r/   parser3ConfigHandler._exclude_files_parser.<locals>.parserk  s@     ' 122 8 >- -  Lr1   r   )r   rK   r   s    ` r/   _exclude_files_parser#ConfigHandler._exclude_files_parser_  s    	 r1   c                F   Sn[        U[        5      (       d  U$ UR                  U5      (       d  U$ 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                  " Xb5      $ 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   r@   rk   rq   r   r   r`   ra   r   
read_files)r   rW   root_dirinclude_directivespecr8   	filepathss          r/   _parse_fileConfigHandler._parse_filev  s     $%%%L 122LS*+-..2jjo>odZZ\o	>%%i0  55 ?s   Bc                    SnUR                  U5      (       d  U$ 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: )rk   replacera   rc   r\   r   	read_attr)r   rW   r\   r   attr_directive	attr_descs         r/   _parse_attrConfigHandler._parse_attr  s^     !//LMM."5	 	411==>	AAr1   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   )rW   rn   methodparse_methodss      r/   r[   1ConfigHandler._get_parser_compound.<locals>.parse  s"    F' ( Mr1   r   )r   r   r[   s    ` r/   _get_parser_compound"ConfigHandler._get_parser_compound  s    	 r1   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_parserrW   rK   _r   s          r/   _parse_section_to_dict_with_key-ConfigHandler._parse_section_to_dict_with_key  s3     ,224MC!&s0EJ 5r1   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     r/   r   6ConfigHandler._parse_section_to_dict.<locals>.<lambda>  s
    }Q/r1   c                    U$ r   r   )r   r   s     r/   r   r     s    UVr1   r   )r   r   r   r   s     ` r/   _parse_section_to_dict$ConfigHandler._parse_section_to_dict  s!     5B/22?KKr1   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   rt   r   rW   s        r/   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   rI   r   r   rS   )r   section_namer   method_postfixsection_parser_methods        r/   r[   ConfigHandler.parse  s    
 .2]]-@-@-B)LN#$\N!35</088dC	6! %,!++,Al^1> 
 "/2% .Cr1   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_DeprecatedConfigrv   )argskwargsfunckwr}   s     r/   config_handler@ConfigHandler._deprecated_config_handler.<locals>.config_handler  s7    MM,*""#EsQbQ(((r1   )r   )r   r  r}   r  r  s    ``` r/   _deprecated_config_handler(ConfigHandler._deprecated_config_handler  s#     
t	) 
	)
 r1   )r`   rc   r+   r   rR   rJ   )rJ   r#   rd   r"   rc   expand.EnsurePackagesDiscoveredreturnNone)rd   r"   r  z*Iterator[tuple[str, SingleCommandOptions]]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  __static_attributes__r   r1   r/   r   r      s4   ;
 )+G%* #
 ; 
" *'*	3* * 
 
-4 C C&    - -  ,64B(  &   
L 
L#32r1   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 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   rJ   rd   r+   rc   r\   r   r   s          r/   r   ConfigMetadataHandler.__init__  s      	.BV& r1   c                    U R                   n[        U R                  U R                  S9nU R                  nU R
                  nUUUUU R                  X!5      U" S5      UUUU R                  US.$ )r   r   license)r"  keywordsprovides	obsoletesr!  r,  license_filesr   long_descriptionversionproject_urls)r   r   r   r   r   r   r   _parse_version)r   
parse_list
parse_file
parse_dictexclude_files_parsers        r/   r   ConfigMetadataHandler.parsers$  s     %%
T--F
%%
#99 $""#44ZL+I6'% ***&
 	
r1   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   r2  r   r\   )r   rW   r2  r   s       r/   r4  $ConfigMetadataHandler._parse_version:  s     ""5--8mmoG  N~~d..u6F6FVWW " !*5' 2,,396 s   A9 9
BBBr\   r   )rJ   r    rd   r"   r+   boolrc   r  r\   zdict | Noner   r  r  r  )r   r  r  r  rS   r   strict_moder7   curdirr   r  r   r4  r  __classcell__r   s   @r/   r]   r]     s    N  #	G K $(#%99!(! #! #	!
 ;! !! !! 
! ! 
 
*X Xr1   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 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$ )rZ   iT  rd   c                V   > [         TU ]  XX45        UR                  U l        0 U l        g r   )r(  r   r_   r   r\   )r   rJ   rd   r+   rc   r   s        r/   r   ConfigOptionsHandler.__init__W  s*     	.BV"+++-r1   c                "    U R                  USS9$ )N;)r   )r   r   s     r/   _parse_list_semicolon*ConfigOptionsHandler._parse_list_semicolonb  s    u44r1   c                4    U R                  XR                  S9$ )Nr+  )r   r   )r   rW   s     r/   _parse_file_in_root(ConfigOptionsHandler._parse_file_in_rootf  s    >>r1   c                    U R                  U R                  U5      5      n[        XU5        U Vs/ sH  oDR                  S5      (       a  M  UPM     sn$ s  snf )N#)rG  rJ  r~   rk   )r   ry   rW   rn   r   s        r/   _parse_requirements_list-ConfigOptionsHandler._parse_requirements_listi  sJ    ++D,D,DU,KL-eFC "(Ds/CDDDs   AAc                   U R                   nU R                  nU R                  nU R                  nUUUUUUU R	                  US5      [        U R                  S5      U R                  U R                  U R                  U[        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_packagesrQ  setup_requirespackagesentry_points
py_modulespython_requirescmdclass)r   r   r   _parse_cmdclassr  r   rN  rG  _parse_packagesrJ  r   )r   r5  
parse_boolr7  parse_cmdclasss        r/   r   ConfigOptionsHandler.parsersq  s     %%
%%
%%
-- #$.%!) *"&"A"AH# !(--/A! #88,, 44$+&+
 	
r1   c                    U R                   R                  n[        R                  " U R	                  U5      X R
                  5      $ r   )rc   r\   r   r]  r   r   )r   rW   r\   s      r/   r^  $ConfigOptionsHandler._parse_cmdclass  s3    ,,88t//6]]SSr1   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   ra   r   r\   r   find_packages)r   rW   find_directivestrimmed_valuefind_kwargss        r/   r_  $ConfigOptionsHandler._parse_packages  s     #$56/##E** 77MMor2
 	%);;]]!-- 	 	
 ##2k22r1   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excludero  r   )r   r   r   r   )r   r   section_data
valid_keyskr   rl  ro  s           r/   rh  1ConfigOptionsHandler.parse_section_packages__find  s{     22?DTDTU4
(4(:(:(<V(<tTUtqt(<V(#(8K  Ws   
A1A1
A1c                B    U R                  XR                  5      nX S'   g)zPParses `entry_points` configuration file section.

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

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

:param dict section_options:
exclude_package_dataNr  r  s     r/   "parse_section_exclude_package_data7ConfigOptionsHandler.parse_section_exclude_package_data  s    
 (,'?'?'P#$r1   c                <   ^  T R                  UU 4S j5      nU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   )rN  )rt  r   r   s     r/   r   CConfigOptionsHandler.parse_section_extras_require.<locals>.<lambda>  s    6617MqQr1   extras_requireNr   rw  s   `  r/   parse_section_extras_require1ConfigOptionsHandler.parse_section_extras_require  s(    
 55Q

 "(r1   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   rw  s      r/   parse_section_data_files-ConfigOptionsHandler.parse_section_data_files  s3    
 ,,_>N>NO#66v}}M\r1   r<  )
rJ   r   rd   r"   r+   r=  rc   r  r  r  )ry   r@   rW   r@   r  )r   r  r  r  rS   r   r  rG  rJ  rN  r  r   r^  r_  rh  rx  r}  r  r  r  r  r  r@  rA  s   @r/   rZ   rZ   T  s    N	. 	. #	. #		.
 ;	. 
	. 5 5?E 
 
>T32$&9IQ
(N Nr1   rZ   c                  0    \ rS rSrSrSrSr\S 5       rSr	g)ru   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      r/   rx   _AmbiguousMarker.message  s/    6s}}oF{{3<<t{TTr1   r   N)
r   r  r  r  r  r  r  r  rx   r  r   r1   r/   ru   ru     s+    .HH :I U Ur1   ru   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   r1   r/   r  r    s    3Ir1   r  )FF)r)   r   r*   r=  r+   r=  r  rQ   )r,   r   r)   r   r  r   )r   F)
r,   r   r)   r   rD   zIterable[StrPath]r+   r=  r  2tuple[ConfigMetadataHandler, ConfigOptionsHandler])rJ   z#Distribution | DistributionMetadatarK   r@   )r.   zKIterable[ConfigHandler[Distribution] | ConfigHandler[DistributionMetadata]]r  rQ   )F)rb   r   rB   r"   r+   r=  r  r  )ry   r@   rz   r@   rn   r?   )Br  
__future__r   r   rH   r7   collectionsr   collections.abcr   r   r   r   typingr	   r
   r   r   r   r   r   packaging.markersr   rr   packaging.requirementsr   r   packaging.specifiersr   packaging.versionr   r   _pathr   errorsr   r   warningsr   r   r   typing_extensionsr   r%   r   distutils.distr    rQ   r@   tupler!   r  r"   r#   r0   r4   r'   rO   r(   rA   r~   r   r]   rZ   ru   r  r   r1   r/   <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@`GFO `F	JXM*@A JXZXN=8 XNvU3 U(44 4r1   