U
    §Ê¹jç'  ã                   @   s¨   d dl Z d dlZd dlZd dlmZ dd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zd"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eƒ ZdS )#é    N)Ú_find_builtinc                 C   s   |   d¡o|   d¡ S )NÚ_Ú__)Ú
startswith)Úname© r   úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/jit/supported_ops.pyÚ_hidden   s    r	   c                 C   s   t | ƒS ©N)Ústr)Útyper   r   r   Ú
_emit_type   s    r   c                 C   sT   |j › dt|jƒ› �}|j}|d k	r6|› dt|ƒ› �}|dkrPdd|  › |› �}|S )Nz : ú=r   Ú
ú )r   r   r   Údefault_valuer   )ÚindentÚiÚargÚvÚdefaultr   r   r   Ú	_emit_arg   s    r   c                    s   d  ‡ fdd„t|ƒD ƒ¡S )Nú,c                 3   s   | ]\}}t ˆ ||ƒV  qd S r
   )r   )Ú.0r   r   ©r   r   r   Ú	<genexpr>   s     z_emit_args.<locals>.<genexpr>)ÚjoinÚ	enumerate)r   Ú	argumentsr   r   r   Ú
_emit_args   s    r   c                 C   s
   t | jƒS r
   )r   r   )Úretr   r   r   Ú	_emit_ret"   s    r!   c                 C   s4   t | ƒdkrt| d ƒS dd dd„ | D ƒ¡› d�S )Né   r   zTuple[z, c                 s   s   | ]}t |ƒV  qd S r
   )r!   )r   Úrr   r   r   r   )   s     z_emit_rets.<locals>.<genexpr>ú])Úlenr!   r   )Úreturnsr   r   r   Ú
_emit_rets&   s    r'   é   c                 C   sP   | d kr|}n| › d|› �}d  |tt|ƒd | |j|d … ƒt|jƒ¡}|S )NÚ.z{}({}) -> {}r"   )Úformatr   r%   r   r'   r&   )Úmodr   ÚschemaÚ	arg_startÚpaddingZqualified_nameÚ
schema_strr   r   r   Ú_emit_schema,   s    ýr0   c               
   C   sd   dd„ } g }t tjƒD ]D}t|ƒstj d| ¡}|D ]"}| |ƒr6| td||dd�¡ q6qd|fS )Nc                 S   sF   t | jƒdkrdS | jd }|jdkr*dS |j tjj ¡ ¡sBdS dS )Nr   FÚselfT)	r%   r   r   r   ZisSubtypeOfÚtorchÚ_CZ
TensorTypeÚget)r,   r1   r   r   r   Úis_tensor_method:   s    

z)_get_tensor_ops.<locals>.is_tensor_methodúaten::ÚTensorr"   )r-   zSupported Tensor Methods)Údirr2   r7   r	   r3   Ú_jit_get_schemas_for_operatorÚappendr0   )r5   ÚmethodsÚelemÚschemasr,   r   r   r   Ú_get_tensor_ops9   s    
r>   c            
   	   C   s  g } t jj}|j}tt jjƒD ]†}t||ƒ}t |¡rt|d ƒrDqt 	|¡}|sbt
d|› d�ƒ‚d|jkrnqz(t j |¡}|j}|  t|||ƒ¡ W q   Y qX qt jjjD ]^}|j}t|ƒD ]J}tt||ƒƒ}|d k	rÂt j |¡}	|	D ]}t|ƒsì|  t|||ƒ¡ qìqÂq°d| fS )Nr   úModule for ú
 not foundztorch.nn.functionalzSupported PyTorch Functions)r2   ÚnnZ
functionalÚ__name__r8   ÚgetattrÚinspectÚ
isfunctionr	   Ú	getmoduleÚRuntimeErrorÚjitÚscriptr,   r:   r0   Ú	_builtinsZ_modules_containing_builtinsr   r3   r9   )
Ú	functionsr+   r   r<   ÚattrZattr_moduleZscriptedr,   Úbuiltinr=   r   r   r   Ú_get_nn_functional_opsP   s8    


rN   c                  C   sr   g } t jjjD ]^\}}t |¡}t|dƒs,q|s2qt|jƒst|j	ƒst|jƒrRqd|jkr^q|  
||f¡ q| S )NrB   ztorch._C)r2   rH   rJ   Z_builtin_opsrD   rF   Úhasattrr	   rB   Ú__qualname__r:   )ÚbuiltinsÚfnÚ_builtin_namer+   r   r   r   Ú_get_builtins_helper{   s    


rT   c                 C   s(   t  | ¡}|std| › d�ƒ‚|jdkS )Nr?   r@   Úmath)rD   rF   rG   rB   )rR   r+   r   r   r   Ú_is_math_fn‘   s    
rV   c            	      C   sŒ   g } t dd„ tƒ ƒ}t|ƒ}|D ]b\}}t |¡}|sFtd|› d�ƒ‚t|ƒ}|d k	r tj 	|¡}|D ]}|  
t|j|j|ƒ¡ qfq d| fS )Nc                 S   s   t | d ƒ S ©Nr   ©rV   ©rR   r   r   r   Ú<lambda>›   ó    z+_get_torchscript_builtins.<locals>.<lambda>r?   r@   zTorchScript Builtin Functions)ÚfilterrT   ÚlistrD   rF   rG   r   r2   r3   r9   r:   r0   rB   )	rK   rQ   Úbuiltins_listrR   rS   r+   rM   r=   r,   r   r   r   Ú_get_torchscript_builtins™   s    
r_   c            
      C   sš   g } t dd„ tƒ ƒ}t|ƒ}|D ]p\}}t |¡}|sFtd|› d�ƒ‚t|ƒ}|d k	r tj 	|¡}|D ](}t
