a
    ==icá  ã                   @   s\   d dl mZ d dlmZmZ d dlZd dlZd dlmZ ej	j
Z
dd„ Zdd„ Zd	d
„ ZdS )é    )Ú
caffe2_pb2)ÚcoreÚ	workspaceN)ÚZipFilec              
   C   s¤  t | ƒ\}}}t|ƒ}t|ƒ}t|ƒ}|| }ttj |d¡dƒJ}	|	 d¡ |	 d¡ |	 d¡ |	 d ||t|| d ƒd ¡¡ |	 d	¡ |	 d
¡ |	 d |¡¡ t	|ƒD ]}
|	 d|
 d ¡ q´|	 d¡ |	 d¡ |	 d
¡ |	 d |¡¡ t	|ƒD ]}
|	 d|
 d ¡ q|	 d¡ |	 d¡ |	 d¡ |	 d
¡ |	 d |¡¡ t	|ƒD ]}
|	 d|
 d ¡ q\|	 d¡ W d   ƒ n1 s–0    Y  d S )NzSerializedTestCoverage.mdzw+z"# Serialized Test Coverage Report
z©This is an automatically generated file. Please see `caffe2/python/serialized_test/README.md` for details. In the case of merge conflicts, please rebase and regenerate.
z## Summary
z5Serialized tests have covered {}/{} ({}%) operators

iè  é
   z## Not covered operators
z
<details>
z7<summary>There are {} not covered operators</summary>

z* Ú
z</details>

z## Covered operators
z3<summary>There are {} covered operators</summary>

z%## Excluded from coverage statistics
z### Schemaless operators
z6<summary>There are {} schemaless operators</summary>

)
Úgen_coverage_setsÚlenÚopenÚosÚpathÚjoinÚwriteÚformatÚintÚsorted)Ú
source_dirÚ
output_dirÚcoveredÚnot_coveredZ
schemalessZnum_coveredZnum_not_coveredZnum_schemalessZ	total_opsÚfÚn© r   úw/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/serialized_test/coverage.pyÚgen_serialized_test_coverage   s\    


þÿ

ÿÿ


ÿÿ



ÿÿr   c                 C   st   t | ƒ}tƒ }g }t ¡ D ]N}t |¡}|d ur8|jr8q|rP||vrh| |¡ q| d¡dkr| 	|¡ q|||fS )NZ_ENGINE_éÿÿÿÿ)
Úgen_covered_opsÚsetr   Z_GetRegisteredOperatorsÚOpSchemaÚgetÚprivateÚaddÚfindÚappend)r   Zcovered_opsZnot_covered_opsZschemaless_opsZop_nameÚsr   r   r   r   D   s    
r   c              	   C   sX  dd„ }t ƒ }t | ¡D ]8}tj | |¡}tj |¡s:qt ¡ }t|ƒ}| 	|¡ W d   ƒ n1 sj0    Y  tj |d¡}t
|dƒ}| ¡ }W d   ƒ n1 sª0    Y  ||ƒ}	| |	j¡ d}
tj |d |
¡¡}tj |¡rt
|dƒ}| ¡ }W d   ƒ n1 s0    Y  ||ƒ}| |j¡ |
d7 }
tj |d |
¡¡}qàq|S )Nc                 S   s   t  ¡ }| | ¡ |S )N)r   ZOperatorDefZParseFromString)ÚxÚprotor   r   r   Úparse_protoX   s    
z$gen_covered_ops.<locals>.parse_protozop.pbÚrbr   z
grad_{}.pbé   )r   r   Úlistdirr   r   ÚisfileÚtempfileÚmkdtempr   Ú
extractallr
   Úreadr!   Útyper   )r   r'   r   r   ÚzipfileÚtemp_dirÚzZop_pathZ	loaded_opZop_protoÚindexZ	grad_pathZloaded_gradZ
grad_protor   r   r   r   W   s0    
(&(r   )Zcaffe2.protor   Zcaffe2.pythonr   r   r   r,   r1   r   ÚCr   r   r   r   r   r   r   r   Ú<module>   s   /