Ë
    V.jsh  ã                  ór  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Zddl
Z
ddlmZmZmZ ddlmZmZ ddlmZ ddlmZ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!  ee«      Z G d
„ dejD                  «      Z#e#ez  Z$g d¢Z%dgZ&ddgZ' G d„ dee!«      Z(dd„Z)dd„Z*dd„Z+dd„Z,	 	 	 	 	 	 	 	 dd„Z-y)zConfig file for coverage.pyé    )ÚannotationsN)ÚCallableÚIterableÚMapping)ÚAnyÚFinal)ÚConfigError)Úhuman_sorted_itemsÚisolate_moduleÚsubstitute_variables)ÚTomlConfigParserÚTomlDecodeError)ÚTConfigSectionInÚTConfigSectionOutÚTConfigurableÚTConfigValueInÚTConfigValueOutÚTPluginConfigc                  ó–   ‡ — e Zd ZdZdˆ fd„Z	 d	 	 	 	 	 dˆ fd„Zdˆ fd„Zdˆ fd„Zdd„Zdˆ fd„Z	dd„Z
dˆ fd	„Zdd
„Zdd„Zdd„Zˆ xZS )ÚHandyConfigParserz#Our specialization of ConfigParser.c                ór   •— t         ‰| �  d¬«       dg| _        |r| j                  j                  d«       yy)zÞCreate the HandyConfigParser.

        `our_file` is True if this config file is specifically for coverage,
        False if we are examining another config file (tox.ini, setup.cfg)
        for possible settings.
        N)Úinterpolationz	coverage:Ú )ÚsuperÚ__init__Úsection_prefixesÚappend)ÚselfÚour_fileÚ	__class__s     €úQC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\coverage/config.pyr   zHandyConfigParser.__init__%   s;   ø€ ô 	‰Ñ tÐÔ,Ø!, ˆÔÙØ×!Ñ!×(Ñ(¨Õ,ð ó    c                ó&   •— t         ‰| �  |d¬«      S )z-Read a file name as UTF-8 configuration data.zutf-8)Úencoding)r   Úread)r   Ú	filenamesÚencoding_unusedr    s      €r!   r%   zHandyConfigParser.read2   s   ø€ ô ‰w‰|˜I°ˆ|Ó8Ð8r"   c                ó\   •— | j                   D ]  }||z   }t        ‰| �	  |«      }|sŒ|c S  y)z!Get the actual name of a section.N)r   r   Úhas_section)r   ÚsectionÚsection_prefixÚreal_sectionÚhasr    s        €r!   r,   zHandyConfigParser.real_section:   s:   ø€ à"×3Ô3ˆNØ)¨GÑ3ˆLÜ‘'Ñ% lÓ3ˆCÚØ#Ò#ð	 4ð
 r"   c                óL   •— | j                  |«      }|�t        ‰| �	  ||«      S y)NF)r,   r   Ú
has_option)r   r*   Úoptionr,   r    s       €r!   r/   zHandyConfigParser.has_optionC   s.   ø€ Ø×(Ñ(¨Ó1ˆØÐ#Ü‘7Ñ% l°FÓ;Ð;Ør"   c                ó6   — t        | j                  |«      «      S ©N)Úboolr,   )r   r*   s     r!   r)   zHandyConfigParser.has_sectionI   s   € Ü�D×%Ñ% gÓ.Ó/Ð/r"   c                ód   •— | j                  |«      }|�t        ‰| �	  |«      S t        d|›�«      ‚)NzNo section: )r,   r   Úoptionsr	   )r   r*   r,   r    s      €r!   r5   zHandyConfigParser.optionsL   s:   ø€ Ø×(Ñ(¨Ó1ˆØÐ#Ü‘7‘? <Ó0Ð0Ü˜L¨¨Ð4Ó5Ð5r"   c                ó`   — i }| j                  |«      D ]  }| j                  ||«      ||<   Œ |S )z/Get the contents of a section, as a dictionary.)r5   Úget)r   r*   ÚdÚopts       r!   Úget_sectionzHandyConfigParser.get_sectionR   s3   € à(*ˆØ—<‘< Ö(ˆCØ—X‘X˜g sÓ+ˆAˆcŠFð )àˆr"   c                óÖ   •— | j                   D ]  }||z   }t        ‰| �	  ||«      sŒ n t        d|›d|›�«      ‚t        ‰| �  ||g|¢­i |¤Ž}t        |t        j                  «      }|S )a  Get a value, replacing environment variables also.

        The arguments are the same as `ConfigParser.get`, but in the found
        value, ``$WORD`` or ``${WORD}`` are replaced by the value of the
        environment variable ``WORD``.

        Returns the finished value.

        z
No option z in section: )r   r   r/   r	   r7   r   ÚosÚenviron)	r   r*   r0   ÚargsÚkwargsr+   r,   Úvr    s	           €r!   r7   zHandyConfigParser.getY   sz   ø€ ð #×3Ô3ˆNØ)¨GÑ3ˆLÜ‰wÑ! ,°Õ7Ùð 4ô
  
