o
    h                     @   s  d Z ddlZddlmZ ddlmZ ddlZddlmZ ddlm	Z	m
Z
mZ ddlmZmZ dgZejejd	d
ZededdejfddZede
dddddddejdejdejdee dee dee fddZede
ddgdede
jdd d!d"gdd`d$ed%ed&efd'd(Zed)e
d#d!d!d!e
ddddd*dejdejd+ee d,ejd-ejd.ed/e ejejejf fd0d1Z!ed2e
dd3dejfd4d5Z"ed6dadejfd7d8Z#ed9e
d#d#dejfd:d;Z$ed<dadejfd=d>Z%ed?e
d#d#dejfd@dAZ&edBe
d#e
ddd3dejfdCdDZ'edEe
d#e
ddd3dejfdFdGZ(edHe
d#e
ddd3dejfdIdJZ)edKdejfdLdMZ*edNe
ddd3dejfdOdPZ+edQe
ddddRddejdSejjdTejjdUe,e dVedWejjfdXdYZ-edZe
dddd3d3d3dd3d3	dejfd[d\Z.ed]e
dd*ddRddejdSejjdTedUeee  dVedWejjfd^d_Z/dS )ba  This file exports ONNX ops for opset 18.

Note [ONNX Operators that are added/updated in opset 18]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
https://github.com/onnx/onnx/blob/main/docs/Changelog.md#version-18-of-the-default-onnx-operator-set
New operators:
    BitwiseAnd
    CenterCropPad
    Col2Im
    Mish
    OptionalGetElement
    OptionalHasElement
    Pad
    Resize
    ScatterElements
    ScatterND
    Split
    N)Sequence)Optional)_C)_type_utilssymbolic_helpersymbolic_opset9)	jit_utilsregistrationcol2im   )opsetzaten::__and_zaten::bitwise_andgc                 C   st   ||g}dd |D }t |dkr|}tj| }t| ||}t| ||}|tjjkr3| d||S | d||S )Nc                 S   s   g | ]	}t |r|qS  )r   _get_tensor_rank).0argr   r   o/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/torch/onnx/symbolic_opset18.py
<listcomp>0   s    z__and_.<locals>.<listcomp>r   And
BitwiseAnd)lenr   _type_promote_from_values_maybe_cast_to_typer   JitScalarTypeBOOLop)r   selfotherargs	prom_argspromotion_jit_typer   r   r   __and_*   s   
r!   zaten::col2imvisinputoutput_sizekernel_sizedilationpaddingstridec           	   	      s|   g }|D ] |  fddtdD  qt|d }|s$ddg| }|s+dg| }|s2dg| }| jd||||||dS )Nc                 3   s    | ]} V  qd S Nr   )r   _padr   r   	<genexpr>I   s    zcol2im.<locals>.<genexpr>   r      Col2Im)dilations_ipads_i	strides_i)extendranger   _get_tensor_sizesr   )	r   r$   r%   r&   r'   r(   r)   adjusted_paddingnum_dimensional_axisr   r,   r   r
   ;   s&   

z
aten::mean
ReduceMeanmean)decoratez
aten::prod
ReduceProdprodF)allow_multi_dim_supportTonnx_opnamer?   c                 C   s   t | ||S r*   )r   _reduce_with_dtype_helper)r@   rA   r?   r   r   r   _reduce_with_dtype`   s   rC   zaten::native_layer_normfnormalized_shapeweightbiasepsreturnc                 C      t | |||||S r*   )opset9native_layer_norm)r   r$   rE   rF   rG   rH   r   r   r   _native_layer_normq   s   rM   z	aten::gluic                 C   sR   t ||}|d ur|d dksJ | jd||ddd\}}| d|| d|S )Nr/   r   Split)axis_inum_outputs_ioutputsMulSigmoid)r   _get_tensor_dim_sizer   )r   r$   dimdim_sizefirstsecondr   r   r   _glu   s
   rZ   z	aten::maxc                 C      t | |||S r*   )r   _max_helperr   r   dim_or_ykeepdimr   r   r   max   s   r`   zaten::maximumc                 C      t | ||dS N)r^   )r`   r   r$   r   r   r   r   maximum      rd   z	aten::minc                 C   r[   r*   )r   _min_helperr]   r   r   r   min   s   rg   zaten::minimumc                 C   ra   rb   )rg   rc   r   r   r   minimum   re   rh   z
aten::amaxc                 C   ,   | j dtj|tjdd}| j d|||dS )NConstantdtypevalue_t	ReduceMax
keepdims_ir   torchtensorlongr   r   rV   r_   axesr   r   r   amax      rx   z
aten::aminc                 C   ri   )Nrj   rk   rm   	ReduceMinrp   rr   rv   r   r   r   amin   ry   r{   zaten::aminmaxc                 C   sx   t |s,t |dd}| jdtj|gtjdd}| jd|||d| jd|||dfS | jd||d| jd||dfS )	NrN   rV   rj   rk   rm   rz   rp   ro   )r   _is_none
_get_constr   rs   rt   ru   rv   r   r   r   aminmax   s   
r~   zaten::var_meanc                 G   s6   t |dkrt| |d |d d S tj| |g|R  S )Nr0   r   )r   r   _var_mean_helper)r   r$   r   r   r   r   	_var_mean   s   r   zaten::logsumexpc                 C   sD   |d u r| j d|ddS | j dtj|tjdd}| j d|||dS )NReduceLogSumExpr   rp   rj   rk   rm   rr   )r   r$   rV   r_   rw   r   r   r   
_logsumexp   s   r   zaten::linalg_matrix_normbr   ordrV   r_   rl   c                 C   rJ   r*   )rK   linalg_matrix_normr   r   r   rV   r_   rl   r   r   r   _linalg_matrix_norm      
r   zaten::embedding_bagc
           
      C   s   t | |||||||||	
S r*   )r   _embedding_bag_helper)
r   embedding_matrixindicesoffsetsscale_grad_by_freqmodesparseper_sample_weightsinclude_last_offsetpadding_idxr   r   r   embedding_bag   s   r   zaten::linalg_vector_normc                 C   rJ   r*   )r   _linalg_vector_norm_helperr   r   r   r   linalg_vector_norm   r   r   )T)NN)0__doc__	functoolscollections.abcr   typingr   rs   r   
torch.onnxr   r   r   rK   torch.onnx._internalr   r	   __all__partialonnx_symbolic_onnx_symbolicGraphContextr!   
parse_argsValueintr
   _apply_paramsstrboolrC   quantized_argsfloattuplerM   rZ   r`   rd   rg   rh   rx   r{   r~   r   r   listr   r   r   r   r   r   r   <module>   s   #
	