|j|j|ƒ}	d|	kr„qf|  |¡ qfq d| fS )Nc                 S   s   t | d ƒS rW   rX   rY   r   r   r   rZ   ®   r[   z$_get_math_builtins.<locals>.<lambda>r?   r@   r7   z``math`` Module)r\   rT   r]   rD   rF   rG   r   r2   r3   r9   r0   rB   r:   )
rK   rQ   r^   rR   rS   r+   rM   r=   r,   r/   r   r   r   Ú_get_math_builtins¬   s"    

r`   c                  C   sš  ddddddddd	d
ddddddddddddddddddg} dddd d!d"d#d$d%œ}d&d'd(d(d)d*d*d+d,œ}d-d.d/d0d1d2d3d4g}g }|D ] \}}|  d5|› d6|› d7�¡ q„g }g }| D ]„}d8|› �}	||krÐ|| }	tj |	¡}
|
D ]}|  td ||d9d:�¡ qàt|
ƒd9k�r|  d;¡ q²d<|› d=|| › d5�}|  |¡ q²d> |¡}d> |¡}d> |¡}t |d?¡}t |d?¡}t |d?¡}d@|› dA|› dB|› dC�}dD|fS )ENÚprintÚtupleÚfloatÚcomplexÚintÚboolr   rC   rO   Ú
isinstancer%   ÚhexÚoctÚroundÚhashÚminÚmaxÚabsÚallÚdivmodr]   ÚordÚchrÚbinÚrangeÚzipr   Úsortedz
aten::Boolz	aten::Intzaten::Floatzaten::Complexz	prim::absz	prim::maxz	prim::minzfake::does_not_exist)rf   re   rc   rd   rn   rm   rl   rt   zPrint any valuez]Lists cannot be converted to tuples with this method since their size is not statically knownz'Attribute name must be a literal stringzResult is staticzMArguments must be iterable. See :ref:`Iterables <jit_iterables>` for details.z-Can only be used as an iterator in a for loop)ra   rb   rC   rO   rg   ru   r   rt   )rd   Ú__complex__)rc   Ú	__float__)re   Ú__int__)rf   Ú__bool__)r   Ú__str__)r%   Ú__len__)rh   Z__hex__)ri   Z__oct__ú"z", "``z``"r6   r   )r.   Ú z":any:`z`", "r   ú	z…
The functions in the following table are supported but do not have a static schema

.. csv-table::
    :header: "Function", "Note"

z™

The following functions will use the corresponding magic method on :any:`TorchScript classes`

.. csv-table::
    :header: "Function", "Magic Method"

zX

These built-in functions use the schema

.. rst-class:: codeblock-height-limiter

::

z
    zPython Built-in Functions)	r:   r2   r3   r9   r0   r%   r   Útextwrapr   )Zsupported_builtinsZ
op_renamesZschemaless_op_explanationsZmagic_methodsZmagic_methods_rowsrR   Zmagic_methodZschematized_opsZschemaless_opsZop_namer=   ÚsZ	table_rowZschematized_ops_strZschemaless_ops_strZmagic_methods_rows_strÚsectionr   r   r   Ú_get_global_builtinsÄ   s¬    ä øøø



úóërƒ   c                  C   s¸   dd„ } d}t ttttf}|D ]”}|ƒ \}}| dd¡ dd¡ ¡  dd¡}t|tƒrv|› ddt	|ƒ › d|› d�}n |› ddt	|ƒ › d| |ƒ› �}d	|› d
�d | }||7 }q|S )Nc                 S   s   d  d dd„ | D ƒ¡¡S )Nz1
.. rst-class:: codeblock-height-limiter

::

{}
r~   c                 s   s   | ]}d |› d�V  qdS )z    ú

Nr   )r   Údr   r   r   r   >  s     z:_list_supported_ops.<locals>.emit_block.<locals>.<genexpr>)r*   r   )Zdeclsr   r   r   Ú
emit_block<  s    ÿz'_list_supported_ops.<locals>.emit_blockr~   ú`ú-r   r   ú~z.. _ú:r„   )
r>   rN   r_   rƒ   r`   ÚreplaceÚlowerrg   r   r%   )r†   ÚbodyZop_gathering_fnsrR   ÚheaderÚitemsZlink_targetr‚   r   r   r   Ú_list_supported_ops;  s"    û
 
  
r�   )r   r(   )rD   r€   Z	torch.jitr2   Ztorch.jit._builtinsr   r	   r   r   r   r!   r'   r0   r>   rN   rT   rV   r_   r`   rƒ   r�   Ú__doc__r   r   r   r   Ú<module>   s&   

+w