¨6¨*°MÀ'ÀÐMÓNÐNä‘‘˜\¨6ÐC°DÒC¸FÑCˆÜ  ¤B§J¡JÓ/ˆØˆr"   c                ó<   — | j                  ||«      }t        |«      S )zFix up a file path setting.)r7   Úprocess_file_value)r   r*   r0   Úpaths       r!   ÚgetfilezHandyConfigParser.getfilen   s   € à�x‰x˜ Ó(ˆÜ! $Ó'Ð'r"   c                óÎ   — | j                  ||«      }g }|j                  d«      D ]<  }|j                  d«      D ]&  }|j                  «       }|sŒ|j                  |«       Œ( Œ> |S )zãRead a list of strings.

        The value of `section` and `option` is treated as a comma- and newline-
        separated list of strings.  Each value is stripped of white space.

        Returns the list of strings.

        Ú
Ú,)r7   ÚsplitÚstripr   )r   r*   r0   Ú
value_listÚvaluesÚ
value_lineÚvalues          r!   ÚgetlistzHandyConfigParser.getlists   sd   € ð —X‘X˜g vÓ.ˆ
ØˆØ$×*Ñ*¨4Ö0ˆJØ#×)Ñ)¨#Ö.�ØŸ™›�ÚØ—M‘M %Õ(ñ /ð 1ð
 ˆr"   c                ó\   — | j                  ||«      }t        |||j                  «       «      S )záRead a list of full-line regexes.

        The value of `section` and `option` is treated as a newline-separated
        list of regexes.  Each value is stripped of white space.

        Returns the list of strings.

        )r7   Úprocess_regexlistÚ
splitlines)r   r*   r0   Ú	line_lists       r!   ÚgetregexlistzHandyConfigParser.getregexlist…   s,   € ð —H‘H˜W fÓ-ˆ	Ü  ¨&°)×2FÑ2FÓ2HÓIÐIr"   )r   r3   ÚreturnÚNoner2   )r&   zIterable[str]r'   ú
str | NonerT   ú	list[str])r*   ÚstrrT   rV   )r*   rX   r0   rX   rT   r3   )r*   rX   rT   r3   )r*   rX   rT   rW   )r*   rX   rT   r   )
r*   rX   r0   rX   r>   r   r?   r   rT   rX   )r*   rX   r0   rX   rT   rX   )r*   rX   r0   rX   rT   rW   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   r,   r/   r)   r5   r:   r7   rD   rN   rS   Ú__classcell__)r    s   @r!   r   r   "   s_   ø„ Ù-õ-ð  '+ð9à ð9ð $ð9ð 
õ	9õõó0õ6óõó*(ó
÷$
Jr"   r   )z3#\s*(pragma|PRAGMA)[:\s]?\s*(no|NO)\s*(cover|COVER)z9^\s*(((async )?def .*?)?\)(\s*->.*?)?:\s*)?\.\.\.\s*(#|$)zif (typing\.)?TYPE_CHECKING:z5#\s*(pragma|PRAGMA)[:\s]?\s*(no|NO)\s*(branch|BRANCH)zwhile (True|1|False|0):zif (True|1|False|0):c                  óÄ   — e Zd ZU dZdd„Zh d£Zh d£Zdd„Zdd„Zdd„Z	h d£Z
d	ed
<   h d£Zg d¢Z	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d„Zed!d„«       Zy)"ÚCoverageConfigzŠCoverage.py configuration.

    The attributes of this class are the various settings that control the
    operation of coverage.py.

    c                ó„  — g | _         g | _        d| _        d| _        d| _        d| _        d| _        d| _        g | _        d| _	        d| _
        d| _        d| _        g | _        d| _        g | _        d| _        d| _        g | _        g | _        d| _        g | _        g | _        d| _        d| _        g | _        g | _        d| _        d| _        t:        dd | _        g | _        d| _         d| _!        d| _"        d| _#        d| _$        d| _%        tL        dd | _'        tP        dd | _)        g | _*        d| _+        d| _,        d| _-        d| _.        d| _/        d| _0        d| _1        d| _2        d| _3        d| _4        d| _5        d| _6        d| _7        d	| _8        d
