o
    vÆ&i&  ã                   @  s"  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	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 dd	lmZ dd
lmZ ddlmZ ddlmZ ddl m!Z! erjddlm"Z" eeƒZdZ#d%dd„Z$eG dd„ dƒƒZ%d&dd„Z&G dd „ d ƒZ'd'd#d$„Z(dS )(zXML reporting for coverage.pyé    )ÚannotationsN)ÚIterable)Ú	dataclass)ÚIOÚTYPE_CHECKINGÚAny)Ú__version__Úfiles)Úhuman_sortedÚhuman_sorted_itemsÚisolate_module)ÚFileReporter)Úget_analysis_to_report)ÚAnalysis)ÚTMorf)Ú__url__)ÚCoveragezQhttps://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtdÚhitÚintÚnumÚreturnÚstrc                 C  s   |dkrdS | | d›S )z0Return the fraction of `hit`/`num`, as a string.r   Ú1z.4g© )r   r   r   r   úX/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/coverage/xmlreport.pyÚrate"   s   r   c                   @  s:   e Zd ZU dZded< ded< ded< ded< ded< d	S )
ÚPackageDataz2Data we keep about each "package" (in Java terms).z"dict[str, xml.dom.minidom.Element]Úelementsr   ÚhitsÚlinesÚbr_hitsÚbranchesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r   r   r   r   *   s   
 r   Úparentr   ÚchildÚNonec                 C  s   |   |¡ dS )z=Append a child to a parent, in a way mypy will shut up about.N)ÚappendChild)r'   r(   r   r   r   r*   5   s   r*   c                   @  s4   e Zd ZdZdZddd„Zdddd„Zddd„Zd	S )ÚXmlReporterz<A reporter for writing Cobertura-style XML coverage results.z
XML reportÚcoverager   r   r)   c                 C  sr   || _ | j j| _tƒ | _| jjr2| jjD ]}tj |¡r1| jjr&| 	d¡}nt
 |¡}| j |¡ qi | _|  d S )Nú\/)r,   ÚconfigÚsetÚsource_pathsÚsourceÚosÚpathÚexistsÚrelative_filesÚrstripr	   Úcanonical_filenameÚaddÚpackages)Úselfr,   Úsrcr   r   r   Ú__init__?   s   

€zXmlReporter.__init__NÚmorfsúIterable[TMorf] | NoneÚoutfileúIO[str] | NoneÚfloatc                 C  s  |pt j}| j ¡  ¡ }tjj ¡ }|dusJ ‚| 	ddd¡| _
| j
j}|dus*J ‚| dt¡ | dttt ¡ d ƒƒ¡ | | j
 dt› d¡¡ | | j
 dt› d¡¡ t| j|ƒD ]\}}|  |||¡ q^| j
 d	¡}| |¡ t| jƒD ]}	| j
 d
¡}
t||
ƒ | j
 |	¡}t|
|ƒ qzd\}}d\}}| j
 d¡}| |¡ t| j ¡ ƒD ]m\}}| j
 d¡}t||ƒ | j
 d¡}t||ƒ t|j ¡ ƒD ]	\}}t||ƒ qÎ| d| t j!d¡¡ | dt"|j#|j$ƒ¡ |røt"|j%|j&ƒ}nd}| d|¡ | dd¡ ||j#7 }||j$7 }||j%7 }||j&7 }q­| dt|ƒ¡ | dt|ƒ¡ | dt"||ƒ¡ |rQ| dt|ƒ¡ | dt|ƒ¡ | dt"||ƒ¡ n| dd¡ | dd¡ | dd¡ | dd¡ | 't(| j
ƒ¡ || }|dkr~d}|S d||  | }|S )z¯Generate a Cobertura-compatible XML report for `morfs`.

        `morfs` is a list of modules or file names.

        `outfile` is a file object to write the XML to.

        Nr,   ÚversionÚ	timestampiè  z Generated by coverage.py: ú z
 Based on Úsourcesr1   )r   r   r9   ÚpackageÚclassesÚnameÚ.ú	line-rateÚ0úbranch-rateÚ
complexityzlines-validzlines-coveredzbranches-validzbranches-coveredr   g        g      Y@))ÚsysÚstdoutr,   Úget_dataÚhas_arcsÚxmlÚdomÚminidomÚgetDOMImplementationÚcreateDocumentÚxml_outÚdocumentElementÚsetAttributer   r   r   Útimer*   ÚcreateCommentr   ÚDTD_URLr   Úxml_fileÚcreateElementr
   r0   ÚcreateTextNoder   r9   Úitemsr   Úreplacer2   Úsepr   r   r   r    r!   ÚwriteÚserialize_xml)r:   r=   r?   rQ   ÚimplÚ	xcoverageÚfrÚanalysisÚxsourcesr3   ÚxsourceÚtxtÚlnum_totÚ	lhits_totÚbnum_totÚ	bhits_totÚ	xpackagesÚpkg_nameÚpkg_dataÚxpackageÚxclassesÚ_Ú	class_eltÚbranch_rateÚdenomÚpctr   r   r   ÚreportO   s€   
	
