§
    0›j:"  ã                  óD  — 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 ddlmZm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 ddlmZmZ ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z% e
rddlm&Z&  ee¦  «        Ze'Z'dd„Z(dd„Z)d d„Z*dd„Z+d!d„Z, G d„ de¦  «        Z-dS )"z'Python source expertise for coverage.pyé    )ÚannotationsN)ÚIterable)ÚTYPE_CHECKING)Úenv)ÚCoverageExceptionÚNoSource)Úcanonical_filenameÚrelative_filenameÚzip_location)Úisolate_moduleÚ
join_regex)ÚPythonParser)Úsource_encodingÚsource_token_lines)Ú
CodeRegionÚFileReporter)Úcode_regions)ÚTArcÚTLineNoÚTMorfÚTSourceTokenLines)ÚCoverageÚfilenameÚstrÚreturnÚbytesc                óÎ   — t          | d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |                     dd¦  «                             dd¦  «        S )zFRead the Python source text from `filename`.

    Returns bytes.

    ÚrbNs   
ó   
ó   )ÚopenÚreadÚreplace)r   ÚfÚsources      úN/home/lighthouse/health/venv/lib64/python3.11/site-packages/coverage/python.pyÚread_python_sourcer'   !   s™   € õ 
ˆh˜Ñ	Ô	ð  Ø—’‘”ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð �>Š>˜' 5Ñ)Ô)×1Ò1°%¸Ñ?Ô?Ð?s   ‘2²6¹6c                óÚ  — t           j                             | ¦  «        \  }}|dk    rt          j        rddg}n|g}|D ]J}||z   }t           j                             |¦  «        rt          |¦  «        } n)t          |¦  «        }|� nŒKt          d| › d�d¬¦  «        ‚| 	                    dd	¦  «        }| 
                    t          |¦  «        d
¦  «        }|r|d         dk    r|dz  }|S )z#Return the source code, as unicode.ú.pyz.pywNzNo source for code: 'z'.z	no-source)Úslugó   ó    r#   éÿÿÿÿú
)ÚosÚpathÚsplitextr   ÚWINDOWSÚexistsr'   Úget_zip_bytesr   r#   Údecoder   )r   ÚbaseÚextÚextsÚtry_filenameÚsource_bytesr%   s          r&   Úget_python_sourcer;   -   s  € å”× Ò  Ñ*Ô*�I€Dˆ#Ø
ˆe‚|€|�œ€|Ø�vˆˆˆàˆuˆð ð Oð OˆØ˜c‘zˆÝŒ7�>Š>˜,Ñ'Ô'ð 	å-¨lÑ;Ô;ˆLØˆEõ % \Ñ2Ô2ˆØÐ#ØˆEð $õ Ð;¨xÐ;Ð;Ð;À+ÐNÑNÔNÐNð  ×'Ò'¨¨tÑ4Ô4€LØ× Ò ¥°Ñ!>Ô!>À	ÑJÔJ€Fð ð �&˜”* Ò$Ð$Ø�$‰ˆà€Mó    úbytes | Nonec                óÞ   — t          | ¦  «        }|�[|\  }}	 t          j        |¦  «        }n# t          j        $ r Y dS w xY w	 |                     |¦  «        }n# t
          $ r Y dS w xY w|S dS )zûGet data from `filename` if it is a zip file path.

    Returns the bytestring data read from the zip file, or None if no zip file
    could be found or `filename` isn't in it.  The data returned will be
    an empty string if the file is empty.

    N)r   Ú	zipimportÚzipimporterÚZipImportErrorÚget_dataÚOSError)r   Úzipfile_innerÚzipfileÚinnerÚziÚdatas         r&   r4   r4   P   s    € õ ! Ñ*Ô*€MØÐ Ø&‰ˆ�ð	ÝÔ& wÑ/Ô/ˆBˆBøÝÔ'ð 	ð 	ð 	Ø�4�4ð	øøøð	Ø—;’;˜uÑ%Ô%ˆDˆDøÝð 	ð 	ð 	Ø�4�4ð	øøøàˆØˆ4s    ˜- ­A ¿A ÁA Á
