o
    vZh                  	   @  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Zd/ddZd0d"d#Zd1d%d&Z d2d'd(Z!d3d*d+Z"d0d,d-Z#dS )4    )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   gr   
is_reverseboolinclude_namespacebool | Nonereturnstrc                C  sb   |d u r|sJ |rt | j|S |sJ | jd usJ |r$| 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&   M/var/www/auris/lib/python3.10/site-packages/torchgen/api/functionalization.pyr   [   s   r   fr   c                 C  s&   | j j }|rd| dS | dS )Nz+at::functionalization::FunctionalInverses::Z_inverse)r#   r   r$   )r(   r   r%   r&   r&   r'   r!   s   s   
r!   r#   r   list[Binding]c                C  sV   | j j}|d jttjksJ |dd  }dd |D }|r!t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   

r8   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<   c                 C  s   | rt ttgS t tgS )N)base_bindingmutated_view_bindingmutated_view_idx_binding)r   r&   r&   r'   outer_arguments   s   
r@   Binding | Nonec                 C  s4   t | jdkst | jdkr| jd j rtS d S )Nr*   r   )r9   r:   r   Zis_list_liker?   )r#   r&   r&   r'   inner_call_index   s   rB   c                 C  sv   | j j}|d jttjksJ |dd  }dd |D }|s$tg| S t| }|d ur4ttt	|g| S ttt	g| S )Nr   r*   c                 S  s   g | ]}t |qS r&   r+   r,   r&   r&   r'   r/      s    z#inner_arguments.<locals>.<listcomp>)
r0   r1   r   r   r   r2   r=   rB   r>   r3   )r#   r   r6   r7   Znon_self_bindingsZindex_bindingr&   r&   r'   inner_arguments   s*   
rC   )
r   r   r   r   r   r   r   r   r   r    )r(   r   r   r   r   r    )r#   r   r   r   r   r)   )r#   r   r   r	   )r   r   r   r)   )r#   r   r   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   r2   r=   r>   r?   r   r4   ZInverseReturnModeTr3   r   r!   r8   r<   r@   rB   rC   r&   r&   r&   r'   <module>   sp    , 
	