ÿÿ








ÿzXmlReporter.reportrg   r   rh   r   rQ   Úboolc              
   C  s  | j jr|jjdkrdS |j dd¡}| jD ]"}| j js!t 	|¡}| 
| dd¡d ¡r8|t|ƒd d… } nq| ¡  dd¡}| j |jdt|ƒ …  d¡¡ tj |¡pYd}d | d¡d| j j… ¡}| dd¡}| j |ti ddddƒ¡}	| j d¡}
t|
| j d	¡ƒ | j d
¡}t|
|ƒ |
 dtj ||¡¡ |
 d| dd¡¡ |
 dd¡ | ¡ }| ¡ }t|j ƒD ]`}| j d¡}| dt!|ƒ¡ | dt!t"||j#vƒƒ¡ |r||v r|| \}}| dd¡ | dd| | › d|› d|› d¡ ||v rdd„ || D ƒ}| dd |¡¡ t||ƒ q½t|j ƒ}|t|j#ƒ }|rHt$dd„ | %¡ D ƒƒ}t$dd„ | %¡ D ƒƒ}|| }nd}d}|
 dt&||ƒ¡ |r^t&||ƒ}nd}|
 d |¡ |
|	j'|< |	 j(|7  _(|	 j)|7  _)|	 j*|7  _*|	 j+|7  _+dS )!z(Add to the XML report for a single file.r   Nú\ú/é   r-   rI   ÚclassÚmethodsr   rH   ÚfilenamerM   rK   ÚlineÚnumberr   ÚbranchÚtruezcondition-coverageéd   z% (ú)c                 S  s    g | ]}|d k r
dnt |ƒ‘qS )r   Úexit)r   )Ú.0Úbr   r   r   Ú
<listcomp>è   s     z(XmlReporter.xml_file.<locals>.<listcomp>zmissing-branchesú,c                 s  s    | ]\}}|V  qd S ©Nr   ©r‰   ÚtÚkr   r   r   Ú	<genexpr>ð   s   € z'XmlReporter.xml_file.<locals>.<genexpr>c                 s  s    | ]	\}}|| V  qd S r   r   rŽ   r   r   r   r‘   ñ   s   € rJ   rL   ),r.   Ú
skip_emptyÚnumbersÚn_statementsr   ra   r0   r5   r	   r7   Ú
startswithÚlenÚrelative_filenamer8   r6   r2   r3   ÚdirnameÚjoinÚsplitÚxml_package_depthr9   Ú
setdefaultr   rW   r^   r*   rY   ÚrelpathÚbranch_statsÚmissing_branch_arcsÚsortedÚ
statementsr   r   ÚmissingÚsumÚvaluesr   r   r   r   r    r!   )r:   rg   rh   rQ   r   Úsource_pathÚrel_namer˜   Úpackage_namerF   ÚxclassÚxlinesrž   rŸ   r‚   ÚxlineÚtotalÚtakenÚannlinesÚclass_linesÚ
class_hitsÚclass_branchesÚmissing_branchesÚclass_br_hitsrw   r   r   r   r]   ®   sx   

þ"

þ



zXmlReporter.xml_file)r,   r   r   r)   r   )r=   r>   r?   r@   r   rA   )rg   r   rh   r   rQ   r{   r   r)   )r"   r#   r$   r%   Úreport_typer<   rz   r]   r   r   r   r   r+   :   s    
_r+   rS   úxml.dom.minidom.Documentc                 C  s   |   ¡ S )z Serialize a minidom node to XML.)Útoprettyxml)rS   r   r   r   rd     s   rd   )r   r   r   r   r   r   )r'   r   r(   r   r   r)   )rS   r´   r   r   ))r%   Ú
__future__r   r2   Úos.pathrN   rZ   Úxml.dom.minidomrR   Úcollections.abcr   Údataclassesr   Útypingr   r   r   r,   r   r	   Úcoverage.miscr
   r   r   Úcoverage.pluginr   Úcoverage.report_corer   Úcoverage.resultsr   Úcoverage.typesr   Úcoverage.versionr   r   r\   r   r   r*   r+   rd   r   r   r   r   Ú<module>   s8   


 M