a
    h                  	   @  s  d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZmZmZmZmZmZ edede	eededeejddddd	Zed
ed
e	eededeejddddd	Zededeededeejddddd	Zededeededeejddddd	ZeddZededeededeejddddd	Zddddd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'Z!dd(d"d)d*Z"ddddd+d,Z#dS )-    )annotations)
dispatcher)	BaseCppType	BaseCTypeBindingboolTConstRefCTypeCTypelongT
NamedCTypetensorT)ArgumentBaseTyBaseTypeFunctionSchemaNativeFunctionNativeFunctionsViewGroupbase)nametypeN)r   r   default
annotation)r   Znctypeargumentr   Zmutated_viewZmutated_view_idxreapply_viewszat::functionalizationZInverseReturnModeZinverse_return_mode)r   r   boolzbool | Nonestr)g
is_reverseinclude_namespacer   returnc                C  sb   |d u r|sJ |r t | j|S |s(J | jd us6J |rH| jjj n| jjj }d| dS )Nz
at::_ops::z::call)reverse_nameviewZ	view_copyfuncr   unambiguous_name)r   r   r   r   api_name r%   L/var/www/auris/lib/python3.9/site-packages/torchgen/api/functionalization.pyr   [   s    r   r   )fr   r   c                 C  s*   | j j }|rd| dS | dS d S )Nz+at::functionalization::FunctionalInverses::Z_inverse)r"   r   r#   )r'   r   r$   r%   r%   r&   r    s   s    r    r   zlist[Binding])r"   r   r   c                C  sV   | j j}|d jttjks J |dd  }dd |D }|rBtntg}|| |S )Nr      c                 S  s   g | ]}t j|d dqS )T)Zremove_non_owning_ref_typesr   r   .0ar%   r%   r&   
<listcomp>   s   z%capture_arguments.<locals>.<listcomp>)		argumentsflat_allr   r   r   Tensorinverse_return_mode_bindingreapply_views_bindingextend)r"   r   argsnon_self_argsZnon_self_value_bindingsZall_bindingsr%   r%   r&   capture_arguments   s    

r6   r	   )r"   r   c                 C  s4   t | jdksJ | jD ]}|j sJ qttS )Nr(   )lenreturnsr   Zis_tensor_liker   r   )r"   retr%   r%   r&   returns_type   s    
r:   )r   r   c                 C  s   | rt ttgS t tgS d S )N)base_bindingmutated_view_bindingmutated_view_idx_binding)r   r%   r%   r&   outer_arguments   s    
r>   zBinding | Nonec                 C  s4   t | jdks,t | jdkr0| jd j r0tS d S )Nr(   r   )r7   r8   r   Zis_list_liker=   )r"   r%   r%   r&   inner_call_index   s    r?   c                 C  sz   | j j}|d jttjks J |dd  }dd |D }|sHtg| S t| }|d urhttt	|g| S ttt	g| S d S )Nr   r(   c                 S  s   g | ]}t |qS r%   r)   r*   r%   r%   r&   r-          z#inner_arguments.<locals>.<listcomp>)
r.   r/   r   r   r   r0   r;   r?   r<   r1   )r"   r   r4   r5   Znon_self_bindingsZindex_bindingr%   r%   r&   inner_arguments   s*    
rA   )$
__future__r   Ztorchgen.apir   Ztorchgen.api.typesr   r   r   r   r   r	   r
   r   r   Ztorchgen.modelr   r   r   r   r   r   r0   r;   r<   r=   r   r2   ZInverseReturnModeTr1   r   r    r6   r:   r>   r?   rA   r%   r%   r%   r&   <module>   sn   , 	


