
    '}h:                     
   d Z ddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZ ddlmZmZ  ej                   ej"                  d      ZdZeD ]#  Z  ed	e        e
j*                  e             % d
 Z ed eddd      g       ed eddd      g       ed eddd      g       ed eddd      g       ed eddd      g       ed eddd      g      d                                           Z ed      dej0                  fd        Zdej0                  fd!Zdej0                  fd"Zdej0                  fd#Z ed$      dej0                  fd%       Z ed&      dej0                  fd'       Z ed(      dej0                  fd)       Z ed*      dej0                  fd+       Z  ed,      dej0                  fd-       Z! ed.      dej0                  fd/       Z" ed0       e
jF                  d1d1d1d2d2      dej0                  fd3              Z$ ed4      dej0                  fd5       Z%dej0                  d6e&fd7Z' ed8       e
jF                  d1d9d1d1d1d1      	 	 dLdej0                  fd:              Z( ed;       e
jF                  d1d9d1d1d1d1      	 	 dLdej0                  fd<              Z) ed=       e
jF                  d1d9d1d1d1      dMdej0                  fd>              Z* ed?       e
jF                  d1d9d1d1d1d1      	 	 dLdej0                  fd@              Z+ edA       e
jF                  d1d9d1d1d1      dMdej0                  fdB              Z, edC       e
jF                  d1d9d1d1d1d1      	 	 dLdej0                  fdD              Z- edE      	 dMdej0                  fdF       Z. edG       e
jF                  d1dHd9d1d1d1d1      	 	 dLdej0                  fdI              Z/ edJ      dej0                  fdK       Z0y)Na  
Note [ONNX operators that are added/updated from opset 8 to opset 9]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
New operators:
    Compress
    ConstantOfShape
    EyeLike
    MaxUnpool
    OneHot
    Sinh
    Cosh
    Asinh
    Acosh
    Atanh
    Shrink
    IsNaN
    Sign
    Erf
    Scatter
    Where
    NonZero
    TfIdfVectorizer
    MeanVarianceNormalization

Updated operators:
    BatchNormalization: removed spatial attribute.
    Greater, Less, Constant, MatMul, PRelu, Gemm, Flatten: more data types{integers} supported.
    Cast: more data types{string} supported.
    Upsample: moved scales from attribute to input.
    Scan
    N)_onnx)_type_utilserrorssymbolic_helpersymbolic_opset9)	jit_utilsregistration   )opset)nonzerowherescatterscatter_adderfsignisnangatherarangemasked_fill
index_fill
index_copyrepeat_interleaveanyallzaten::c                        fd}|S )z_Returns a decorator that calls the decorated (higher-order) function with the given parameters.c                      | i S N )fnargskwargss    Y/var/www/html/test/engine/venv/lib/python3.12/site-packages/torch/onnx/symbolic_opset8.py_applyz_apply_params.<locals>._applyF   s    4"6""    r   )r    r!   r#   s   `` r"   _apply_paramsr%   C   s    # Mr$   zaten::upsample_nearest1dupsample_nearest1d   nearest)decoratezaten::upsample_nearest2dupsample_nearest2d   zaten::upsample_nearest3dupsample_nearest3d   zaten::upsample_linear1dupsample_linear1dlinearzaten::upsample_bilinear2dupsample_bilinear2dzaten::upsample_trilinear3dupsample_trilinear3dc                       fd}|S )Nc           	      6   t        j                  | |      \  }}t        j                         t        j                  |      }|rt        j                  	d|      S t        j
                  |d      }t        j                  |      rt        j                  	d      S |_t        d      D cg c]J  }|dk  rdn@t        ||z
            t        |j                         j                         |z
            z  L }}| j                  d||      S c c}w )	Nalign_corners == Trueisz%torch._C.Value (output_size) indexingr            ?Upsamplemode_sscales_f)r   _get_interpolate_attributes_interpolate_warning_maybe_get_scalar_unimplemented_maybe_get_const	_is_valuerangefloattypesizesop)
ginputoutput_sizer    scalesalign_cornersidiminterpolate_modenames
          r"   symbolic_fnz!_interpolate.<locals>.symbolic_fne   s)    / K K!
 	,,-=>'99-H"11$8OQVWW%66{DI$$[1"11=  > q#
  q5 ;qz23

