U
    d                     @   sd  d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZmZmZ 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 eddG d	d
 d
ZeddG dd dZeddG dd deZeddG dd dZeddG dd deZ eddG dd dZ!eddG dd dZ"eddG dd dZ#eddG dd dZ$eddG dd dZ%ddee&edd d!Z'ee&d"d#d$Z(dd%ee&e)d&d'd(Z*eee+ d)d*d+Z,eed,d-d.Z-ddd/ee&e&ed0d1d2Z.e)e)d3d4d5Z/e	ed6f ee) d7d8d9Z0ee)d)d:d;Z1ee)d)d<d=Z2eee	e)e)f  d>d?d@Z3ee)d>dAdBZ4eee	e#d6f dCdDdEZ5dFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZhZ6ee)d"d[d\Z7ee)d"d]d^Z8d_d`eee e	e)d6f dadbdcZ9ee&e)dddedfZ:e+ee$dgdhdiZ;eeee)e$f dCdjdkZ<dldmdndSdSdoZ=eee%dCdpdqZ>d_S )r    )	dataclass)OptionalUnionSequenceSetListDictTuple)BindingCppSignatureCppSignatureGroup)cpp)pythonify_default)	ArgumentBaseTyBaseTypeListTypeNativeFunctionOptionalTypeReturnTypeVariantT)frozenc                   @   s   e Zd ZU eedf ed< dS )PythonReturns.returnsN)__name__
__module____qualname__r	   r   __annotations__ r   r   7/tmp/pip-unpacked-wheel-ua33x9lu/torchgen/api/python.pyr      s   
r   c                   @   sf   e Zd ZU eed< eed< ee ed< ee ed< ddeeddd	Zddd
eeedddZ	dS )PythonArgumentnametypedefaultdefault_initFmethod)r'   returnc                C   s   t | jdddd}| j}|dkr8|dkr8|s8d}| jd k	rndddd| j| j}| d	| d
| S | d	| S d S )Nzconst  z &selfTensorinputNone)nullptrc10::nullopt{} =)argument_type_strr#   replacer"   r$   get)r*   r'   type_strr"   r$   r   r   r    argument_str   s    
 zPythonArgument.argument_strr'   
deprecated)r'   r9   r(   c                C   s  t | j}| j}|dkr,|dkr,|s,|s,d}|dkr<|d7 }|dkr\|dkr\|s\d| d }|ort| tor| jd	k}| jd k	r|st| jtr| jjtt	j
kr| jd
r| jdrd| jdd  d }nd	d	d	ddd| j| j}| d| d| S | d| S d S )Nr*   r+   r,   from_out	Optional[]r-   {}(   )Zcontiguous_formatZper_tensor_affine)r.   r/   r0   zMemoryFormat::ContiguouszQScheme::PER_TENSOR_AFFINEz: r2   )argument_type_str_pyir#   r"   
isinstancePythonOutArgumentr$   r   elemr   r   int
startswithendswithr5   )r*   r'   r9   r6   r"   Ztreat_as_no_defaultr$   r   r   r    argument_str_pyi   sD    



 zPythonArgument.argument_str_pyiN)
r   r   r   strr   r   r   boolr7   rL   r   r   r   r    r!      s   
  r!   c                   @   s>   e Zd ZU eedf ed< eeedf ed  dddZdS )rG   .outputs)rO   r(   c                 C   s   | sd S t | }|dkr6t| d j| d jdd | dS |dkr|ttdd | r^td|  tdttt	j
|dd | dS td	d S )
NrB   r   r-   )r"   r#   r$   r%   rO   c                 S   s   | j   S Nr#   is_tensor_likear   r   r    <lambda>8      z0PythonOutArgument.from_outputs.<locals>.<lambda>zUnsupported output type: r<   z!Unexpected PythonOutArgument size)lenrG   r"   r#   anymapRuntimeErrorr   r   r   r+   AssertionError)rO   sizer   r   r    from_outputs'  s,    zPythonOutArgument.from_outputsN)	r   r   r   r	   r!   r   staticmethodr   r]   r   r   r   r    rG     s
   

