U
    d                  	   @   s  d dl 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mZmZ d dlmZ d dl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ddeeeee edddZeeee dddZeedddZeee dddZeee dddZeeee dddZ dS )    )FunctionSchemaBaseTyBaseTypeNativeFunctionsViewGroupArgument)Binding
NamedCTypeConstRefCType	BaseCTypeCTypetensorTlongTboolT)
dispatcher)ListOptionalbase)nametypeN)r   r   default
annotation)r   Znctypeargumentr   Zmutated_viewZmutated_view_idxreapply_views)r   )g
is_reverseinclude_namespacer   returnc                C   s   |d kr|st |rJ| jd k	s"t | jjj }|r@d| dS | dS |sRt | jd k	s`t |rr| jjj n| jjj }d| dS )Nz+at::functionalization::FunctionalInverses::Z_inversez
at::_ops::z::call)AssertionErrorZ	view_copyfuncr   Zunambiguous_nameview)r   r   r   r   Zapi_name r    B/tmp/pip-unpacked-wheel-ua33x9lu/torchgen/api/functionalization.pyr   I   s    
r   )r   r   r   c                C   sH   | j j}|d jttjks t|dd  }dd |D }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>q   s    z%capture_arguments.<locals>.<listcomp>)	argumentsflat_allr   r   r   Tensorr   reapply_views_binding)r   r   argsnon_self_argsZnon_self_value_bindingsZall_bindingsr    r    r!   capture_argumentsj   s    
r.   )r   r   c                 C   s4   t | jdkst| jD ]}|j stqttS )Nr"   )lenreturnsr   r   Zis_tensor_liker
   r   )r   retr    r    r!   returns_typex   s    
r2   )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    
r6   c                 C   s4   t | jdks,t | jdkr0| jd j r0tS d S )Nr"   r   )r/   r0   r   Zis_list_liker5   )r   r    r    r!   inner_call_index   s    r7   c                 C   sz   | j j}|d jttjks t|dd  }dd |D }|sHtg| S t| }|d k	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'      s     z#inner_arguments.<locals>.<listcomp>)r(   r)   r   r   r   r*   r   r3   r7   r4   r+   )r   r   r,   r-   Znon_self_bindingsZindex_bindingr    r    r!   inner_arguments   s*    
r8   )!Ztorchgen.modelr   r   r   r   r   Ztorchgen.api.typesr   r   r	   r
   r   r   r   r   Ztorchgen.apir   typingr   r   r*   r3   r4   r5   boolr+   strr   r.   r2   r6   r7   r8   r    r    r    r!   <module>   sx   (
            !

