U
    ‰dÖ  ã                	   @   s  d dl Z d dlZd dlmZ d dlmZmZ d dlmZmZ G dd„ deƒZ	G dd„ deƒZ
d	d
„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZedkr
e jddZejdedd e ¡ Zeejdƒ6Zee
ƒ e	ƒZe ¡  e ej¡ ed ej¡ƒ W 5 Q R X dS )é    N)ÚMarkdown)ÚOpDocGeneratorÚDocUploader)ÚOperatorDocÚOperatorEnginec                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚGHOpDocUploaderc                 C   s   d S ©N© ©Úselfr	   r	   ú=/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/docs/github.pyÚ__init__   s    zGHOpDocUploader.__init__c                 C   s   t |ƒ d S r   )Úprint)r   Úcontent_bodyr	   r	   r   Úupload   s    zGHOpDocUploader.uploadN)Ú__name__Ú
__module__Ú__qualname__r   r   r	   r	   r	   r   r      s   r   c                   @   s2   e Zd Zddd„Zdd„ Zddd„Zdd	d
„ZdS )Ú
GHMarkdowné   c                 C   s   |   dj|d |dd¡ d S )Nz
{header} {text}
ú#)ÚheaderÚtextT)ÚaddLineÚformat)r   r   Úhr	   r	   r   Ú	addHeader   s    zGHMarkdown.addHeaderc                 C   sT   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nz---zdocid: operators-catalogztitle: Operators Catalogzlayout: operatorsz)permalink: /docs/operators-catalogue.htmlz* TOCz{:toc})r   r
   r	   r	   r   ÚaddDocHeader   s    






zGHMarkdown.addDocHeaderFc              	   C   sx   |   ¡  t|ƒdkst‚|  d dd„ tt|d ƒƒD ƒ¡¡ |  d |d ¡¡ |dd … D ]}|  d |¡¡ q^d S )Nr   z | c                 S   s   g | ]}d ‘qS )z
----------r	   )Ú.0Úir	   r	   r   Ú
<listcomp>'   s     z'GHMarkdown.addTable.<locals>.<listcomp>r   )ÚaddLinebreakÚlenÚAssertionErrorr   ÚjoinÚrange)r   ÚtableÚnoTitleÚrowr	   r	   r   ÚaddTable$   s    &zGHMarkdown.addTablec                 C   sf   |   d¡ |D ]H}|   d¡ |D ]*}|   d¡ |  dj|d¡ |   d¡ q |   d¡ q|   d¡ d S )	Nz<table>z<tr>z<td>z{cell})Úcellz</td>z</tr>z</table>)ÚaddRawr   r   )r   r&   r'   r(   r*   r	   r	   r   ÚaddTableHTML,   s    


zGHMarkdown.addTableHTMLN)r   )F)F)r   r   r   r   r   r)   r,   r	   r	   r	   r   r      s   


r   c                 C   s@   |   ¡ } tj |jd¡}dj|d}|  dj|d|¡ |  ¡ S )NZcaffe2z5https://github.com/pytorch/pytorch/blob/master/{path})Úpathz{path})ÚcloneÚosr-   ÚrelpathÚfiler   ZaddLinkÚdump)Ú	formatterÚschemar-   Z
schemaLinkr	   r	   r   ÚgetCodeLink7   s    ÿr5   c                   @   s   e Zd Zdd„ ZdS )ÚGHOperatorEnginec                 C   sN   |   ¡ D ]@\}}| dj| jdd¡ |r| d¡ | dj|dd¡ qd S )Nz{engine})ÚengineTz on z{device})Údevicer   )ZgetDeviceImplÚaddCoder   r7   r+   ÚaddEmphasis)r   r3   r8   Ú_r	   r	   r   ÚgenerateDocA   s
    
zGHOperatorEngine.generateDocN)r   r   r   r<   r	   r	   r	   r   r6   @   s   r6   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚGHOperatorDocc                 C   s*   |  dd¡ | ¡  | t|| jƒ¡ d S )NZCodeé   )r   r!   r+   r5   r4   ©r   r3   r	   r	   r   ÚgenerateCodeLinkJ   s    zGHOperatorDoc.generateCodeLinkc                 C   sF   |  ¡ }|r>| dj|dd¡ | d¡ | dj|dd¡ | ¡ S )Nz{name})Únamer   ú z{impl})ÚimplT)r.   r:   r   r+   r9   r2   )r   r3   rA   rC   r	   r	   r   ÚgetInfoO   s    
zGHOperatorDoc.getInfoc                 C   sJ   |  | jd¡ | jr<|  |¡ |  |¡ |  |¡ | ¡  n
| d¡ d S )Né   zNo schema documented yet.)r   rA   r4   r<   ZgenerateInterfacer@   ZaddBreakr   r?   r	   r	   r   ÚgenerateSchemaW   s    



zGHOperatorDoc.generateSchemaN)r   r   r   r@   rD   rF   r	   r	   r	   r   r=   I   s   r=   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚGHOpDocGeneratorc                 C   s   t |||ƒS r   )r=   )r   rA   r4   Úpriorityr	   r	   r   ÚgetOperatorDocc   s    zGHOpDocGenerator.getOperatorDocc                 C   s   t |ƒS r   )r6   )r   rA   r	   r	   r   ÚgetOperatorEnginef   s    z"GHOpDocGenerator.getOperatorEnginec                 C   s@   | j  ¡  |  ¡ }|D ]}| | j ¡ q|  j| j  ¡ 7  _d S r   )r3   r   ZgetOperatorsrF   r   r2   )r   Ú	operatorsÚoperatorr	   r	   r   Ú
createBodyi   s
    
zGHOpDocGenerator.createBodyN)r   r   r   rI   rJ   rM   r	   r	   r	   r   rG   b   s   rG   Ú__main__zOperators catalog generator.)ÚdescriptionÚcatalog_pathz&operators-catalogue.md to write out to)ÚtypeÚhelpÚwzUpdated {}!)Úargparser/   Zcaffe2.python.docs.formatterr   Zcaffe2.python.docs.generatorr   r   r   r   r   r   r5   r6   r=   rG   r   ÚArgumentParserÚparserÚadd_argumentÚstrÚ
parse_argsÚargsÚopenrP   ÚfpÚopsrM   Úwriter   r   r   r	   r	   r	   r   Ú<module>   s*   !		
ÿ