o
    wiA*                     @  s   d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
 d dlmZ d dlZd dlmZmZmZ e ZG dd dZG d	d
 d
ZG dd dZG dd dZdS )    )annotationsN)OrderedDictdefaultdict)IOAny)tabulate)
GraphProtodefshelperc                   @      e Zd Zd
ddZdddZd	S )AttrCoveragereturnNonec                 C  s   d | _ t | _d S N)namesetvaluesself r   ^/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/backend/test/report/coverage.py__init__   s   zAttrCoverage.__init__attronnx.AttributeProtoc                 C  sL   | j d |j hv s
J |j | _ t|}t|trt|}| jt| d S r   )	r   r
   get_attribute_value
isinstancelisttupler   addstr)r   r   valuer   r   r   r      s   

zAttrCoverage.addNr   r   )r   r   r   r   __name__
__module____qualname__r   r   r   r   r   r   r          
r   c                   @  r   )NodeCoverager   r   c                 C  s   d | _ tt| _d S r   )op_typer   r   attr_coveragesr   r   r   r   r   &   s   zNodeCoverage.__init__nodeonnx.NodeProtoc                 C  sj   | j d |j fv s
J | j d u r$|j | _ | j d usJ tj| j |jd| _|jD ]}| j|j | q'd S )N)domain)	r(   r	   
get_schemar,   schema	attributer)   r   r   )r   r*   r   r   r   r   r   *   s   

zNodeCoverage.addNr!   )r*   r+   r   r   r"   r   r   r   r   r'   %   r&   r'   c                   @  r   )ModelCoverager   r   c                 C  s   d | _ d | _tt| _d S r   )r   graphr   r'   node_coveragesr   r   r   r   r   7   s   zModelCoverage.__init__modelonnx.ModelProtoc                 C  sd   | j d |jj fv sJ | j d u r |jj | _ | j d usJ |j| _|jjD ]}| j|j | q$d S r   )r   r1   r*   r2   r(   r   )r   r3   r*   r   r   r   r   <   s   

zModelCoverage.addNr!   )r3   r4   r   r   r"   r   r   r   r   r0   6   s    
r0   c                   @  sR   e Zd Zd$ddZd%d	d
Zd&ddZd'ddZd(ddZd)ddZd*d!d"Z	d#S )+Coverager   r   c                 C  s,   t tt td| _t tt td| _d S )N)loadedpassed)r   r'   bucketsr0   modelsr   r   r   r   r   I   s   zCoverage.__init__r*   r+   bucketr   c                 C  s   | j | |j | d S r   )r8   r(   r   )r   r*   r:   r   r   r   add_nodeS   s   zCoverage.add_noder1   onnx.GraphProtoc                 C  s   |j D ]}| || qd S r   )r*   r;   )r   r1   r:   r*   r   r   r   	add_graphV   s   
zCoverage.add_graphr3   r4   is_modelboolc                 C  s2   |  |j| |r| j| |jj | d S d S r   )r=   r1   r9   r   r   )r   r3   r:   r>   r   r   r   	add_modelZ   s   zCoverage.add_modelprotoc                 C  s"   t |tjsJ | ||| d S r   )r   onnx
ModelProtor@   )r   rA   r:   r>   r   r   r   	add_proto`   s   zCoverage.add_protowriterIO[str]c           
   	     s"  | d | dt| jd  dt| jd  dtt d | d g }g }g }g }| jd  D ]8 dd	  j D } fd
d	 jjD }t|t| }|r\t	j
|}	nd}	| j|	g | j q4| t|ddgdd | d t	jdd ur| ||| d S d S )Nz%---------- onnx coverage: ----------
z!Operators (passed/loaded/total): r7   /r6   
z%------------------------------------
c                 S  s"   g | ]}|j  d t|j qS )z: )r   lenr   ).0attr_covr   r   r   
<listcomp>p   s    z(Coverage.report_text.<locals>.<listcomp>c                   s    g | ]}| j vr| d qS )z: 0)r)   )rJ   r   op_covr   r   rL   t   s
    
zNo attributesOperatorzAttributes
(name: #values)plain)headerstablefmtCSVDIR)writerI   r8   _all_schemasr   r)   r.   
attributessortedoslinesepjoinappendr(   r   environget
report_csv)
r   rE   rowsr7   all_opsexperimentalcovered_attrsuncovered_attrsattrsattrs_columnr   rM   r   report_textd   sB   
.


zCoverage.report_textr`   	list[str]r7   list[str | None]ra   c              	   C  s  t D ]}|jdv r||j |jtjjjkr||j q|	  t
jtt
jdd}t
jtt
jdd}t }t }g }	t
j|rt|)}
t|
}|jsYJ t|j}	|D ]}|d }|d= ||t|< q`W d    n1 szw   Y  t
j|rt|}t|}|D ]}|d }|d= ||t|< qW d    n1 sw   Y  t
jd}|	dd  }t|d	}
d|	vr|	d ||	vr|	t| n|t| tj|
|	d
}|  |D ]8}|}||v r|d }||vrt ||< |D ]	}d|| |< q||v rd|| t|< qd|| t|< qi }d|v r2|d }|d= t| dt| d|t|< d|d< |D ]}t||| d< |||  qH|| W d    n	1 skw   Y  t|d	}d|	d< tj||	d
}|  d}| jD ]j}| j| D ]a}d}| j| | jD ]}||v r|d7 }qd}|dkr|| jd v rqd}|d7 }||vrt ||< |D ]	}d|| |< qt| dt| j| | j d| || t|< qq|  d|v r|d }|d= t||v r|t|= t| jd  d| d|t|< d|d< |D ]}||| d< |||  q(|| W d    n	1 sIw   Y  tt
jtt
jddd	}t|}|dt j ! " #ddg W d    d S 1 sw   Y  d S )N>   ai.onnx rS   z	nodes.csvz
models.csvOpModelBACKEND   w)
fieldnamesz (Experimental)zSkipped!zPassed!zFailed!SummaryrG   z node tests passedr   r6   r7   z nodes covered: z model tests passedzmetadata.csvzLatest UpdateT )$rU   r,   r[   r   support_levelr	   OpSchemaSupportTypeEXPERIMENTALsortrX   pathrZ   r   r\   r]   r   isfileopencsv
DictReaderrp   r   remove
DictWriterwriteheaderrI   writerowr9   r2   clearrE   datetimenow	isoformatreplace)r   r`   r7   ra   r.   
nodes_pathmodels_pathexisting_nodesexisting_models
frameworks
nodes_filereaderrowopmodels_filer3   backendother_frameworksnode_writerr*   	node_nameother_framework	summariesmodel_writer
num_modelsr:   num_coveredmsgmetadata_filemetadata_writerr   r   r   r^      s   











  




"


+
$zCoverage.report_csvNr!   )r*   r+   r:   r   r   r   )r1   r<   r:   r   r   r   )r3   r4   r:   r   r>   r?   r   r   )rA   r4   r:   r   r>   r?   r   r   )rE   rF   r   r   )r`   rg   r7   rh   ra   rg   r   r   )
r#   r$   r%   r   r;   r=   r@   rD   rf   r^   r   r   r   r   r5   H   s    






/r5   )
__future__r   r|   r   rX   collectionsr   r   typingr   r   r   rB   r   r	   r
   get_all_schemasrU   r   r'   r0   r5   r   r   r   r   <module>   s   