a
    ==icR                     @   s  d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	 ej
jZG dd deZG dd de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2Zee e Ze  eej W d   n1 s0    Y  dS )    N)core	workspace)Markdown)	viewitems
viewvaluesc                   @   s   e Zd Zdd Zdd ZdS )DocUploaderc                 C   s   d S N selfr	   r	   m/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/docs/generator.py__init__   s    zDocUploader.__init__c                 C   s   d S r   r	   )r   textr	   r	   r   upload   s    zDocUploader.uploadN)__name__
__module____qualname__r   r   r	   r	   r	   r   r      s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DocGeneratorc                 C   s   || _ || _d| _d S )N )	formatteruploadercontent_body)r   r   r   r	   r	   r   r      s    zDocGenerator.__init__c                 C   s   d S r   r	   r
   r	   r	   r   create_body   s    zDocGenerator.create_bodyc                 C   s   | j | j d S r   )r   r   r   r
   r	   r	   r   update!   s    zDocGenerator.updateN)r   r   r   r   r   r   r	   r	   r	   r   r      s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
OpDocGeneratorc                 C   s   t |||S r   )OperatorDocr   nameschemapriorityr	   r	   r   getOperatorDoc&   s    zOpDocGenerator.getOperatorDocc                 C   s   t |S r   )OperatorEnginer   r   r	   r	   r   getOperatorEngine)   s    z OpDocGenerator.getOperatorEnginec                 C   s   i | _ i | _dd }t D ]}t|}|rZ|tj|j	}| 
|||}|| j |< q|ddkr| |}|j| jv r| j|j | q|g| j|j< qd}| 
|||| j |< qt| jD ]"\}}|| j v r| j | | qtt| j dd dS )	Nc                 S   s4   | dkrdS d|  dv rdS d|  dv r0dS dS )	Nzcaffe2/caffe2/operatorsr   contrib/   Zexperiments      )split)xr	   r	   r   filePriority2   s    z1OpDocGenerator.getOperators.<locals>.filePriority_ENGINE_   c                 S   s   | j | jfS r   )r   r   )opr	   r	   r   <lambda>V       z-OpDocGenerator.getOperators.<locals>.<lambda>)key)	operatorsenginesr   Z_GetRegisteredOperatorsOpSchemagetospathdirnamefiler    findr#   base_op_nameappendr   
addEnginessortedr   )r   r+   r   r   r   operatorenginer4   r	   r	   r   getOperators,   s.    	


zOpDocGenerator.getOperatorsc                 C   s6   |   }|D ]}|| j q|  j| j 7  _d S r   )rB   generateSchemar   r   dump)r   r3   r@   r	   r	   r   
createBodyY   s    zOpDocGenerator.createBodyN)r   r   r   r    r#   rB   rE   r	   r	   r	   r   r   %   s   -r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r!   c                 C   s   || _ |dd\| _| _d S )Nr,   r(   )op_namer)   r<   rA   r"   r	   r	   r   r   c   s    zOperatorEngine.__init__c                 C   sF   g }dt | jfdt | jffD ]\}}|s2q$|||f q$|S )NCPUCUDA)r5   get_cpu_implrF   get_cuda_implr=   )r   ZdeviceImplListdeviceimplr	   r	   r   getDeviceImplg   s    zOperatorEngine.getDeviceImplc                 C   s.   |   D ] \}}|dj| j||d qd S )Nz{engine} on {device}: {impl})rA   rK   rL   )rM   addLineformatrA   )r   r   rK   rL   r	   r	   r   generateDocp   s    zOperatorEngine.generateDocN)r   r   r   r   rM   rP   r	   r	   r	   r   r!   b   s   	r!   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )r   c                 C   s,   || _ || _|| _td| j  g | _d S )NzGathering docs for {}...)r   r   r   printrO   r4   r   r	   r	   r   r   y   s
    zOperatorDoc.__init__c                 C   s
   || _ d S r   )r4   )r   r4   r	   r	   r   r>      s    zOperatorDoc.addEnginesc                 C   s.   | j jr || j j |  n
|d d S )NzNo documentation yet.)r   docZparseAndAddaddLinebreakrN   r   r   r	   r	   r   rP      s    
zOperatorDoc.generateDocc                 C   sV   |rR|r| |d g }|r"|g}|D ]\}}|||p:dg q&|||g k d S )Nr'   r   )	addHeaderr=   ZaddTable)r   r   tuplesZ	title_rowtitletabler   rR   r	   r	   r   generateTable   s    zOperatorDoc.generateTablec                    s    fdd}g }| j jr*||d| j j7 }| j jrD||d| j j7 }| j jr^||d| j j7 }|  |d d td| j d S )Nc                    s      }|| d | dfg}|D ]r}   }t|trd|d }t|dkr^|d pZd}qtd}n|j}|jprd}|j|dd |	| |pdf q&|S )Nr(   r   r   T)inline)
cloneZaddEmphasisrD   
isinstancetuplelenr   descriptionZaddCoder=   )rW   argsfoutargr   r_   r   r	   r   makeDesc   s    

z/OperatorDoc.generateInterface.<locals>.makeDesc	ArgumentsZInputsZOutputsZ	InterfacezGenerated interface for {})r   r`   Z
input_descZoutput_descrY   rQ   rO   r   )r   r   re   rV   r	   rd   r   generateInterface   s    zOperatorDoc.generateInterfacec                 C   s&   | dd |  || jj d S )NZCoder'   )rU   rS   ZaddCodeLinkr   r:   rT   r	   r	   r   generateCodeLink   s    zOperatorDoc.generateCodeLinkc                 C   s   d S r   r	   )r   r   r   rL   r	   r	   r   getInfo   s    zOperatorDoc.getInfoc                 C   sP   | dd | |dt| j| |dt| jg}|dd |D  d S )NZDevicesr'   rG   ZGPUc                 S   s   g | ]}|r|qS r	   r	   ).0ir	   r	   r   
<listcomp>   r1   z/OperatorDoc.generateDevices.<locals>.<listcomp>)rU   ri   r5   rI   r   rJ   ZaddList)r   r   Zdevicesr	   r	   r   generateDevices   s    zOperatorDoc.generateDevicesc                 C   s4   t | jsd S |dd | jD ]}|| q d S )NZEnginesr'   )r^   r4   rU   rP   )r   r   rA   r	   r	   r   generateEngines   s
    

zOperatorDoc.generateEnginesc                 C   sh   | | jd | jrP| | | | | | | | | | |  n|	d | | d S )Nr&   zNo schema documented yet.)
rU   r   r   rP   rg   rh   rm   rn   ZaddBreakrN   rT   r	   r	   r   rC      s    






zOperatorDoc.generateSchemaN)r   r   r   r   r>   rP   rY   rg   rh   ri   rm   rn   rC   r	   r	   r	   r   r   x   s   "
r   __main__zOperators catalog generator.)r_   catalog_pathz&operators-catalogue.md to write out to)typehelpw) argparser7   Zcaffe2.pythonr   r   Zcaffe2.python.docs.formatterr   Zfuture.utilsr   r   Cr5   objectr   r   r   r!   r   r   ArgumentParserparseradd_argumentstr
parse_argsr`   openrp   fpopsrE   writer   r	   r	   r	   r   <module>   s(   =f