A(Á'A(c                ó  — |                       d¦  «        r| S |                       d¦  «        r_| dd…         }t          j                             |¦  «        r|S t          j        r&|dz   }t          j                             |¦  «        r|S |S | S )z™Return the source filename for `filename`.

    Given a file name being traced, return the best guess as to the source
    file to attribute it to.

    r)   )z.pycz.pyoNr-   Úw)Úendswithr/   r0   r3   r   r2   )r   Úpy_filenameÚpyw_filenames      r&   Úsource_for_filerN   g   sœ   € ð ×Ò˜ÑÔð àˆà	×	Ò	Ð+Ñ	,Ô	,ð à˜s ˜s”mˆÝŒ7�>Š>˜+Ñ&Ô&ð 	àÐÝŒ;ð 	$à&¨Ñ,ˆLÝŒw�~Š~˜lÑ+Ô+ð $Ø#Ð#àÐð €Or<   Úmorfr   c                óÀ   — t          | d¦  «        r| j        r| j        }n/t          | t          j        ¦  «        rt          d| › d�¦  «        ‚| }t          |¦  «        }|S )z6Get the source filename for the module-or-file `morf`.Ú__file__zModule z has no file)ÚhasattrrQ   Ú
isinstanceÚtypesÚ
ModuleTyper   rN   )rO   r   s     r&   Úsource_for_morfrV   „   sn   € åˆt�ZÑ Ô ð  T¤]ð Ø”=ˆˆÝ	�D�%Ô*Ñ	+Ô	+ð õ  Ð <¨$Ð <Ð <Ð <Ñ=Ô=Ð=àˆå˜xÑ(Ô(€HØ€Or<   c                  óÊ   ‡ — e Zd ZdZd/d0ˆ fd	„Zd1d„Zd1d„Zed2d„¦   «         Zd3d„Z	d4d„Z
d3d„Zd5d„Zd6d„Zd3d„Zd7d„Zd8d„Z	 d/d9d$„Zd:d%„Zd1d&„Zd;d(„Zd<d*„Zd=d,„Zd>d.„Zˆ xZS )?ÚPythonFileReporterz!Report support for a Python file.NrO   r   ÚcoverageúCoverage | Noner   ÚNonec                ó(  •— || _         t          |¦  «        }|}d}| j         �| j         j        j        rd}|rt	          |¦  «        }t          ¦   «                              |¦  «         t          |d¦  «        ro|j         	                    dt          j        ¦  «        }t          j                             |¦  «                             d¦  «        r|t          j        dz   z  }|dz  }nt          |¦  «        }|| _        d | _        d | _        d | _        d S )NTFÚ__name__ú.z	__init__.Ú__init__r)   )rY   rV   ÚconfigÚrelative_filesr	   Úsuperr_   rR   r]   r#   r/   Úsepr0   ÚbasenameÚ
startswithr
   ÚrelnameÚ_sourceÚ_parserÚ	_excluded)ÚselfrO   rY   r   ÚfnameÚcanonicalizeÚnameÚ	__class__s          €r&   r_   zPythonFileReporter.__init__–   s  ø€ Ø ˆŒå" 4Ñ(Ô(ˆàˆØˆØŒ=Ð$ØŒ}Ô#Ô2ð %Ø$�Øð 	1Ý& xÑ0Ô0ˆEÝ‰Œ×Ò˜ÑÔÐå�4˜Ñ$Ô$ð 	/Ø”=×(Ò(¨­b¬fÑ5Ô5ˆDÝŒw×Ò Ñ)Ô)×4Ò4°[ÑAÔAð ,Ø�œ Ñ+Ñ+�Ø�E‰MˆDˆDå$ XÑ.Ô.ˆDØˆŒà#'ˆŒØ,0ˆŒØˆŒˆˆr<   r   c                ó   — d| j         ›d�S )Nz<PythonFileReporter ú>)r   ©rj   s    r&   Ú__repr__zPythonFileReporter.__repr__±   s   € Ø8 d¤mÐ8Ð8Ð8Ð8r<   c                ó   — | j         S ©N)rf   rq   s    r&   r
   z$PythonFileReporter.relative_filename´   s
   € ØŒ|Ðr<   r   c                óÈ   — | j         €J ‚| j        €Lt          | j        | j                              d¦  «        ¬¦  «        | _        | j                             ¦   «          | j        S )z&Lazily create a :class:`PythonParser`.NÚexclude)r   rv   )rY   rh   r   r   Ú_exclude_regexÚparse_sourcerq   s    r&   ÚparserzPythonFileReporter.parser·   sf   € ð Œ}Ð(Ð(Ð(ØŒ<ÐÝ'ØœØœ×4Ò4°YÑ?Ô?ðñ ô ˆDŒLð ŒL×%Ò%Ñ'Ô'Ð'ØŒ|Ðr<   úset[TLineNo]c                ó   — | j         j        S )z2Return the line numbers of statements in the file.)ry   Ú
statementsrq   s    r&   ÚlineszPythonFileReporter.linesÃ   s   € àŒ{Ô%Ð%r<   údict[TLineNo, TLineNo]c                ó   — | j         j        S )z>A map of line numbers to first-line in a multi-line statement.)ry   Úmultiline_maprq   s    r&   r€   z PythonFileReporter.multiline_mapÇ   s   € àŒ{Ô(Ð(r<   c                ó   — | j         j        S )z;Return the line numbers of excluded statements in the file.)ry   Úexcludedrq   s    r&   Úexcluded_linesz!PythonFileReporter.excluded_linesË   s   € àŒ{Ô#Ð#r<   r}   úIterable[TLineNo]c                ó6   — | j                              |¦  «        S rt   )ry   Útranslate_lines)rj   r}   s     r&   r†   z"PythonFileReporter.translate_linesÏ   s   € ØŒ{×*Ò*¨5Ñ1Ô1Ð1r<   ÚarcsúIterable[TArc]ú	set[TArc]c                ó6   — | j                              |¦  «        S rt   )ry   Útranslate_arcs)rj   r‡   s     r&   r‹   z!PythonFileReporter.translate_arcsÒ   s   € ØŒ{×)Ò)¨$Ñ/Ô/Ð/r<   c                ó¨   — | j         €J ‚| j                             t          | j         j        j        | j         j        j        z   ¦  «        ¦  «        }|S rt   )rY   ry   Úlines_matchingr   r`   Úpartial_listÚpartial_always_list)rj   Ú	no_branchs     r&   Úno_branch_linesz"PythonFileReporter.no_branch_linesÕ   sO   € ØŒ}Ð(Ð(Ð(Ø”K×.Ò.Ý�t”}Ô+Ô8¸4¼=Ô;OÔ;cÑcÑdÔdñ
ô 
ˆ	ð Ðr<   c                ó4   — | j                              ¦   «         S rt   )ry   r‡   rq   s    r&   r‡   zPythonFileReporter.arcsÜ   s   € ØŒ{×ÒÑ!Ô!Ð!r<   údict[TLineNo, int]c                ó4   — | j                              ¦   «         S rt   )ry   Úexit_countsrq   s    r&   r•   zPythonFileReporter.exit_countsß   s   € ØŒ{×&Ò&Ñ(Ô(Ð(r<   Ústartr   ÚendÚexecuted_arcsúIterable[TArc] | Nonec                ó8   — | j                              ||¦  «        S rt   )ry   Úmissing_arc_description)rj   r–   r—   r˜   s       r&   r›   z*PythonFileReporter.missing_arc_descriptionâ   s   € ð Œ{×2Ò2°5¸#Ñ>Ô>Ð>r<   c                ó8   — | j                              ||¦  «        S rt   )ry   Úarc_description)rj   r–   r—   s      r&   r�   z"PythonFileReporter.arc_descriptionê   s   € ØŒ{×*Ò*¨5°#Ñ6Ô6Ð6r<   c                óP   — | j         €t          | j        ¦  «        | _         | j         S rt   )rg   r;   r   rq   s    r&   r%   zPythonFileReporter.sourceí   s#   € ØŒ<ÐÝ,¨T¬]Ñ;Ô;ˆDŒLØŒ|Ðr<   Úboolc                óŠ   — t           j                             | j        ¦  «        \  }}|                     d¦  «        rdS |sdS dS )zäDoes it seem like this file should contain Python?

        This is used to decide if a file reported as part of the execution of
        a program was really likely to have contained Python in the first
        place.

        r)   TF)r/   r0   r1   r   re   )rj   Ú_r7   s      r&   Úshould_be_pythonz#PythonFileReporter.should_be_pythonò   sL   € õ ”×!Ò! $¤-Ñ0Ô0‰ˆˆ3ð �>Š>˜%Ñ Ô ð 	Ø�4àð 	Ø�4àˆur<   r   c                óD   — t          |                      ¦   «         ¦  «        S rt   )r   r%   rq   s    r&   r   z%PythonFileReporter.source_token_lines  s   € Ý! $§+¢+¡-¤-Ñ0Ô0Ð0r<   úIterable[CodeRegion]c                óD   — t          |                      ¦   «         ¦  «        S rt   )r   r%   rq   s    r&   r   zPythonFileReporter.code_regions	  s   € Ý˜DŸKšK™MœMÑ*Ô*Ð*r<   úIterable[tuple[str, str]]c                ó
   — ddgS )N)ÚfunctionÚ	functions)ÚclassÚclasses© rq   s    r&   Úcode_region_kindsz$PythonFileReporter.code_region_kinds  s   € à%Ø ð
