a
    haK                     @  sB  d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# erd dl$m%Z% ede
ee!Z&ede
ee"Z'e#eeZ(e#ee Z)ee#eeZ*eeeZ+eee"Z,G dd de-Z.d	d	d
ddddddddZ/dS )    )annotations)NoReturnTYPE_CHECKING)ArrayRefCType	BaseCTypeBindingboolTConstRefCTypedeviceTExprintArrayRefTiOptTensorListRefTlayoutT	ListCTypelongTmemoryFormatTMutRefCType
NamedCTypeopmath_tOptionalCTypeoptionalIntArrayRefToptionalScalarRefToptionalSymIntArrayRefToptionalTensorRefTscalar_tscalarTscalarTypeTSpecialArgNamesymIntArrayRefTSymIntTtensorOptionsTtensorTVectorCType)Sequenceoptionsoutc                   @  s   e Zd ZdS )
UnsatErrorN)__name__
__module____qualname__ r*   r*   D/var/www/auris/lib/python3.9/site-packages/torchgen/api/translate.pyr&   R   s   r&   F)methodallow_expensive_conversionszSequence[Expr | Binding]zSequence[NamedCType | Binding]boolz
list[Expr])bindingsgoalsr,   r-   returnc                  s  g }| D ]0}t |tr.|t|j|jd q|| qg |D ]&}t |tr^|j qB| qBi |D ]}|j|j< |j}t |trt |j	t
rt |j	j	trt|j	j	jdkrd|j d|j dt|j	j	jttt< |jtt
ttkr4d|j d|j d|j d	t|jtt< |jtttkrfd|j d
t|jtt< |jtt
ttkrd|j d|j dt|jtt< |jttkrd|j dt|jtt< |jttt
ttkrrd|j dt|jtt< qr|r>dtdttt< dtdttt< dddfdddddd fddfddD S )N)exprtypez
at::Tensor(z.has_value() ? *z : at::Tensor())z((z.has_value() && (*z&).defined()) ? at::OptionalTensorRef(*z) : at::OptionalTensorRef())z).to<opmath_t>()z'.has_value() ? at::OptionalScalarRef(&(z%.value())) : at::OptionalScalarRef())zstatic_cast<opmath_t>()zat::IOptTensorListRef(zconst_cast<Tensor&>(*this)selfr   r   goalr1   c                   s>   d dd   D }td|   d| j d| dd S )N
c                 s  s.   | ]&\}}d |   d|j d| V  qdS )z   z; // N)cpp_typename).0ter*   r*   r+   	<genexpr>   s   z+translate.<locals>.unsat.<locals>.<genexpr>z&
Failed to synthesize the expression "r:   zI".
When I failed, the following bindings were available in the context:

z~

This probably means there is a missing rule in the rules of torchgen.api.translate.
Check this module for more information.
)joinitemsr&   r;   r<   )r8   Zctx_desc)ctxr*   r+   unsat   s    
ztranslate.<locals>.unsatr.   str)r8   directr1   c             	     s  dddfdd}| v r$|  S t | jtrbzt| jt| jj|dW S  ty`   Y n0 t | jtrzt| j| jj|dW S  ty   Y n0 | jtt	t
krƈt| jt	t|dS |r҈|  | tdtt	tkrJ|ttjtt	t}tv r|S z|t}d| d	| d
W S  tyD   | Y S 0 n8| tdt	tkr|tdtt	t}|tdtt	t}|tdtt	t}|tdtt	t}d| d| d| d| d
	S | tdtt	tkr.z|t}d| dW S  ty(   |t}	|	 d Y S 0 nT| tdtt	tkrz|t}| dW S  ty   |t}	|	 d Y S 0 n| tdtt	tkrz|t}| dW S  ty   |t}	|	 d Y S 0 n| tdtt	tkr.z|t}| dW S  ty(   |t}	Y dS 0 nT| jt	tkrz|t| jtW S  ty   |t| jt	t}
d|
 d
 Y S 0 n| jt	tkrz"|t| jt	t}d| d
W S  ty   |t| jt Y S 0 n| jt	tkr
|t| jt	t
S | jtt	tkrF|t| jtt	t
}| d| d S | jt	t
krt|t| jt	t}| d!S | jtt	t
kr|t| jtt	t}| d"| d#S | jt	tkrz|t| jtW S  ty
   |t| jt	t}| d$| d  Y S 0 nt| jt	tkrB|t| jt	t}| d%| d S | jt	tkrb|t| jtS | jt	t kr|t| jt!S  r| jt"t	t
krt| jt	t}||}| d&S | jt"t	tkrt| jt	t}||}| d&S | jtt"t	t
kr4t| jt	t}||}| d"| d'S | jtt	t#krpt| jt	t}||}| d"| d(S | jtt	t#krt| jt	t }||}| d"| d(S | jtt	t$krt| jtt	t$}||}d)| d
S |  d S )*Nr   rE   r7   c                   s    | ddS )NTrF   r*   )r8   solver*   r+   direct_solve   s    z.translate.<locals>.solve.<locals>.direct_solverG   memory_formatz:c10::impl::check_tensor_options_and_extract_memory_format(z, r5   r$   dtype
pin_memorydevicelayoutzTensorOptions().dtype(z	).layout(z	).device(z).pinned_memory(zc10::optTypeMetaToScalarType(z.dtype_opt())z.scalar_type()z.layout_opt()z	.layout()z.device_opt()z	.device()z.pinned_memory_opt()z::std::nulloptzC10_AS_INTARRAYREF_SLOW(zc10::fromIntArrayRefSlow(z1.has_value() ? ::std::make_optional(c10::SymInt(*z)) : ::std::nulloptz.guard_int(__FILE__, __LINE__)z$.has_value() ? ::std::make_optional(z1->guard_int(__FILE__, __LINE__)) : ::std::nulloptz=.has_value() ? ::std::make_optional(C10_AS_INTARRAYREF_SLOW(*z>.has_value() ? ::std::make_optional(c10::fromIntArrayRefSlow(*z.vec()z->vec()) : ::std::nulloptz) : ::std::nulloptzconst_cast<Tensor&>()%
isinstancer3   r	   r   r<   r   elemr&   r   r   r   r   r   r   r   Z possibly_redundant_memory_formatoptions_ctyper    r   r   r
   r   out_tensor_ctypelongVec_ctyper   longSymVec_ctyper   r   optionalLongVec_ctyper   r   optionalScalar_ctyper   optionalTensor_ctyper"   r   r!   )r8   rF   rJ   rK   r$   rL   rM   rN   rO   Z
out_tensorZsymIntArrayRef_typerargnameZsymInt_typeZintArrayRef_ctypeZsymIntArrayRef_ctypeZoptionalIntArrayRef_ctypeZoptionalScalarRef_ctypeZoptionalTensorRef_ctypeZconst_ref_tensor_ctyper-   rC   Zgoal_ctypesrI   rD   r*   r+   rI      s6   








ztranslate.<locals>.solvec                   s   g | ]}t  |d d|qS )FrG   )r   )r=   grH   r*   r+   
<listcomp>      ztranslate.<locals>.<listcomp>)rP   r   appendr   r<   Znctyper2   r3   r	   rQ   r   r   rE   r   r!   r   r   r   r   r   r   r   r   )r/   r0   r,   r-   Zbinding_exprsbr\   r>   r*   r[   r+   	translateg   sh    


 
 Mra   N)0
__future__r   typingr   r   Ztorchgen.api.typesr   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"   collections.abcr#   rR   rS   rT   rU   rV   rW   rX   RuntimeErrorr&   ra   r*   r*   r*   r+   <module>   s   "