| _9        d| _:        d| _;        d| _<        d| _=        i | _>        i | _?        y)z:Initialize the configuration attributes to their defaults.NFz	.coverageg        r   ÚhtmlcovzCoverage reportzcoverage.xmléc   zcoverage.jsonzcoverage.lcov)@Úconfig_files_attemptedÚconfig_files_readÚconfig_fileÚ_config_contentsÚ_includeÚ_omitÚbranchÚcommand_lineÚconcurrencyÚcontextÚcoreÚcover_pylibÚ	data_fileÚdebugÚ
debug_fileÚdisable_warningsÚdynamic_contextÚparallelÚpatchÚpluginsÚrelative_filesÚrun_includeÚrun_omitÚsigtermÚsourceÚsource_pkgsÚsource_dirsÚtimidÚ_crashÚDEFAULT_EXCLUDEÚexclude_listÚexclude_alsoÚ
fail_underÚformatÚignore_errorsÚinclude_namespace_packagesÚreport_includeÚreport_omitÚDEFAULT_PARTIAL_ALWAYSÚpartial_always_listÚDEFAULT_PARTIALÚpartial_listÚpartial_alsoÚ	precisionÚreport_contextsÚshow_missingÚskip_coveredÚ
skip_emptyÚsortÚ	extra_cssÚhtml_dirÚhtml_skip_coveredÚhtml_skip_emptyÚ
html_titleÚshow_contextsÚ
xml_outputÚxml_package_depthÚjson_outputÚjson_pretty_printÚjson_show_contextsÚlcov_outputÚlcov_line_checksumsÚpathsÚplugin_options©r   s    r!   r   zCoverageConfig.__init__´   só  € ð 24ˆÔ#à,.ˆÔà'+ˆÔØ.2ˆÔð ˆŒØˆŒ
ð ˆŒØ(,ˆÔØ&(ˆÔØ#'ˆŒØ $ˆŒ	Ø ˆÔØ$ˆŒØ "ˆŒ
Ø&*ˆŒØ+-ˆÔØ+/ˆÔØˆŒØ "ˆŒ
Ø"$ˆŒØ#ˆÔØ&(ˆÔØ#%ˆŒØˆŒØ(,ˆŒØ&(ˆÔØ&(ˆÔØˆŒ
Ø"&ˆŒô ,©AÐ.ˆÔØ')ˆÔØˆŒØ"&ˆŒØ"ˆÔØ*/ˆÔ'Ø04ˆÔØ-1ˆÔÜ#9¹!Ð#<ˆÔ Ü+©AÐ.ˆÔØ')ˆÔØˆŒØ15ˆÔØ!ˆÔØ!ˆÔØˆŒØ $ˆŒ	ð &*ˆŒØ!ˆŒØ.2ˆÔØ,0ˆÔØ+ˆŒØ"ˆÔð )ˆŒØ!#ˆÔð +ˆÔØ!&ˆÔØ"'ˆÔð +ˆÔØ#(ˆÔ ð ,.ˆŒ
ð =?ˆÕr"   >   rp   ru   rv   ry   rk   rˆ   rx   r‡   >   ©r{   T©ro   F©rq   F©r}   Fc                ó–   — |j                  «       D ]6  \  }}|€Œ	|| j                  v rt        |t        «      r|g}t	        | ||«       Œ8 y)z!Read config values from `kwargs`.N)ÚitemsÚMUST_BE_LISTÚ
isinstancerX   Úsetattr)r   r?   Úkr@   s       r!   Ú	from_argszCoverageConfig.from_args   sE   € à—L‘L–N‰DˆAˆqØ‰}Ø˜×)Ñ)Ñ)¬j¸¼CÔ.@Ø˜�AÜ˜˜a Õ#ñ	 #r"   c           	     óö  — t         j                  j                  |«      \  }}|dk(  rt        |«      }nt	        |«      }| j
                  j                  t         j                  j                  |«      «       	 |j                  |«      }|sy| j                  j                  t        t         j                  j                  |«      «       d}		 | j                   D ]  }
 | j"                  |g|
