U
    qh'@                     @  s  d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	Z
d dlmZmZ d dlmZ d dlmZ d dlmZmZ e Ze Zeed	d
k ZdddddZddddddZddddddZdddddZddddddZdddd d!Zddd"d#d$Z ddd"d%d&Z!ddddd'd(d)Z"d*dd+d,d-Z#d.dddd/d0d1Z$d2dd3d4d5Z%G d6d7 d7eZ&d7d8d9d:d;Z'e(d<krere'e&d=d> e'e&d?d@ dS )A    )annotationsNdefaultdict)Any
NamedTupleSequence)defshelper)collect_sample_implementations)collect_snippets)ONNX_ML_DOMAINOpSchemaONNX_ML0intstr)vreturnc                 C  s   t j| rdS t| S )Nz&#8734;)r   r   is_infiniter   )r    r   5/tmp/pip-unpacked-wheel-xnis5xre/onnx/defs/gen_doc.pydisplay_number   s    r   bool)domainoutputr   c                 C  s   d|k}| t kr|S | S d S )Nz-ml)r   )r   r   Zis_mlr   r   r   should_render_domain   s    r   )r   schema_namer   c                 C  s   | r|  d| S |S )N.r   )r   r   r   r   r   format_name_with_domain&   s    r   zSequence[int])function_versionsr   c                 C  s   d dd | D  S )N, c                 S  s   g | ]}t |qS r   )r   .0r   r   r   r   
<listcomp>-   s     z,format_function_versions.<locals>.<listcomp>join)r   r   r   r   format_function_versions,   s    r&   zSequence[OpSchema])versions	changelogr   c                   s$   d  fdd| d d d D  S )Nr    c                 3  s&   | ]}t t|j|j|j V  qd S Ndisplay_version_linkr   r   namesince_versionr!   r(   r   r   	<genexpr>1   s     z"format_versions.<locals>.<genexpr>r$   )r'   r(   r   r.   r   format_versions0   s    r1   zOpSchema.AttrTypec                 C  sJ   t | tjstt| }||dd d   }|d dkrFd| }|S )Nr      r0   szlist of )
isinstancer   ZAttrTypeAssertionErrorr   rfindlower)r   r3   r   r   r   display_attr_type4   s    r8   )r   r   c                 C  s   | rd|  dS dS )Nzthe 'z' operator setzthe default ONNX operator setr   r   r   r   r   display_domain=   s    r:   c                 C  s   | r| S dS )Nzai.onnx (default)r   r9   r   r   r   display_domain_shortC   s    r;   )r,   versionr(   r   c                 C  s&   |  d| }d| d| d| dS )N-z	<a href="#z">z</a>r   )r,   r<   r(   name_with_verr   r   r   r+   I   s    r+   zOpSchema.FormalParameter)formal_parameterr   c                 C  s   g }t jj| jkrdg}n$t jj| jkr>| jr6dg}nddg}t jj}t jj}|| j	krd|
d n|| j	krx|
d t|dkrdS dd	| d
 S )NoptionalZvariadicZheterogeneousdifferentiableznon-differentiabler     (r    ))r   ZFormalParameterOptionOptionaloptionZVariadicZis_homogeneousZDifferentiationCategoryZDifferentiableZNonDifferentiableZdifferentiation_categoryappendlenr%   )r@   tagsrB   Znon_differentiabler   r   r   generate_formal_parameter_tagsN   s     


rK   r   )schemar'   r(   r   c              	     s  d}| j r<|d7 }|ddd | j   D 7 }|d7 }|d7 }| jtjjkr\|d7 }nn|d| jrjdnd	 d
| j	  7 }|dt
| j d7 }t|dkr|dd fdd|d d D 7 }| jr|S | jr|d7 }|d7 }t| j D ]\}}d}|jrd}nd|jjrxt|j}|jj}dddddt|trbfdd|D }n|}d| | }|d|j dt|j |rd| d nd d!7 }|d"|j d#7 }q|d$7 }|d%7 }| j| jkr |dt| j d&t| j d 7 }|d'7 }| jrh|d7 }| jD ]@}	t |	}
|d|	j d(|
 d)|	j! d!7 }|d"|	j d#7 }q|d$7 }|d*7 }| j"| j#kr|dt| j" d&t| j# d 7 }|d'7 }| j$r|d7 }| j$D ]@}t |}
|d|j d(|
 d)|j! d!7 }|d"|j d#7 }q|d$7 }|d+7 }|d'7 }| j%r|d7 }| j%D ]l}|j&}t|d,krN|d, }|dd  D ]}|d| 7 }qZ|d|j' d| d!7 }|d"|j d#7 }q.|d$7 }|S )-NrC   
c                 s  s   | ]}d |   V  qdS )z  N)rstrip)r"   liner   r   r   r/   m   s    z!display_schema.<locals>.<genexpr>z
#### Version
z/
No versioning maintained for experimental ops.z'
This version of the operator has been 
deprecated	availablez since version  of z.
r2   z%
Other versions of this operator: {}
r    c                 3  s&   | ]}t t|j|j|j V  qd S r)   r*   r!   r.   r   r   r/      s   r0   z
#### Attributes

