U
    ‰dá  ã                   @   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ƒ@}	|	 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 5 Q R X 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   úJ/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/serialized_test/coverage.pyÚgen_serialized_test_coverage   s^    


 þÿ

ÿÿ


ÿÿ



ÿÿr   c                 C   st   t | ƒ}tƒ }g }t ¡ D ]N}t |¡}|d k	r8|jr8q|rP||k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   s  dd„ }t ƒ }t | ¡D ]ú}tj | |¡}tj |¡s8qt ¡ }t|ƒ}| 	|¡ W 5 Q R X tj |d¡}t
|dƒ}| ¡ }W 5 Q R X ||ƒ}	| |	j¡ d}
tj |d |
¡¡}tj |¡rt
|dƒ}| ¡ }W 5 Q R X ||ƒ}| |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   /