U
    9%eJ                     @   sN  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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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eeee	f  eeee	f  e.e.ee d	d
dZ/dS )    )DictListNoReturnSequenceUnion)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optionsoutc                   @   s   e Zd ZdS )
UnsatErrorN)__name__
__module____qualname__ r+   r+   U/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torchgen/api/translate.pyr'   K   s   r'   F)methodallow_expensive_conversions)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< ttdfddttt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)self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>.unsat)r8   directr1   c             	      s  t tdfdd}| kr$|  S t| jtrdzt | jt| jj|dW S  tk
rb   Y nX t| jtrzt | j| jj|dW S  tk
r   Y nX | jt	t
tkrʈt | jt
t|dS |rֈ|  | t dtt
tkrP|t tjtt
t}tkr|S z|t}d| d| dW S  tk
rJ   | Y S X nF| 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r6z|t}d| dW S  tk
r0   |t}	|	 d Y S X n`| t dtt
tkrz|t}| dW S  tk
r   |t}	|	 d Y S X n| t dtt
tkrz|t}| dW S  tk
r   |t}	|	 d Y S X n| t dtt
tkr<z|t}| dW S  tk
r6   |t}	Y dS X nZ| jt
tkrz|t | jtW S  tk
r   |t | jt
t}
d|
 d Y S X n| jt
tkrz"|t | jt
t}d| dW S  tk
r   |t | jt Y S X n| jt
tkr|t | jt
tS | jtt
tkrX|t | jtt
t}| d| dS | jt
tkr|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k
r   |t | jt
t}| d"| d Y S X nt| jt
tkrV|t | jt
t}| d#| dS | jt
tkrv|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rt | jt
t}||}| d$S | jtt#t
tkrHt | 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!}||}| d | d&S | jtt
t%krt | jtt
t%}||}d'| dS |  d S )(Nr7   c                    s    | ddS )NTrE   r+   )r8   solver+   r,   direct_solve   s    z.translate.<locals>.solve.<locals>.direct_solverF   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optTypeMetaToScalarType(z.dtype_opt())z.scalar_type()z.layout_opt()z	.layout()z.device_opt()z	.device()z.pinned_memory_opt()zc10::nulloptzC10_AS_INTARRAYREF_SLOW(zc10::fromIntArrayRefSlow(z/.has_value() ? c10::make_optional(c10::SymInt(*z)) : c10::nulloptz.expect_int()z".has_value() ? c10::make_optional(z->expect_int()) : c10::nulloptz;.has_value() ? c10::make_optional(C10_AS_INTARRAYREF_SLOW(*z<.has_value() ? c10::make_optional(c10::fromIntArrayRefSlow(*z.vec()z->vec()) : c10::nulloptz) : c10::nulloptzconst_cast<Tensor&>()&r   str
isinstancer3   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   rE   rI   rJ   r%   rK   rL   rM   rN   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_ctypesrH   rD   r+   r,   rH      s@    





    
ztranslate.<locals>.solvec                    s   g | ]}t  |d d|qS )FrF   )r   )r=   grG   r+   r,   
<listcomp>  s     ztranslate.<locals>.<listcomp>)rP   r	   appendr   r<   Znctyper2   r3   r   rQ   r   r   rO   r   r#   r   r   r   r   r   r   r   r   r   bool)r/   r0   r-   r.   Zbinding_exprsbr\   r>   r+   r[   r,   	translate`   s    


 
 Mra   N)0typingr   r   r   r   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$   rR   rS   rT   rU   rV   rW   rX   RuntimeErrorr'   r_   ra   r+   r+   r+   r,   <module>   s$   =