¢­Ž }|sŒd}	Œ 	 t'        j(                  t*        «      }| j                   D ]-  }
|
d   j-                  d«      \  }}||   j/                  |«       Œ/ |j1                  «       D ]T  \  }}|j3                  |«      }|sŒt+        |j5                  |«      «      |z
  D ]  } |d	j7                  |||«      «       Œ ŒV |j9                  d
«      r7|j5                  d
«      D ]#  }|j;                  d
|«      | j<                  |<   d}	Œ% | j>                  D ]4  }|j9                  |«      sŒ|jA                  |«      | jB                  |<   d}	Œ6 |rd}n|	}|rPt         j                  j                  |«      | _"        tG        |d«      5 }|j                  «       | _$        ddd«       |S |S # t        j                  t        f$ r}t        d|› d|› �«      |‚d}~ww xY w# t$        $ r}t        d|› d|› �«      |‚d}~ww xY w# 1 sw Y   |S xY w)a…  Read configuration from a .rc file.

        `filename` is a file name to read.

        `our_file` is True if this config file is specifically for coverage,
        False if we are examining another config file (tox.ini, setup.cfg)
        for possible settings.

        Returns True or False, whether the file could be read, and it had some
        coverage.py settings in it.

        z.tomlzCouldn't read config file ú: NFTé   Ú:z0Unrecognized option '[{}] {}=' in config file {}r¡   Úrb)%r<   rC   Úsplitextr   r   rc   r   Úabspathr%   ÚconfigparserÚErrorr   r	   rd   ÚextendÚmapÚCONFIG_FILE_OPTIONSÚ_set_attr_from_config_optionÚ