z<dl>
requiredr   r   )valuer   c                 S  s`   t | tr<tt| d}t|dkr8td| dd}|S t | ttfrXt| dS t| S )N   
   (erE   utf-8)	r4   floatr   nproundrI   bytes	bytearraydecode)rT   	formattedr   r   r   format_value   s    
z$display_schema.<locals>.format_valuec                   s   g | ]} |qS r   r   )r"   val)ra   r   r   r#      s     z"display_schema.<locals>.<listcomp>zdefault is z<dt><tt>z</tt> : rD   rE   z</dt>
z<dd>z</dd>
z</dl>
z
#### Inputsz - 

z</tt>z : z
#### Outputsz
#### Type Constraintsr   )(docr%   lstrip
splitlinessupport_levelr   SupportTypeEXPERIMENTALrP   r-   r:   r   rI   format
attributessorteditemsrS   default_valuer,   r	   Zget_attribute_value
doc_stringr4   listr8   typedescriptionZ	min_inputZ	max_inputr   inputsrK   Ztype_strZ
min_outputZ
max_outputoutputsZtype_constraintsZallowed_type_strsZtype_param_str)rL   r'   r(   r3   _attroptrn   ro   Zinput_Z
option_strr   Ztype_constraintZallowedTypesZallowedTypeStrZallowedTyper   )r(   ra   r   display_schemae   s    




4"
 "
 
rx   zOpSchema.SupportType)levelr   c                 C  s   | t jjkrdS dS )Nz<sub>experimental</sub> rC   )r   rh   ri   )ry   r   r   r   support_level_str   s    rz   c                   @  s   e Zd ZU ded< ded< dS )Argsr   r   r(   N)__name__
__module____qualname____annotations__r   r   r   r   r{      s   
r{   None)argsr   c                 C  s  t jt jt jt jt}t j|d}tt j|| jdddd<}|d |d |d t	d	d
 }t
 D ]}||j |j | q|d t| D ]\}}t|| jsqdt| d}t| D ]\}	}
|d|	 dt| d7 }t|
dd
 dD ]^}t||j d|j }|d|jrFdnd d ||7 }|t||g| j7 }|d7 }qq|| qW 5 Q R X tt j|| jdddd}|d |d |d t	dd
 }t
 D ]&}||j t|j |j | q|d g }t }t| D ]\}}t|| jsFq,g }t| D ]x\}}g }t| D ]N\}}t|dd
 d}|d }|j|krqn||j ||||f qn|||f qV|||f q,|D ]4\}}dt| d}|| |d |d g }|D ]\}}|D ]z\}}}|jsL|jrh|j }|||||f q2dt!|jt||t|||jrdndt"|| j}|| q2q&|r|d |D ]H\}}}}dt!|jt||t||t"|| jt#|}|| q|d q|d |D ]f\}}dt| d}|| |D ]:\}}|D ](\}}}d |jr|dnd d t!|jt||t||$ t||}|t||| j7 }|d!7 }|t%kr*|d"7 }tt%| D ]B\}}|d#7 }|d$| d%7 }|d&| d'7 }|d(7 }|d!7 }q|$ t&kr|d)7 }|d#7 }|d$| d%7 }|d&t&|$   d'7 }|d(7 }|d!7 }|| qbqTq,W 5 Q R X d S )*NZdocswrC   rY   )newlineencodingz.<!--- SPDX-License-Identifier: Apache-2.0 -->
z## Operator Changelog
a  *This file is automatically generated from the
            [def files](/onnx/defs) via [this script](/onnx/defs/gen_doc.py).
            Do not modify directly and instead edit operator definitions.*

For an operator input/output's differentiability, it can be differentiable,
            non-differentiable, or undefined. If a variable's differentiability
            is not specified, that variable has undefined differentiability.
c                   S  s   t tS r)   r   rp   r   r   r   r   <lambda>      zmain.<locals>.<lambda>rM   z# z## Version rR   c                 S  s   | j S r)   )r,   r3   r   r   r   r     r   )keyr=   z### <a name="{}"></a>**{}**z (deprecated)z</a>
z## Operator Schemas
c                   S  s   t dd S )Nc                   S  s   t tS r)   r   r   r   r   r   r   1  r   z(main.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r   1  r   c                 S  s   | j S r)   )r-   r   r   r   r   r   F  r   r0   z### z"|**Operator**|**Since version**||
z|-|-|-|
z|{}<a href="#{}">{}</a>{}|{}|
z6|**Function**|**Since version**|**Function version**|
z|{}<a href="#{}">{}</a>|{}|{}|
z## z*### {}<a name="{}"></a><a name="{}">**{}**rc   z#### Examples

z
<details>
z	<summary>z</summary>

z
```python
z
```

z</details>
z#### Sample Implementation

)'ospathdirnamerealpath__file__r%   openr(   writer   r   Zget_all_schemas_with_historyr   r-   rH   rl   rm   r   r   r;   r:   r   r,   rP   rj   rx   r   rg   setaddZhas_functionZhas_context_dependent_functionZall_function_opset_versionsrz   r1   r&   r7   SNIPPETSSAMPLE_IMPLEMENTATIONS)r   base_dirZdocs_dirZfoutZdv_indexrL   r   Z
versionmapr3   r<   Zunsorted_schemasr?   indexZoperator_schemasZexisting_opsZ_supportmapZprocessed_supportmapZ_supportZ_namemapZprocessed_namemapnZunsorted_versionsr'   Z
supportmapZfunction_opsru   Znamemapr   Zop_typesummarycoder   r   r   main   s$      


    

$









r   __main__zOperators-ml.mdzChangelog-ml.mdzOperators.mdzChangelog.md))
__future__r   r   collectionsr   typingr   r   r   Znumpyr[   Zonnxr   r	   Zonnx.backend.sample.opsr
   Zonnx.backend.test.caser   Z	onnx.defsr   r   r   r   r   getenvr   r   r   r   r&   r1   r8   r:   r;   r+   rK   rx   rz   r{   r   r|   r   r   r   r   <module>   sP   	~ 2