rG   c                   @   s   e Zd ZU eed< eedf ed< eedf ed< ee ed< e	ed< eedf ed< e
ed< ee
d	d
dZddde
e
eeeef df dddZed	ddZed	ddZdde
edddZdde
edddZdde
ee dddZdS )PythonSignaturer"   .
input_argsinput_kwargsoutput_argsr   tensor_options_argsr'   r(   c                 C   s   dS )NFr   r*   r   r   r    r9   b  s    zPythonSignature.deprecatedF)skip_outputsskip_tensor_options)rf   rg   r(   c                C   sN   g }| | j | | j | jd k	r6|s6|| j |sF| | j t|S rP   )extendr`   ra   rb   appendrc   tuple)r*   rf   rg   resultr   r   r    	argumentsf  s    zPythonSignature.argumentsc                 C   s   t |  S rP   )rW   rl   re   r   r   r    arguments_countr  s    zPythonSignature.arguments_countc                 C   s   t | jt | j S rP   )rW   r`   ra   re   r   r   r    
output_idxu  s    zPythonSignature.output_idxrf   rf   r(   c                   s\    j |d}tt fdd|}t j}t||krD||d  j dd| dS )Nro   c                    s   | j  jdS Nr&   )r7   r'   rS   re   r   r    rU     rV   z/PythonSignature.signature_str.<locals>.<lambda>*rA   , rD   )rl   listrY   rW   r`   insertr"   join)r*   rf   argsschema_formalspositional_argcr   re   r    signature_str  s    
zPythonSignature.signature_strc                   s~    j |d}tt fdd|}t j}t||krD||d t } jr^|dd d j dd		| d
| dS )Nro   c                    s   | j  jdS rq   rL   r'   rS   re   r   r    rU     rV   z3PythonSignature.signature_str_pyi.<locals>.<lambda>rr   r   r*   def rA   rs   ) -> : ...)
rl   rt   rY   rW   r`   ru   returns_str_pyir'   r"   rv   r*   rf   rw   rx   ry   returns_strr   re   r    signature_str_pyi  s    
z!PythonSignature.signature_str_pyic          	         s    j |d}tt fdd|}  }t j}d}|dkrn|d j}t|trnt	|j
dkrn|dkrnd}|svd S d	|d j d
 |d< t } jr|dd d j dd| d| dS )Nro   c                    s   | j  jdS rq   r{   rS   re   r   r    rU     rV   z:PythonSignature.signature_str_pyi_vararg.<locals>.<lambda>Fr   rI   rB   Trr   z: _intr*   r|   rA   rs   r}   r~   )rl   rt   rY   rm   rW   r`   r#   rF   r   rM   rH   r"   r   r'   ru   rv   )	r*   rf   rw   rx   num_argsZnum_positionalargsZhave_vararg_versionZvararg_typer   r   re   r    signature_str_pyi_vararg  s.    

z(PythonSignature.signature_str_pyi_varargN)r   r   r   rM   r   r	   r!   r   rG   r   rN   propertyr9   r   rl   rI   rm   rn   rz   r   r   r   r   r   r    r_   E  s*   
  r_   c                   @   s   e Zd ZU eedf ed< eedf ed< eedddZddeed	d