ValueErrorÚcollectionsÚdefaultdictÚsetrH   Úaddr©   r,   r5   r„   r)   rN   r¡   rv   r:   r¢   re   Úopenrf   )r   ÚfilenameÚwarnr   Ú_ÚextÚcpÚ
files_readÚerrÚany_setÚoption_specÚwas_setÚall_optionsr*   r0   r5   r,   ÚunknownÚpluginÚusedÚfs                        r!   Ú	from_filezCoverageConfig.from_file(  sÉ  € ô —‘×!Ñ! (Ó+‰ˆˆ3à�'Š>Ü! (Ó+‰Bä" 8Ó,ˆBà×#Ñ#×*Ñ*¬2¯7©7¯?©?¸8Ó+DÔEð	WØŸ™ Ó*ˆJñ Øà×Ñ×%Ñ%¤c¬"¯'©'¯/©/¸:Ó&FÔGàˆð	WØ#×7Ô7�Ø;˜$×;Ñ;¸BÐMÀÒM�ÚØ"‘Gñ  8ô "×-Ñ-¬cÓ2ˆØ×3Ô3ˆKØ)¨!™n×2Ñ2°3Ó7‰OˆG�VØ˜Ñ ×$Ñ$ VÕ,ð 4ð !,× 1Ñ 1Ö 3ÑˆG�WØŸ?™?¨7Ó3ˆLÚÜ" 2§:¡:¨gÓ#6Ó7¸'ÔA�GÙØJ×QÑQØ(Ø#Ø$óõñ  Bð !4ð �>‰>˜'Ô"ØŸ*™* WÖ-�Ø%'§Z¡Z°¸Ó%@�—
‘
˜6Ñ"Ø‘ð .ð
 —l”lˆFØ�~‰~˜fÕ%Ø.0¯n©n¸VÓ.D�×#Ñ# FÑ+Ø‘ð #ñ Ø‰DàˆDáÜ!Ÿw™wŸ™¨xÓ8ˆDÔÜ�h Ô%¨Ø()¯©«�Ô%÷ &ð ˆˆtˆøôw ×"Ñ"¤OÐ4ò 	WÜÐ :¸8¸*ÀBÀsÀeÐLÓMÐSVÐVûð	Wûô ò 	WÜÐ :¸8¸*ÀBÀsÀeÐLÓMÐSVÐVûð	Wú÷V &ð ˆúsB   Á8J Ã$K Ã1K É6K.ÊKÊ1KËKË	K+ËK&Ë&K+Ë.K8c                ó,   — t        j                  | «      S )z#Return a copy of the configuration.)ÚcopyÚdeepcopyr£   s    r!   rÓ   zCoverageConfig.copy}  s   € ä�}‰}˜TÓ"Ð"r"   >   ÚgeventÚthreadÚeventletÚgreenletÚmultiprocessingzFinal[set[str]]ÚCONCURRENCY_CHOICES>   rÕ   r×   rØ   )5)ri   z
run:branchÚboolean)rj   zrun:command_line)rk   zrun:concurrencyÚlist)rl   zrun:context)rm   zrun:core)rn   zrun:cover_pylibrÛ   )ro   zrun:data_fileÚfile)rp   z	run:debugrÜ   )rq   zrun:debug_filerÝ   )rr   zrun:disable_warningsrÜ   )rs   zrun:dynamic_context)rt   zrun:parallelrÛ   )ru   z	run:patchrÜ   )rv   zrun:pluginsrÜ   )rw   zrun:relative_filesrÛ   )rx   zrun:includerÜ   )ry   zrun:omitrÜ   )rz   zrun:sigtermrÛ   )r{   z
run:sourcerÜ   )r|   zrun:source_pkgsrÜ   )r}   zrun:source_dirsrÜ   )r~   z	run:timidrÛ   )r   z
run:_crash)r�   zreport:exclude_linesÚ	regexlist)r‚   zreport:exclude_alsorÞ   )rƒ   zreport:fail_underÚfloat)r„   zreport:format)r…   zreport:ignore_errorsrÛ   )r†   z!report:include_namespace_packagesrÛ   )rŠ   zreport:partial_branches_alwaysrÞ   )rŒ   zreport:partial_branchesrÞ   )r�   zreport:partial_alsorÞ   )rŽ   zreport:precisionÚint)r�   zreport:contextsrÜ   )r‡   zreport:includerÜ   )rˆ   zreport:omitrÜ   )r�   zreport:show_missingrÛ   )r‘   zreport:skip_coveredrÛ   )r’   zreport:skip_emptyrÛ   )r“   zreport:sort)r”   zhtml:extra_css)r•   zhtml:directoryrÝ   )r–   zhtml:skip_coveredrÛ   )r—   zhtml:skip_emptyrÛ   )r˜   z
html:title)r™   zhtml:show_contextsrÛ   )rš   z
xml:outputrÝ   )r›   zxml:package_depthrà   )rœ   zjson:outputrÝ   )r�   zjson:pretty_printrÛ   )rž   zjson:show_contextsrÛ   )rŸ   zlcov:outputrÝ   )r    zlcov:line_checksumsrÛ   c                ó˜   — |j                  d«      \  }}|j                  ||«      r$t        |d|› �«      }t        | | |||«      «       yy)ztSet an attribute on self if it exists in the ConfigParser.

        Returns True if the attribute was set.

        r²   r7   TF)rH   r/   Úgetattrr¬   )r   rÆ   ÚattrÚwhereÚtype_r*   r0   Úmethods           r!   r»   z+CoverageConfig._set_attr_from_config_option×  sO   € ð  Ÿ+™+ cÓ*‰ˆ�Ø�=‰=˜ &Ô)Ü˜R 3 u g Ó/ˆFÜ�D˜$¡ w°Ó 7Ô8ØØr"   c                ó:   — | j                   j                  |i «      S )z:Get a dictionary of options for the plugin named `plugin`.)r¢   r7   )r   rÎ   s     r!   Úget_plugin_optionsz!CoverageConfig.get_plugin_optionsê  s   € à×"Ñ"×&Ñ& v¨rÓ2Ð2r"   c                óÄ  — |dk(  r\i | _         t        |t        «      sJ ‚|j                  «       D ]/  \  }}t        |t        «      sJ ‚t        |«      | j                   |<   Œ1 y| j                  D ]  }|dd \  }}||k(  sŒt        | ||«        y |j                  d«      \  }}	}
|
r.|| j                  v r || j                  j                  |i «      |
<   yt        d|›�«      ‚)aB  Set an option in the configuration.

        `option_name` is a colon-separated string indicating the section and
        option name.  For example, the ``branch`` option in the ``[run]``
        section of the config file would be indicated with `"run:branch"`.

        `value` is the new value for the option.

        r¡   Né   r²   úNo such option: )r¡   r«   r   r©   r   rÜ   rº   r¬   Ú	partitionrv   r¢   Ú