**,sQwZ89::F  ttJ.>tPPs   0ADr   )rO   rM   rN   rP   s   ``` r"   _interpolaterQ   L   s    2Q. r$   zaten::__interpolaterG   c                    t        j                  |d      }t        j                  |      s|rt        j                  dd      S t        j                  |      s+t        j                  |      rt        j                  dd      S t        j                  |      s+t        j                  |      rt        j                  dd      S t        j
                  | |||||      \  }}| j                  d|||      S )Nbinterpolater4   zdynamic scales in opset 8zdynamic size in opset 8r8   r9   )r   r@   _is_noner?   rA    _interpolate_get_scales_and_moderF   )	rG   rH   sizescale_factormoderK   recompute_scale_factor	antialiasrJ   s	            r"   __interpolater\      s     $44]CHM##M2}--m=TUU##L1o6O6O7 --6
 	
 ##D)o.G.G.M--m=VWW"CC	5$dMLFD 44
E$4@@r$   c                     t         j                  j                  t         j                  j                  t         j                  j                  h}d }t         j                  j                  |d   t         j                  j                        }|t         j                  j                  k7  r0|}||vr%|j                         }t         fd|D              }nd|z   S t        j                  d       |f|z   S )Nr   c              3   v   K   | ]0  }j                  d |t        j                  j                         2 yw)Castto_iN)rF   _C_onnxTensorProtoDataTypeFLOAT).0argrG   s     r"   	<genexpr>z-_try_cast_integer_to_float.<locals>.<genexpr>   s4       VSw'B'B'H'HIs   69r   zOnly floating datatype is supported for these operators: {Greater, Less, MatMul, PRelu, Gemm, Flatten}. This might cause the onnx model to be incorrect, if inputs have integer datatypes.)r   JitScalarTypeHALFrd   DOUBLE
from_value	UNDEFINEDscalar_nametuplewarningswarn)rG   r    floating_scalar_typesold_type	arg0_types   `    r"   _try_cast_integer_to_floatrt      s    !!&&!!''!!((
 H ))44Q**44I K--77700++-H  D
 T>!P	

 ;r$   c                 @    ||S  t        t        d|       | |d      S )N_cast_F)getattropset9)rG   rH   to_types      r"   _cast_to_typerz      s+    .76VG9-.q%??r$   c                     t        j                  |      }t        j                  ||      }t        | ||      \  }}}| j	                  |||      S r   )r   r>   _if_scalar_type_asrt   rF   )rG   rH   otherop_name_s        r"   _comparison_operatorr      sK    --e4E..ue<E0E5AOAue44&&r$   zaten::gtc                     t        | ||d      S )NGreaterr   rG   rH   r}   s      r"   gtr      s    5%;;r$   zaten::ltc                     t        | ||d      S )NLessr   r   s      r"   ltr      s    5%88r$   z	aten::bmmc                     t        j                  |      r/t        | ||      \  }}}t        | | j	                  d||      |      S | j	                  d||      S )NMatMul)r   _try_get_scalar_typert   rz   rF   )rG   selfr}   rr   s       r"   bmmr      sT    ++D1 :1dE J$QXtU ;XFFttHdE**r$   zaten::matmulc                     t        | ||      S r   )r   )rG   r   r}   s      r"   matmulr      s    q$r$   zaten::preluc                    t        j                  |      }t        j                  |      }|0|dkD  r+| j                  d|t	        t        d|dz
                    }n#|dk(  r|dgk(  rt        j                  | |dg      }t        j                  |      r/t        | ||      \  }}}t        | | j                  d||      |      S | j                  d||      S )Nr6   	Unsqueeze   )axes_ir   PRelu)
r   _get_tensor_rank_get_tensor_sizesrF   listrB   _squeeze_helperr   rt   rz   )rG   r   weight	self_rankweight_sizesrr   s         r"   prelur      s    006I"44V<LQk6$uQ	A7N2OP	aLQC/ 00FQC@++D1!;AtV!L$QWdF ;XFFttGT6**r$   zaten::mmc                    t        j                  ||      }|t        j                  d|      | j	                  dt        j                  dg|j                                     }t        j                  |      r5t        | |||      \  }}}}t        | | j	                  d|||dd	      |      S | j	                  d|||dd	      S )
Nz/mm can only operate on tensors with known typesConstantr   )dtypevalue_tGemmg        r7   beta_falpha_f)
r   r   r   SymbolicValueErrorrF   torchtensorr   rt   rz   )rG   r   r}   scalar_typezero_constantrr   s         r"   mmr      s     "66tUCK''=t
 	
 DDaS(9(9(;<  M
 ++D1/ItUM0
,$} DDumCDM
 	

 44e]34LLr$   zaten::addmmvtc                 \   t        j                  |      r[t        | |||      \  }}}}t        | | j	                  d|||t        j
                  |      t        j
                  |            |      S | j	                  d|||t        j
                  |      t        j
                  |            S )Nr   r   )r   r   rt   rz   rF   _scalar)rG   r   mat1mat2betaalpharr   s          r"   addmmr     s     ++D1%?4t%T"$dDD&..t4'//6   
 	
 tt"**40#++E2  
 	
r$   zaten::flattenc           	      z   t        j                  |dd      }t        j                  |dd      }|j                         j                         }|dk  r||z   }|dk(  r_||dz
  k(  rWt        j                  |      r.t        | |      \  }}t        | | j                  d||      |      S | j                  d||      S |dk(  re||dz
  k(  r]t        j                  |      r1t        | |      \  }}t        | | j                  d||dz         |      S | j                  d||dz         S t        j                  | |||      S )	NrL   	start_dimend_dimr   r   Flatten)axis_ir6   )