dZ	ddeed	ddZ
ddeee d	ddZdS )PythonSignatureDeprecated.deprecated_args_namesdeprecated_args_exprsrd   c                 C   s   dS )NTr   re   r   r   r    r9     s    z$PythonSignatureDeprecated.deprecatedFro   rp   c                C   s   t j| |dd S )Nro   z|deprecated)r_   rz   r*   rf   r   r   r    rz     s    z'PythonSignatureDeprecated.signature_strc                   sl    j |d}tt fdd|}t j}t||krD||d t }d j dd| d| d	S )
Nro   c                    s   | j  jddS )NTr8   r{   rS   re   r   r    rU     rV   z=PythonSignatureDeprecated.signature_str_pyi.<locals>.<lambda>rr   r|   rA   rs   r}   r~   )	rl   rt   rY   rW   r`   ru   r   r"   rv   r   r   re   r    r     s    
z+PythonSignatureDeprecated.signature_str_pyic                C   s   d S rP   r   r   r   r   r    r     s    z2PythonSignatureDeprecated.signature_str_pyi_varargN)r   r   r   r	   rM   r   r   rN   r9   rz   r   r   r   r   r   r   r    r     s   
	r   c                   @   s   e Zd ZU eed< eed< dS )!PythonSignatureNativeFunctionPair	signaturefunctionN)r   r   r   r_   r   r   r   r   r   r    r     s   
r   c                   @   s*   e Zd ZU eed< eed< ee ed< dS )PythonSignatureGroupr   baseZoutplaceN)r   r   r   r_   r   r   r   r   r   r   r    r     s   
r   c                   @   s&   e Zd ZU eed< eed< eed< dS )DispatchLambdaArgumentr"   r6   
is_out_argN)r   r   r   rM   r   rN   r   r   r   r    r     s   
r   c                   @   s@   e Zd ZU eed< eed< eed< eed< eedddZdS )	PythonArgParserOutputExprr"   exprindexargumentrd   c                 C   s   d| j  dS )Nz
_r.isNone(rD   )r   re   r   r   r    is_none_expr,  s    z&PythonArgParserOutputExpr.is_none_exprN)	r   r   r   rM   r   rI   r!   r   r   r   r   r   r    r     s   
r   c                   @   s&   e Zd ZU ee ed< ee ed< dS )DispatchLambdaArgumentExprsexprsinitsN)r   r   r   r   rM   r   r   r   r   r    r   6  s   
	r   Fr&   )fr'   r(   c                C   s   t j| |djS rq   )r   Zfrom_native_functionr   )r   r'   r   r   r    _cpp_signatureP  s    r   )r   r(   c                 C   s   | j jjd k	S rP   )funcrl   Ztensor_optionsr   r   r   r    has_tensor_optionsT  s    r   simple_type)tr   r(   c                C   sB  t | tr| jtjkrdS | jtjkr*dS | jtjkr:dS | jtjkrJdS | jtjtj	tj
tjtjtjtjtjtjtjtjtjtjfkr| jjS nt | trt| jdkrdS t| j|d}|dkrdS | dS nTt | tr,|s| jnd }t| jd	kr | jd k	std
| j dS t| jdkrJ|d k	rFd| dS dS t| jdkrt|d k	rpd| dS dS t| jdkr|d k	rd| dS dS t| jdkr|d k	rd| dS dS t| jdkr|rdS dS n*t| jdkr|d k	rd| dS dS t| j|d}d| dS tdt|  d S )Nr+   int64_tdoublezc10::string_viewTensor?r   Layout?rN   z::std::array<bool,>rI   zIntArrayRef[r>   ZIntArrayRefSymIntzSymIntArrayRef[ZSymIntArrayRefzTensorList[Z
TensorListScalarzScalarList[Z
ScalarListz c10::List<c10::optional<Tensor>>z(const c10::List<c10::optional<Tensor>> &DimnamezDimnameList[ZDimnameListz	ArrayRef<unrecognized type )rF   r   r"   r   r+   rI   floatrM   rN   QSchemer   
ScalarType	GeneratorStorager   DeviceMemoryFormatr   StreamZConstQuantizerPtrr   r   rH   r3   r   r\   r[   rZ   repr)r   r   rH   r\   r   r   r    r3   a  sl    

r3   )r   r(   c                 C   s,   |   }|d k	r$t|jdkr$|jS d S d S )NrN   )Zis_list_likerM   rH   r\   )r   lr   r   r    argument_type_size  s    r   )rT   r(   c              	   C   s6   t | j| j| jd k	r,ttt| j| jnd d dS )Nr"   r#   r$   r%   )r!   r"   r#   r$   rM   r   r   Zdefault_exprrS   r   r   r    r     s    r   )r'   pyi)r   r'   r   r(   c             	      s  g }| | jjj |s8| jjjd k	r8|| jjjj | | jjj | | jjj | | jjj	 | | jjj
 tdd | jjjD  tdd | jjjD tdd | jjj
D tttt fdd|}ttttfdd|}ttttfdd|}td	d | jjjD }td
d | j D rNtdtdd | jjD }t| j}	| jdkp|o| }
| jdkp|	dp|	d}g }|
s|r|tdttj|rdnt|	|rdnd d |tdt ttj!|rdnd|rdnd d |tdttj"d|r>dnd d |tdttj#dd d |tdttj#dd d t$| jjd}t%t&| jjj||t'(|t|||dS ) Nc                 s   s   | ]}|j V  qd S rP   r"   .0rT   r   r   r    	<genexpr>  s     zsignature.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S rP   r   r   r   r   r    r     s     c                 s   s   | ]}|j V  qd S rP   r   r   r   r   r    r     s     c                    s
   | j  kS rP   r   rS   )input_arg_setr   r    rU     rV   zsignature.<locals>.<lambda>c                    s
   | j  kS rP   r   rS   )kwarg_only_setr   r    rU     rV   c                    s
   | j  kS rP   r   rS   )out_arg_setr   r    rU     rV   c                 s   s   | ]}|j  V  qd S rP   rQ   r   r   r   r    r     s    c                 s   s   | ]}|j d kV  qdS )requires_gradNr   r   r   r   r    r     s     zTargument named requires_grad is reserved, should not explicitly add it in the schemac                 s   s   | ]}|j  V  qd S rP   rQ   r   rr   r   r    r     s     factory)newlikeZnew__likedtyper-   zself.scalar_type()r   layoutZstridedztorch.stridedzself.layout()devicezself.device()
pin_memoryFalser   r   )r"   r`   ra   rb   rc   r   r'   ))rh   r   rl   Zpre_self_positionalZself_argri   r   Zpost_self_positionalZpre_tensor_options_kwarg_onlyZpost_tensor_options_kwarg_onlyr<   setZflat_positionalZflat_kwarg_onlyrj   rY   filterrX   Zflat_non_outZschema_order_arguments
ValueErrorr   r   r"   Zcategory_overriderJ   rK   r!   r   r   r   _dtype_default_type_hackr   r   r   rN   r   r_   rM   rG   r]   )r   r'   r   rw   r`   ra   rO   Zhas_tensor_input_argZhas_tensor_returnr"   Zis_factory_functionZis_like_or_new_functionrc   r   r   )r   r   r   r    r     s    

	r   )r"   r(   c                 C   s&   |  ds| dks| dkrdS dS d S )NZrandpermZtril_indicesZtriu_indicesztorch.int64r-   )rJ   r   r   r   r    r   )  s    r   .)r   r(   c                 C   sR   t | dksttdd | r"g S ttdd | r<tdttdd | S d S )NrB   c                 S   s
   | j d kS rP   r   r   r   r   r    rU   8  rV   z'namedtuple_fieldnames.<locals>.<lambda>c                 S   s
   | j d kS rP   r   r   r   r   r    rU   ;  rV   z)Unnamed field is not supported by codegenc                 S   s
   t | jS rP   )rM   r"   r   r   r   r    rU   G  rV   )rW   allrY   rX   r   rt   r   r   r   r    namedtuple_fieldnames7  s
    