setdefaultr	   )r   Úoption_namerM   r­   r@   rÊ   rã   rä   Úplugin_namerÄ   Úkeys              r!   Ú
set_optionzCoverageConfig.set_optionî  só   € ð ˜'Ò!ð ˆDŒJÜ˜e¤WÔ-Ð-Ð-ØŸ™ž‘��1Ü! !¤XÔ.Ð.Ð.Ü $ Q£�—
‘
˜1’ð &ð ð  ×3Ô3ˆKØ% b q˜/‰KˆD�%Ø˜Ó#Ü˜˜d EÔ*Ùð	 4ð *×3Ñ3°CÓ8Ñˆ�Q˜Ù�; $§,¡,Ñ.ØCHˆD×Ñ×*Ñ*¨;¸Ó;¸CÑ@Øô Ð,¨[¨OÐ<Ó=Ð=r"   c                ó8  — |dk(  r| j                   S | j                  D ]  }|dd \  }}||k(  sŒt        | |«      c S  |j                  d«      \  }}}|r9|| j                  v r+| j
                  j                  |i «      j                  |«      S t        d|›�«      ‚)a<  Get an option from the configuration.

        `option_name` is a colon-separated string indicating the section and
        option name.  For example, the ``branch`` option in the ``[run]``
        section of the config file would be indicated with `"run:branch"`.

        Returns the value of the option.

        r¡   Nrê   r²   rë   )r¡   rº   râ   rì   rv   r¢   r7   r	   )r   rî   rÊ   rã   rä   rï   rÄ   rð   s           r!   Ú
get_optionzCoverageConfig.get_option  s¬   € ð ˜'Ò!Ø—:‘:Ðð  ×3Ô3ˆKØ% b q˜/‰KˆD�%Ø˜Ó#Ü˜t TÓ*Ò*ð 4ð *×3Ñ3°CÓ8Ñˆ�Q˜Ù�; $§,¡,Ñ.Ø×&Ñ&×*Ñ*¨;¸Ó;×?Ñ?ÀÓDÐDô Ð,¨[¨OÐ<Ó=Ð=r"   c                ó€  — | j                   j                  «       D ���ci c]  \  }}||D �cg c]  }t        |«      ‘Œ c}“Œ! c}}}| _         | xj                  | j                  z  c_        | xj
                  | j                  z  c_        d| j                  v rd| _        t        | j                  «      }|| j                  z
  }|r(dj                  t        |«      «      }t        d|› �«      ‚|| j                  z  }t!        |«      dkD  r(dj                  t        |«      «      }t        d|› �«      ‚yc c}w c c}}}w )z7Make final adjustments to settings to make them usable.Ú
subprocessTz, zUnknown concurrency choices: r±   z"Conflicting concurrency settings: N)r¡   r©   rB   r�   r‚   rŒ   r�   ru   rt   r¿   rk   rÚ   ÚjoinÚsortedr	   ÚLIGHT_THREADSÚlen)r   r­   r@   rÐ   ÚconcurrenciesrÍ   ÚshowÚlight_threadss           r!   Úpost_processzCoverageConfig.post_process/  s   € àHLÏ
É
×HXÑHXÔHZÕ[ÑHZÁÀÀ1�a¹Ó;¹°AÔ,¨QÕ/¸Ñ;Ñ;ÐHZÓ[ˆŒ
à×Ò˜T×.Ñ.Ñ.ÕØ×Ò˜T×.Ñ.Ñ.Õà˜4Ÿ:™:Ñ%Ø ˆDŒMô ˜D×,Ñ,Ó-ˆØ $×":Ñ":Ñ:ˆÙØ—9‘9œV G›_Ó-ˆDÜÐ =¸d¸VÐDÓEÐEØ%¨×(:Ñ(:Ñ:ˆÜˆ}Ó Ò!Ø—9‘9œV MÓ2Ó3ˆDÜÐ BÀ4À&ÐIÓJÐJð "ùò <ùÔ[s   ŸD9¬D4¾D9Ä4D9c                óV   — t        d„ | j                  j                  «       D «       «      S )z:Make a list of (name, value) pairs for writing debug info.c              3  óN   K  — | ]  \  }}|j                  d «      rŒ||f–— Œ y­w)rÄ   N)Ú
startswith)Ú.0r­   r@   s      r!   Ú	<genexpr>z,CoverageConfig.debug_info.<locals>.<genexpr>F  s*   è ø€ Ð!dÑ5J©T¨Q°ÐRS×R^ÑR^Ð_bÕRc 1 a¤&Ñ5Jùs   ‚%œ	%)r
   Ú__dict__r©   r£   s    r!   Ú
debug_infozCoverageConfig.debug_infoD  s    € ä!Ñ!d°T·]±]×5HÑ5HÔ5JÓ!dÓdÐdr"   c                ó  — | j                   j                  «       D ��ci c]  \  }}|j                  d«      rŒ||“Œ }}}| j                  D ]o  \  }}|rt        nt
        j                  j                  }||   }t        |t        «      rt        t        ||«      «      }nt        |t        «      r ||«      }|||<   Œq t        j                  t        j                  |«      j!                  «       «      j#                  «       S c c}}w )zÊConvert to a string that can be ingested with `deserialize`.

        File paths used by `coverage run` are made absolute to ensure the
        deserialized config will refer to the same files.
        rÄ   )r  r©   r   ÚSERIALIZE_ABSPATHÚabs_path_if_existsr<   rC   rµ   r«   rÜ   r¹   rX   Úbase64Ú	b64encodeÚjsonÚdumpsÚencodeÚdecode)r   r­   r@   ÚdataÚ
