o
    wi-                     @  s   U d dl mZ d dlZd dlmZ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 er9d dlmZ d#ddZd$ddZg aded< g aded< d%ddZd%ddZd&ddZd&ddZd'd d!Zed"krqe  dS dS )(    )annotationsN)IOTYPE_CHECKINGAny)AttributeProtodefsload)collect_snippets)load_model_tests)Runner)SequenceschemasSequence[defs.OpSchema]returnboolc                 C  s   t dd | D S )Nc                 s  s    | ]}|j d kV  qdS 
ai.onnx.mlN)domain.0s r   \/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/backend/test/stat_coverage.py	<genexpr>   s    zis_ml.<locals>.<genexpr>)any)r   r   r   r   is_ml   s   r   fIO[Any]mlNonec                 C  sP   |  d |r|  d n|  d |  d |  d |  d |  d d S )Nz# Test Coverage Reportz (ONNX-ML Operators)
z (ONNX Core Operators)
z## Outlines
z,* [Node Test Coverage](#node-test-coverage)
z.* [Model Test Coverage](#model-test-coverage)
z2* [Overall Test Coverage](#overall-test-coverage)
write)r   r   r   r   r   gen_outlines   s   




r"   zSequence[str]common_coveredexperimental_coveredc                   s  t h d t tfdd| D atfdd| D }t fdd|D }tfdd| D atfdd| D }t fdd|D }ttt| t| }ttt| t| }|d	 |d
 |r|dtt d| dttt| d ddt| d	 n|d |r|dtt|ttt| d t| n|d g d}	t|t|g}
|	D ]}|d|dd   d|dd  	 
dd d q|d t|	|
D ]o\}}|d| d |D ]Z}|d|  |v r>|dt|  d  t| D ]!\}}|d! |d"| d# |d$| d% |d& qn| v rI|d' n|d( |d) q|d* qd S )+N>   MultinomialRandomNormalRandomUniformRandomNormalLikeRandomUniformLikec                 3  >    | ]}|j v r|jtjjjkr|jd k kr|j V  qdS r   namesupport_levelr   OpSchemaSupportTypeCOMMONr   r   r   
node_testsr   r   r   7       
z)gen_node_test_coverage.<locals>.<genexpr>c                 3  >    | ]}|j vr|jtjjjkr|jd k kr|j V  qdS r   r+   r   r1   r   r   r   >   r3   c                 3      | ]	}| v r|V  qd S Nr   r   r,   
generatorsr   r   r   E   s    c                 3  r*   r   r,   r-   r   r.   r/   EXPERIMENTALr   r   r1   r   r   r   F   r3   c                 3  r4   r   r:   r   r1   r   r   r   M   r3   c                 3  r5   r6   r   r7   r8   r   r   r   T   s    z# Node Test Coverage
z## Summary
zNode tests have covered /z (d   z.2fz%, z) generators excluded) common operators.

z6Node tests have covered 0/0 (N/A) common operators. 

zYNode tests have covered {}/{} ({:.2f}%, {} generators excluded) experimental operators.

z;Node tests have covered 0/0 (N/A) experimental operators.

)z!&#x1F49A;Covered Common Operatorsz"&#x1F494;No Cover Common Operatorsz'&#x1F49A;Covered Experimental Operatorsz(&#x1F494;No Cover Experimental Operatorsz* [	   z](# -z)

## z### z
There are z" test cases, listed as following:

<details>
	<summary>z</summary>

z
```python
z
```

</details>
z (random generator operator)
z (call for test cases)
z

z<br/>

)setr	   sortedr#   r$   lenr!   floatformatlowerreplacezip)r   r   r   common_no_covercommon_generatorexperimental_no_coverexperimental_generator
num_commonnum_experimentaltitles	all_liststlr   summarycoder   )r9   r   r2   r   gen_node_test_coverage(   s   	




6




rZ   c                 C  s4  | d i }| D ]}|||j< q	i }g }tddD ]>}|jdrItjtjtj	t
ddd|j}tj|sCtd|d|| qt|}	|tj|	d q|  d	}
|D ]&}t|}|r~d	}|jD ]	}|jd
krxd}qo|s|qad}
| d|jj d d}|jjD ]m}|jtv s|jtv r|d7 }|jD ]W}|j|vri ||j< |j||j vrg ||j |j< |jtjkr|j||j |j vr||j |j |j q|jtjkr|j||j |j vr||j |j |j q|jtj kr|j!||j |j vr||j |j |j! q|jtj"kr=|j#||j |j vr<||j |j |j# q|jtj$kr]|j%||j |j vr\||j |j |j% q|jtj&kr}|j'||j |j vr|||j |j |j' q|jtj(kr|j)||j |j vr||j |j |j) q|jtj*kr|j+||j |j vr||j |j |j+ q|jtj,kr|j-||j |j vr||j |j |j- q|jtj.kr|j/||j |j vr||j |j |j/ qq| d|jj d| dt0|jj ddt1| t1t0|jj  d	 | d | d t2|D ]R}| d | d| dt0||  dt0|| j3 d t2|| j3D ]%}||| v rr| | dt0|| |  d qV| | d qV| d q0| d qa|
s|r| d d S d S d S )Nz# Model Test Coverage
real)kindzonnx/backend/test/data/light/z..zUnable to find model .z
model.onnxFr   TrB   rA   r      z has z nodes. Of these, z are covered by node tests (g      Y@z%)


rC   z<summary>nodes</summary>

rD   z: z out of z attributes covered</summary>

z: 0
rE   z</details>


z+No model tests present for selected domain
)4r!   r,   r
   url
startswithospathnormpathjoindirname__file__existsFileNotFoundErrorappendr   prepare_model_datasortr   opset_importr   graphnodeop_typer#   r$   	attributetyper   FLOATr   INTiSTRINGr   TENSORrV   GRAPHgFLOATSfloatsINTSintsSTRINGSstringsTENSORStensorsGRAPHSgraphsrH   rI   rG   
attributes)r   r   r   schema_dictschemaattrsmodel_pathsrt
model_name	model_dirmodel_writtenmodel_pb_pathmodel
ml_presentopsetnum_coveredrn   attroprp   r   r   r   gen_model_test_coverage   s   










(&r   c                 C  s   |  d |  d d S )Nz# Overall Test Coverage
z## To be filled.
r    r   r   r   r   gen_overall_test_coverage  s   
r   c                 C  s   |  d d S )Nz.<!--- SPDX-License-Identifier: Apache-2.0 -->
r    r   r   r   r   gen_spdx  s   r   c                  C  s8  t jt jt jt jt jt} t j| d}t }t|}t j|d}t	|dddd!}t
| t|d t||d t||d t| W d    n1 sXw   Y  |rt j|d}t	|dddd"}t
| t|d	 t||d	 t||d	 t| W d    d S 1 sw   Y  d S d S )
NdocszTestCoverage.mdzw+ zutf-8)newlineencodingFzTestCoverage-ml.mdT)ra   rb   re   realpathrf   rd   r   get_all_schemasr   openr   r"   rZ   r   r   )base_dirdocs_dirr   has_mlfnamer   r   r   r   main  s0   "



"r   __main__)r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   )
__future__r   ra   typingr   r   r   onnxr   r   r   onnx.backend.test.caser	   onnx.backend.test.loaderr
   onnx.backend.test.runnerr   collections.abcr   r   r"   r#   __annotations__r$   rZ   r   r   r   r   __name__r   r   r   r   <module>   s*   



p
i