r   c                 C   s  d}t | tr| j} d}t | tr | jtjkr4d}| jtjkrFd}n| jtjkrXd}n| jtj	krjd}n| jtj
kr|d}n| jtjkrd}n| jtjkrd	}n~| jtjkrd
}nl| jtjkrd}nZ| jtjkrd}nH| jtjkrd}n6| jtjkrd}n$| jtjtjtjtjfkr| jj}nt | trt	| jdkrR| jd k	rLdnd}n^|  rt | jtrnd}| jd k	r~dnd}n,t	| jdkrd}nt| j}d| d}|rd| d }|S )NFT_intr   Z_floatrM   NumberZ_dtypeZ_boolZ_qschemeZ_layoutzUnion[_device, str, None]Zmemory_formatzUnion[str, ellipsis, None]rI   zUnion[_int, _size]_sizez/Union[Tensor, Tuple[Tensor, ...], List[Tensor]]z'Union[Tuple[Tensor, ...], List[Tensor]]r   zSequence[_float]z	Sequence[r>   r=   r   )rF   r   rH   r   r"   r   rI   r   r   rM   r   r   rN   r   r   r   r   r   r+   r   r   r   r   r\   rR   rE   rZ   r   )r   Zadd_optionalretrH   r   r   r    rE   J  sb    



