U
    d                     @   sP   d dl mZ d dlmZmZ d dlmZ d dlmZ eeef e	dddZ
dS )	    )Union)NativeFunctionNativeFunctionsGroup)LazyIrSchema)OptionalCType)freturnc           	      C   s  t | tr| jjn| j}t|}g }|jD ]R}|jrbt |jtrV|	d|j
 d q*|	d q*|	d|j
 d|j
  q*ddd |D }d	d |jD }d
d |jD }ddd || D }dt| dt||  d| d| d|j d|j dt|j d|j dS )NZhas_z- ? loctx->GetOutputOp(operand(i++)) : nullptrz loctx->GetOutputOp(operand(i++))"", z
    c                 S   s   g | ]}d | dqS )zarguments.emplace_back(); .0ar   r   B/tmp/pip-unpacked-wheel-ua33x9lu/torchgen/dest/lazy_ts_lowering.py
<listcomp>   s     z$ts_lowering_body.<locals>.<listcomp>c                 S   s   g | ]}d |j  dqS )r	   z#", loctx->GetOutputOp(operand(i++))namer   argr   r   r   r      s   c                 S   s    g | ]}d |j  d|j  qS )r	   r
   r   r   r   r   r   r       s    c                 S   s   g | ]}d | dqS )zkwarguments.emplace_back(r   r   r   r   r   r   r   $   s   z~    std::vector<torch::jit::NamedValue> arguments;
    std::vector<torch::jit::NamedValue> kwarguments;
    arguments.reserve(z);
    kwarguments.reserve(z);
    size_t i = 0;
    z
    torch::lazy::TSOpVector z\_out = torch::lazy::LowerTSBuiltin(function, op().op, arguments, kwarguments);
    CHECK_EQ(z_out.size(), z);

    return z_out;
)
isinstancer   Z
functionalfuncr   Zpositional_argsZis_lazy_valueZ	lazy_typer   appendr   joinZkeyword_valuesZkeyword_scalarslenZ	aten_nameZreturns)	r   r   ZschemaZemplace_argumentsr   Zemplace_arguments_strZemplace_kwarg_valuesZemplace_kwarg_scalarsZemplace_kwargumentsr   r   r   ts_lowering_body   sX    


	r   N)typingr   Ztorchgen.modelr   r   Ztorchgen.api.lazyr   Ztorchgen.api.typesr   strr   r   r   r   r   <module>   s   