must_existÚabs_fns         r!   Ú	serializezCoverageConfig.serializeH  sÓ   € ð "&§¡×!4Ñ!4Ô!6ÔPÑ!6™˜˜A¸a¿l¹lÈ3Õ>O��1‘Ð!6ˆÑPØ!×3Ô3‰MˆAˆzÙ+5Õ'¼2¿7¹7¿?¹?ˆFØ�Q‘ˆAÜ˜!œTÔ"Üœ˜V Q›Ó(‘Ü˜AœsÔ#Ù˜1“I�ØˆD�ŠGð 4ô ×Ñ¤§
¡
¨4Ó 0× 7Ñ 7Ó 9Ó:×AÑAÓCÐCùó Qs
   žD¸Dc                óÒ   — t        j                  t        j                  |j	                  «       «      j                  «       «      } | «       }|j                  j                  |«       |S )z:Take a string from `serialize`, and make a CoverageConfig.)r
  Úloadsr  Ú	b64decoder  r  r  Úupdate)ÚclsÚ
config_strr  Úconfigs       r!   ÚdeserializezCoverageConfig.deserializeY  sM   € ô �z‰zœ&×*Ñ*¨:×+<Ñ+<Ó+>Ó?×FÑFÓHÓIˆÙ“ˆØ�‰×Ñ˜tÔ$Øˆr"   N)rT   rU   )r?   r   rT   rU   )rÂ   rX   rÃ   úCallable[[str], None]r   r3   rT   r3   )rT   r_   )r   )
rÆ   ÚTConfigParserrã   rX   rä   rX   rå   rX   rT   r3   )rÎ   rX   rT   r   )rî   rX   rM   z!TConfigValueIn | TConfigSectionInrT   rU   )rî   rX   rT   zTConfigValueOut | None)rT   zlist[tuple[str, Any]])rT   rX   )r  rX   rT   r_   )rY   rZ   r[   r\   r   rª   r  r®   rÑ   rÓ   rÚ   Ú__annotations__rø   rº   r»   rè   rñ   ró   rý   r  r  Úclassmethodr  © r"   r!   r_   r_   ª   s¾   … ñóT?òl	€LòÐó$óSój#ò,Ð˜ó ò 7€MòIÐð` ðàðð ðð ð	ð
 ðð 
óó&3ó#>óJ>ó8Kó*eóDð" òó ñr"   r_   c                ó@   — t         j                  j                  | «      S )z2Make adjustments to a file path to make it usable.)r<   rC   Ú
expanduser©rC   s    r!   rB   rB   b  s   € ä�7‰7×Ñ˜dÓ#Ð#r"   c                ó‚   — t         j                  j                  | «      rt         j                  j                  | «      S | S )z-os.path.abspath, but only if the path exists.)r<   rC   Úexistsrµ   r!  s    r!   r  r  g  s*   € ä	‡w�w‡~�~�dÔÜ�w‰w�‰˜tÓ$Ð$àˆr"   c                óò   — g }|D ]<  }|j                  «       }	 t        j                  |«       |sŒ,|j                  |«       Œ> |S # t        j                  $ r}t	        d| › d|› d|›d|› �«      |‚d}~ww xY w)z=Check the values in a regex list and keep the non-blank ones.z	Invalid [z].z value r°   N)rI   ÚreÚcompileÚerrorr	   r   )Únamer0   rK   rJ   rM   Úes         r!   rP   rP   o  sˆ   € à€JÛˆØ—‘“ˆð	XÜ�J‰J�uÔò Ø×Ñ˜eÕ$ð ð Ðøô	 �x‰xò 	XÜ 	¨$¨¨r°&°¸ÀÀ	ÈÈAÈ3ÐOÓPÐVWÐWûð	Xús   ™AÁA6ÁA1Á1A6c                ó–   — | dk(  rd} | du}|st        j                  d«      }|r|} d}|sd} t        | t        «      sJ ‚| d|fddddg}|S )z€What config files should we try to read?

    Returns a list of tuples:
        (filename, is_our_file, was_file_specified)
    z.coveragercTÚCOVERAGE_RCFILE)z.coveragerc.tomlTF)z	setup.cfgFF)ztox.iniFF)zpyproject.tomlFF)r<   Úgetenvr«   rX   )re   Úspecified_fileÚrcfileÚfiles_to_trys       r!   Úconfig_files_to_tryr0  }  sw   € ð �mÒ#ØˆØ ¨Ð,€NÙä—‘Ð,Ó-ˆÙØ ˆKØ!ˆNÙà#ˆÜ�k¤3Ô'Ð'Ð'à	�d˜NÐ+Ø)Ø#Ø!Ø(ð€Lð Ðr"   c                ó>  — t        «       }| r?t        | «      }|D ]/  \  }}}|j                  |||¬«      }|r n|sŒ"t        d|›d�«      ‚ t	        j
                  d«      }	|	r|	|_        t	        j
                  d«      }