rE   c                 C   s|   t | tr t| j}d| dS t | trT| jtjkr:dS | jtjkrLd}nt	| S t | t
rtt| j}d| dS t	| S )Nr=   r>   Z_devicezOptional[str]zList[)rF   r   return_type_str_pyirH   r   r"   r   r   r   rE   r   )r   innerr   r   r   r    r     s    




r   )r   r(   c                 C   s`   dd | j j D }| j}t| j j }|r\dd t||D }d| dd| d}||fS d S )Nc                 S   s   g | ]}t |jqS r   r   r#   r   r   r   r    
<listcomp>  s     z+returns_named_tuple_pyi.<locals>.<listcomp>c                 S   s"   g | ]\}}d | d| dqS )z("z", rD   r   )r   r"   typr   r   r    r     s    zNamedTuple("z", [rs   z]))r   r"   r   ziprv   )r   python_returnsZnamedtuple_namefield_namesZ
tuple_argsZnamedtuple_defr   r   r    returns_named_tuple_pyi  s    r   c                 C   sd   t | jj}|rd| j S dd | jjD }t|dkrLdd| d S t|dkr`|d S d	S )
Nztorch.return_types.c                 S   s   g | ]}t |jqS r   r   r   r   r   r    r     s     z#returns_str_pyi.<locals>.<listcomp>rB   zTuple[rs   r>   r   r-   )r   r   r"   rW   rv   )r   r   r   r   r   r    r     s    r   )psr   r(   c                    s   t  dd }ttrVtdd |D t fddj}ttfdd|}t	dd  j
jjD ttd	fd
d}tt||S )NFr&   c                 s   s   | ]}|j |fV  qd S rP   r   r   r   r   r    r     s     z'dispatch_lambda_args.<locals>.<genexpr>c                    s   | dkp j  S Nr<   r   	is_out_fnnr   r   r    rU     rV   z&dispatch_lambda_args.<locals>.<lambda>c                    s    |  S rP   r   r   )mr   r    rU     rV   c                 s   s   | ]}|j V  qd S rP   r   r   r   r   r    r     s     )cpp_argr(   c                    s\   | j }| j k}jr&| jdkr&d}n&t dkp6| }|rLddi||}t| j||dS )Nr*   zconst at::Tensor &rB   zat::Tensor &
at::Tensor)r"   r6   r   )r#   r"   r'   rW   r5   r   )r   r6   r   Zensure_temp_safe)out_argsr   r   r    dispatch_lambda_arg  s"    
  z1dispatch_lambda_args.<locals>.dispatch_lambda_arg)r   rl   rF   r   dictr   r   rt   rY   r   r   r<   r
   r   rj   )r   r   cpp_argsZordered_argsr   r   )r   r   r   r   r    dispatch_lambda_args  s    

 r   r   z#::std::tuple<at::Tensor,at::Tensor>z.::std::tuple<at::Tensor,at::Tensor,at::Tensor>z9::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor>zD::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,at::Tensor>z6::std::tuple<at::Tensor,at::Tensor,at::Tensor,int64_t>z2::std::tuple<at::Tensor,at::Tensor,double,int64_t>zA::std::tuple<at::Tensor,at::Tensor,at::Tensor,at::Tensor,int64_t>z=::std::tuple<at::Tensor,at::Tensor,double,at::Tensor,int64_t>z::std::tuple<double,int64_t>z2::std::tuple<at::Tensor,::std::vector<at::Tensor>>z::std::vector<at::Tensor>z