ð 	
r<   rt   )rO   r   rY   rZ   r   r[   )r   r   )r   r   )r   rz   )r   r~   )r}   r„   r   rz   )r‡   rˆ   r   r‰   )r   r‰   )r   r“   )r–   r   r—   r   r˜   r™   r   r   )r–   r   r—   r   r   r   )r   rŸ   )r   r   )r   r¤   )r   r¦   )r]   Ú
__module__Ú__qualname__Ú__doc__r_   rr   r
   Úpropertyry   r}   r€   rƒ   r†   r‹   r‘   r‡   r•   r›   r�   r%   r¢   r   r   r­   Ú__classcell__)rn   s   @r&   rX   rX   “   sÆ  ø€ € € € € Ø+Ð+ðð ð ð ð ð ð ð69ð 9ð 9ð 9ðð ð ð ð ð	ð 	ð 	ñ „Xð	ð&ð &ð &ð &ð)ð )ð )ð )ð$ð $ð $ð $ð2ð 2ð 2ð 2ð0ð 0ð 0ð 0ðð ð ð ð"ð "ð "ð "ð)ð )ð )ð )ð 04ð	?ð ?ð ?ð ?ð ?ð7ð 7ð 7ð 7ðð ð ð ð
ð ð ð ð(1ð 1ð 1ð 1ð+ð +ð +ð +ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r<   rX   )r   r   r   r   )r   r   r   r   )r   r   r   r=   )rO   r   r   r   ).r°   Ú
__future__r   Úos.pathr/   rT   r?   Úcollections.abcr   Útypingr   rY   r   Úcoverage.exceptionsr   r   Úcoverage.filesr	   r
   r   Úcoverage.miscr   r   Úcoverage.parserr   Úcoverage.phystokensr   r   Úcoverage.pluginr   r   Úcoverage.regionsr   Úcoverage.typesr   r   r   r   r   r!   r'   r;   r4   rN   rV   rX   r¬   r<   r&   ú<module>r¿      s  ðð .Ð -à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø (Ð (Ð (Ð (Ð (Ð (Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø )Ð )Ð )Ð )Ð )Ð )Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bàð "Ø!Ð!Ð!Ð!Ð!Ð!ð €^�BÑÔ€à€ð	@ð 	@ð 	@ð 	@ð ð  ð  ð  ðFð ð ð ð.ð ð ð ð:ð ð ð ð}
ð }
ð }
ð }
ð }
˜ñ }
ô }
ð }
ð }
ð }
r<   