o
    ki                   	   @  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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d6d7ddZddd8d d!Z d9d$d%Z!d:d'd(Z"d;d)d*Z#d<d,d-Z$d<d.d/Z%d=d>d2d3Z&d?d4d5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   nctypeargumentr   has_symbolic_inputsmutated_view	out_indexreapply_viewszat::functionalizationInverseReturnModeinverse_return_modeFfuncr   with_namespaceboolreturnstrc                 C  s    |rdnd}| | j   dS )Nzat::functionalization:: 	_ViewMeta)r   unambiguous_name)r    r!   	namespace r)   h/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torchgen/api/functionalization.py	classname_   s   r+   )r   gr   
is_reverseinclude_namespacebool | Nonec                C  sn   |d u r
|s
t d|rt| j|S |st d| jd u r!t d|r*| jjj n| jjj }d| dS )Nz*reapply_views can only be None for reversez*include_namespace must be True for forwardz&view_copy must be non-None for forwardz
at::_ops::z::call)AssertionErrorreverse_nameview	view_copyr    r   r'   )r,   r-   r.   r   api_namer)   r)   r*   r   e   s   
r   fr   c                 C  s&   | j j }|rd| dS | dS )Nz+at::functionalization::FunctionalInverses::_inverse)r    r   r'   )r5   r.   r4   r)   r)   r*   r1      s   
r1   r	   c                 C  sD   t | jdk rtd| jD ]}|j std|j qttS )N   z"Expected at least one return valuez&Expected tensor-like return type, got )lenreturnsr0   r   is_tensor_liker   r   )r    retr)   r)   r*   returns_type   s   

r<   c                 C  s0   t | jdkpt | jdko| jd j d uS )Nr7   r   )r8   r9   r   is_list_liker    r)   r)   r*   is_multi_output   s    r?   list[Binding]c                 C  s   t g}t| r|t |S )N)has_symbolic_inputs_bindingr?   appendout_index_binding)r    	argumentsr)   r)   r*   base_ctor_arguments   s   
rE   c                 C  s   t | ddS )NFowning)
attributesr>   r)   r)   r*   extra_ctor_arguments   s   rI   TrG   c                   sR   | j j}|d jttjkrtd|d j ttg fdd|dd  D S )Nr   %Expected first arg to be Tensor, got c                   s   g | ]	}t j| d qS ))remove_non_owning_ref_typesr   r   .0arF   r)   r*   
<listcomp>   s    zattributes.<locals>.<listcomp>r7   )	rD   flat_allr   r   r   Tensorr0   reapply_views_bindinginverse_return_mode_binding)r    rG   argsr)   rF   r*   rH      s   rH   c                 C  s~   | j j}|d jttjkrtd|d j |dd  }dd |D }|s,tg| S t| r8tt	t
tg| S tt	t
g| S )Nr   rJ   r7   c                 S  s   g | ]}t |qS r)   rL   rM   r)   r)   r*   rP      s    z op_arguments.<locals>.<listcomp>)rD   rQ   r   r   r   rR   r0   base_bindingr?   mutated_view_bindingrT   rC   )r    r-   rU   non_self_argsnon_self_bindingsr)   r)   r*   op_arguments   s*   
rZ   )F)r    r   r!   r"   r#   r$   )
r,   r   r-   r"   r.   r"   r   r/   r#   r$   )r5   r   r.   r"   r#   r$   )r    r   r#   r	   )r    r   r#   r"   )r    r   r#   r@   )T)r    r   rG   r"   r#   r@   )r    r   r-   r"   r#   r@   )(
__future__r   torchgen.apir   torchgen.api.typesr   r   r   r   r   r	   r
   r   r   torchgen.modelr   r   r   r   r   r   rR   rV   r"   rA   rW   intrC   rS   InverseReturnModeTrT   r+   r   r1   r<   r?   rE   rI   rH   rZ   r)   r)   r)   r*   <module>   s    , 	
	