at::ScalarrN   r   zvoid*voidzat::QSchemer   zat::IntArrayRefzat::ScalarTypec                 C   sF   t tdd | jj}t| }|tkrBt| jj	 d| |S )Nc                 S   s   t | j| jd S rP   )r   r"   r#   r   r   r   r    rU   >  rV   z,dispatch_lambda_return_str.<locals>.<lambda>z returns unsupported type )
rj   rY   r   r   r   Zreturns_typeZcpp_typeSUPPORTED_RETURN_TYPESrZ   r"   )r   Zreturns_without_annotationZ
return_strr   r   r    dispatch_lambda_return_str)  s    r   c                 C   st   t | j}tj| jkr"d| S tj| jkr`t| sH| jjjj	drNd}nd}| d| S t
d| j d S )Nzself.r   Ztorchatz::z1could not dispatch, neither function nor method: )r   r"   r   r   r'   variantsr   r   r   rK   rZ   )r   r"   	namespacer   r   r    cpp_dispatch_targetF  s    
r   N)python_signature)r   r   r(   c                   sl   t  dd }t }t|ts4ttdd |}ntt fdd|j}tj	 j
krhttdj|}|S )NFr&   c                 S   s   | j S rP   r   rS   r   r   r    rU   ]  rV   z$cpp_dispatch_exprs.<locals>.<lambda>c                    s   | dkp j  S r   r   r   r   r   r    rU   b  rV   r*   )r   rl   rj   rF   r   rY   r   r   r   r'   r   __ne__)r   r   r   r   r   r   r    cpp_dispatch_exprsS  s    