|
r1|j                  j                  d„ |
j                  d«      D «       «       t	        j
                  d«      }|r||_
         |j                  di |¤Ž t	        j
                  d	«      }|r|j                  ||d
¬«       |j                  «        |S )aÍ  Read the coverage.py configuration.

    Arguments:
        config_file: a boolean or string, see the `Coverage` class for the
            tricky details.
        warn: a function to issue warnings.
        all others: keyword arguments from the `Coverage` class, used for
            setting values in the configuration.

    Returns:
        config:
            config is a CoverageConfig object read from the appropriate
            configuration file.

    )r   zCouldn't read z as a config fileÚCOVERAGE_FILEÚCOVERAGE_DEBUGc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr2   )rI   )r  r8   s     r!   r  z'read_coverage_config.<locals>.<genexpr>È  s   è ø€ ÐAÑ/@¨!˜AŸG™GŸIÑ/@ùs   ‚rG   ÚCOVERAGE_COREÚCOVERAGE_FORCE_CONFIGTr  )r_   r0  rÑ   r	   r<   r,  ro   rp   r¸   rH   rm   r®   rý   )re   rÃ   r?   r  r/  Úfnamer   r-  Úconfig_readÚenv_data_fileÚdebugsÚenv_coreÚ
force_files                r!   Úread_coverage_configr=  �  s  € ô, Ó€Fñ Ü*¨;Ó7ˆã/;Ñ+ˆE�8˜^Ø ×*Ñ*¨5°$ÀÐ*ÓJˆKÙÙÚÜ! N°5°)Ð;LÐ"MÓNÐNð 0<ô —I‘I˜oÓ.€MÙØ(ˆÔô �Y‰YÐ'Ó(€FÙØ�‰×ÑÑA¨v¯|©|¸CÔ/@ÓAÔAô �y‰y˜Ó)€HÙØˆŒð €F×ÑÑ�vÒô —‘Ð2Ó3€JÙØ×Ñ˜ T°DÐÔ9ð ×ÑÔà€Mr"   )rC   rX   rT   rX   )r(  rX   r0   rX   rK   rW   rT   rW   )re   ú
bool | strrT   zlist[tuple[str, bool, bool]])re   r>  rÃ   r  r?   r   rT   r_   ).r\   Ú
__future__r   r  r½   r¶   rÓ   r
  r<   Úos.pathr%  Úcollections.abcr   r   r   Útypingr   r   Úcoverage.exceptionsr	   Úcoverage.miscr
   r   r   Úcoverage.tomlconfigr   r   Úcoverage.typesr   r   r   r   r   r   ÚConfigParserr   r  r€   r‹   r‰   r_   rB   r  rP   r0  r=  r  r"   r!   Ú<module>rH     sæ   ðñ "å "ã Û Û Û Û Û 	Û Û 	ß 7Ñ 7ß å +ß RÑ Rß A÷÷ ñ �BÓ€ômJ˜×1Ñ1ô mJð` "Ð$4Ñ4€ò€ð =ð€ð ØðÐ ôu�] Mô uóp$ó
óóð@?Øð?à
ð?ð ð?ð ô	?r"   