o
    Φi                  	   @  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   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view	view_copyfuncr   unambiguous_name)r   r   r   r   api_name r(   @/home/app/PyTorch/test/pytorch/torchgen/api/functionalization.pyr   [   s   r   fr   c                 C  s&   | j j }|rd| dS | dS )Nz+at::functionalization::FunctionalInverses::_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)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   

r<   r	   c                 C  s4   t | jdks	J | jD ]	}|j sJ qttS )Nr-   )lenreturnsr   is_tensor_liker   r   )r%   retr(   r(   r)   returns_type   s   
rA   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   
rE   Binding | Nonec                 C  s4   t | jdkst | jdkr| jd j rtS d S )Nr-   r   )r=   r>   r   is_list_likerD   )r%   r(   r(   r)   inner_call_index   s   rH   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/   r0   r(   r(   r)   r3      s    z#inner_arguments.<locals>.<listcomp>)
r4   r5   r   r   r   r6   rB   rH   rC   r7   )r%   r   r:   r;   Znon_self_bindingsZindex_bindingr(   r(   r)   inner_arguments   s*   
rI   )
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    rF   )$
__future__r   torchgen.apir   torchgen.api.typesr   r   r   r   r   r	   r
   r   r   torchgen.modelr   r   r   r   r   r   r6   rB   rC   rD   r   r8   ZInverseReturnModeTr7   r   r"   r<   rA   rE   rH   rI   r(   r(   r(   r)   <module>   sp    , 
	