r   )r   has_defaultr(   c                 C   s  |r t | dkr td|  dt| tr| jtjtjtjtj	tj
fkrT| jj S | jtjkrl|rhdS dS | jtjkr|rdS dS | jtjkrdS | jtjkrd	S | jtjkrd
S | jtjkrdS | jtj krdS | jtjkrdS nt| tr t | jdkrdS t| jtr| jjtjtj	tjtjtjtj fkrLt| jdd S | jjtjkr`dS | jjtjkrtdS | jjtjkr|rdS dS | jjtjkr|rdS dS nLt| jtrt | jjdkrdS t | jdkrdS t | jdkrdS nt| trt | jdkr<| jd k	r6d| j dS dS ntt | jd krPd!S t | jd"krdd#S t | jdkrxd$S t | dkrd%S t | jd&krd'S t | d(krd)S td|  d*d S )+N)r   r   Layout?ztype 'z+' does not supported unpacking with defaultZscalartypeWithDefaultZ
scalartypeZdeviceWithDefaultr   ZtoInt64ZtoSymIntZtoBoolZtoDoubleZ
stringViewr   r+   ZoptionalTensorFr   ZmemoryformatOptional	generatorZlayoutWithDefaultZlayoutOptionalZdeviceOptionalrI   ZintlistOptionalzfloat[]ZdoublelistOptionalz	Dimname[]ZtoDimnameListOptionalztensorlist_n<r   Z
tensorlistr   Zlist_of_optional_tensorsr   ZdimnamelistZintlistZ
doublelistr   Z
symintlistzScalar[]Z
scalarlistz%' is not supported by PythonArgParser)rM   rZ   rF   r   r"   r   r+   r   r   r   r   lowerr   r   rI   r   rN   r   r   r   rH   arg_parser_unpack_methodr   r   r   r\   )r   r   r   r   r    r   z  s    
	r   )	arg_indexrT   r(   c                 C   sR   |j d k	}t|j|}|r&d|j  nd}d| d|  | d}t|j|| |dS )Nrs   r)   z_r.rA   rD   )r"   r   r   r   )r%   r   r#   r   r"   )r   rT   r   Zunpack_methodr$   r   r   r   r    arg_parser_output_expr  s    
r   c                 C   s   dd t |  D S )Nc                 S   s*   i | ]"\}}t ||fD ]}|j|qqS r   )r   r"   )r   irT   er   r   r    
<dictcomp>  s
     z+arg_parser_output_exprs.<locals>.<dictcomp>)	enumeraterl   )r   r   r   r   r    arg_parser_output_exprs  s    
r  r   r   r   )r   r   r   r   r   c                    sD  t | |}t| |}g }t  t|}| jddD ]}|j}||j j}|rr|dkrr|d| dg | |< q2t|t	rt
|jdkr|j r|d| dg t|jD ]\}	}
d|	 d	 |
j< qq2t|jd
kr|d| d| dd| d| d| dg | |< q2| |< q2| jr4d d< ttdd | j|rX|j rjt|j d| jD ]f}|jtkrt|j d|j dt|jt|jkrpt|j dt|j d|j dqpttfddt st|j d |d|d j d|d j d|d  j d!|d" j d#|d$ j d% d& d&< |s&r&dkr|j st|j d'ttfd(dd)st|j d*|d+|d, j d-|d j d.|d j d-|d  j d.|d j d-|d j d/ d"kr&t|j d0 d	ttt fd1d||d2S )3NT)rg   r*   zauto self = ;rB   zauto out = zout[r>   z
Dimname[]?zauto __z = zc10::optional<DimnameList> z = __z$ ? c10::make_optional(DimnameList(__z.value())) : c10::nullopt;c                 S   s   | j S rP   r   rS   r   r   r    rU   6  rV   z'dispatch_lambda_exprs.<locals>.<lambda>z : tensor options with output argz%: unrecognized tensor options field 'z' in python binding argumentsz: unrecognized type 'z' for tensor options field ''c                    s   |  kS rP   r   rS   tensor_options_args_namesr   r    rU   D  rV   z": incomplete tensor options args: z0const auto options = TensorOptions()
    .dtype(r   z)
    .device(r   z)
    .layout(r   z)
    .requires_grad(r   z)
    .pinned_memory(r   z1);
torch::utils::maybe_initialize_cuda(options);
optionsz1: dtype in tensor_options_args without output argc                    s   |  kS rP   r   rS   r  r   r    rU   a  rV   )r   r   z,: incomplete tensor options for output checkzcheck_out_type_matches(r<   rs   z,
                       z);
zE: expected "requires_grad" in tensor_options_args absent, but found [c                    s
    | j  S rP   r   rS   )lambda_args_exprsr   r    rU   u  rV   )r   r   )r  r   r   r   rl   r"   r   rh   rF   rG   rW   rO   r   r   r  rM   r#   r'   rt   rY   rc   rZ   TENSOR_OPTIONS_FIELDSr5   r   keysri   r   r   rj   )r   r   Zarg_parser_outputsZlambda_argsr   Zhas_toptionsrT   r"   Zarg_parser_exprr   Zout_argr   )r	  r  r    dispatch_lambda_exprs  s    











r  )?Zdataclassesr   typingr   r   r   r   r   r   r	   Ztorchgen.api.typesr
   r   r   Ztorchgen.apir   Ztorchgen.genr   Ztorchgen.modelr   r   r   r   r   r   r   r   r   r   r!   rG   r_   r   r   r   r   r   r   rN   r   r   rM   r3   rI   r   r   r   r   r   rE   r   r   r   r   r   r   r   r   r   r   r  r
  r  r   r   r   r    <module>   s   $, >T&y5A   r>6 
0
'\  

 