r   
_get_constrD   rM   r   rt   rz   rF   rx   flatten)rG   rH   r   r   start_dim_i	end_dim_irM   rr   s           r"   r   r   -  sA   !,,Y[IK**7CCI
**,


C1})O	aIq0//68EBOHe 144	54=x  44	54==aIq0//68EBOHe 144	5Q4?  44	5Q4??>>!UIw77r$   r   c                    |t         j                  j                  }nt        j                  |      }|j                         j                  s^| j                  d|t         j                  j                  j                         d|      }| j                  d||j                               S | j                  d||j                         d|      S )NConstantFillr   )dtype_iinput_as_shape_ivalue_fr_   r`   )r   rh   rd   r   is_floating_pointrF   	onnx_type)rG   rE   r   const_valuer   results         r"   _constant_fillr   J  s    }!//55!//600--33==?  
 ttFF)>)>)@tAAtt))+  
 	
r$   zaten::emptyrL   c                 "    t        | |||||      S r   )zeros)rG   rE   r   layoutdevice
pin_memorymemory_formats          r"   emptyr   b  s     E5&&*==r$   zaten::empty_likec                 "    t        | |||||      S r   )
zeros_like)rG   rH   r   r   r   r   r   s          r"   
empty_liker   p  s     avvzBBr$   zaten::zerosc                     t        | ||d      S )Nr   r   rG   rE   r   r   r   r   s         r"   r   r   ~  s     !UE1--r$   zaten::zeros_likec                 B    | j                  d|      }t        | ||d      S )NShaper   rF   r   rG   rH   r   r   r   r   r   shapes           r"   r   r     %     DD% E!UE1--r$   z
aten::onesc                     t        | ||d      S )Nr   r   r   s         r"   onesr     s     !UE1--r$   zaten::ones_likec                 B    | j                  d|      }t        | ||d      S )Nr   r   r   r   s           r"   	ones_liker     r   r$   z
aten::fullc                 8   t        j                  |d      }t        j                  |      rKt        | ||||      }t	        j
                  | ||| j                  dt        j                  d                  S t        j                  |dd      }t        | |||      S )Nr   r   r   r   rL   r   )r   r@   rA   r   rx   addrF   r   r   r   r   )	rG   rE   valuer   r   r   r   r   tmps	            r"   fullr     s     "225#>K  -AueVV4zz!S%j%,,q/)RSS**5#w?a{;;r$   zaten::full_likefc                 B    | j                  d|      }t        | |||      S )Nr   r   )	rG   rH   
fill_valuer   r   r   r   r   r   s	            r"   	full_liker     s%     DD% E!UE:66r$   zaten::repeatc                 N   t        j                  |      s&| j                  dt        j                  |            }t        j
                  |      rt        t        j                  |            }n!t        j                  |d      }t        |      }|j                         rs|j                         j                         }|t        |      z
  }|dkD  rBt        j                  | || j                  dt        j                  dg|z  |z                     }| j                  d||      S )Nr   r   r5   r   r   Tile)r   rA   rF   r   
LongTensor_is_packed_listlen_unpack_listr@   isCompleteTensorrD   rE   rx   viewr   )rG   r   repeatsrepeat_size_lenconst_repeatsrE   	diff_dimss          r"   repeatr     s    $$W-$$z5+;+;G+D$E&&w/o::7CD'88$Gm,		!!##c%j0	q=;;4j%,,sYQV?V2WXD 44g&&r$   )FN)F)1__doc__	functoolsro   r   torch._Cr   rb   
torch.onnxr   r   r   r   rx   torch.onnx._internalr   r	   partialonnx_symbolic_onnx_symbolicblock_listed_operatorsblock_listed_op_block_list_in_opsetr%   rQ   GraphContextr\   rt   rz   r   r   r   r   r   r   r   
parse_argsr   r   intr   r   r   r   r   r   r   r   r   r   r   r$   r"   <module>r     s  @    % V V 8"""<#=#=QG $ . O.NVO,-.,,,_= 0!Y?@ 0!Y?@ 0!Y?@ /H=> 11h?@  2Ax@A						06 %&AA 'AB)"8"8 >@Y++ @'I22 ' 
<)
 
  < < 
9)
 
  9 9 +9!! + + i$$    +Y## + + 
M)
 
  M M2 Cc34
Y## 
 5 
4  8y%% 8 !88
i,, 
C 
0 Cc3S9 	>	> : 	> "#Cc3S9 	C	C : $	C Cc34.Y## . 5 .
 "#Cc3S9 
.
. : $
. Cc34.I"" . 5 . !"Cc3S9 
.
. : #
. OT	<	< 	< !"Cc3S#> 77 ? #7 'i$$ '  'r$   