
    Χg:                        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                     ( ed
 e
j        ddd          g           ed e
j        ddd          g           ed e
j        ddd          g           ed e
j        ddd          g           ed e
j        ddd          g           ed e
j        ddd          g          d                                                                         Z ed          dej        fd            Zdej        fd Zdej        fd!Zdej        fd"Z ed#          dej        fd$            Z ed%          dej        fd&            Z ed'          dej        fd(            Z ed)          dej        fd*            Z  ed+          dej        fd,            Z! ed-          dej        fd.            Z" ed/           e
j#        d0d0d0d1d1          dej        fd2                        Z$ ed3          dej        fd4            Z%dej        d5e&fd6Z' ed7           e
j#        d0d8d0d0d0d0          	 	 dLdej        fd:                        Z( ed;           e
j#        d0d8d0d0d0d0          	 	 dLdej        fd<                        Z) ed=           e
j#        d0d8d0d0d0          dMdej        fd>                        Z* ed?           e
j#        d0d8d0d0d0d0          	 	 dLdej        fd@                        Z+ edA           e
j#        d0d8d0d0d0          dMdej        fdB                        Z, edC           e
j#        d0d8d0d0d0d0          	 	 dLdej        fdD                        Z- edE          	 dMdej        fdF            Z. edG           e
j#        d0dHd8d0d0d0d0          	 	 dLdej        fdI                        Z/ edJ          dej        fdK            Z0dS )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::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                    t          j        | |          \  }}t          j                   t          j        |          }|rt          j        d          S t          j        d          t          j                  rt          j        d          S |fdt          d          D             }|                     d|          S )Nalign_corners == Trueisz%torch._C.Value (output_size) indexingc                     g | ]a}|d k     rdnVt          |z
                      t                                                                          |z
                      z  bS )         ?)floattypesizes).0idiminputoutput_sizes     V/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/onnx/symbolic_opset8.py
<listcomp>z5_interpolate.<locals>.symbolic_fn.<locals>.<listcomp>l   s}       
  q55 ;qz233

**,,sQwZ899:      r   Upsamplemode_sscales_f)	r   _get_interpolate_attributes_interpolate_warning_maybe_get_scalar_unimplemented_maybe_get_const	_is_valuerangeop)	gr4   r5   argsscalesalign_cornersr3   interpolate_modenames	    ``   r6   symbolic_fnz!_interpolate.<locals>.symbolic_fn^   s    / K!
 !
 	,-=>>>'9-HH 	X"1$8OQVWWW%6{DII$[11 	"1=   >     
 q#  F ttJ.>tPPPr8    )rJ   r3   rI   rK   s   ``` r6   _interpolaterM   E   s7    2Q Q Q Q Q Q Q. r8   zaten::__interpolaterE   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        | |||||          \  }}|                     d|||          S )Nbinterpolater)   zdynamic scales in opset 8zdynamic size in opset 8r9   r:   )r   rA   _is_noner@   rB    _interpolate_get_scales_and_moderD   )	rE   r4   sizescale_factormoderH   recompute_scale_factor	antialiasrG   s	            r6   __interpolaterX   x   s	    $4]CHHM#M22 V} V-m=TUUU#L11 
o6O7 7 
 -6
 
 	
 #D)) Xo.G.M.M X-m=VWWW"C	5$dM LFD 44
E$4@@@r8   c                     t           j        j        t           j        j        t           j        j        h}d }t           j                            |d         t           j        j                  }|t           j        j        k    r;|}||vr0|                                }t           fd|D                       }nd|z   S t          j
        d           |f|z   S )Nr   c              3   f   K   | ]+}                     d |t          j        j                  V  ,dS )Castto_iN)rD   _C_onnxTensorProtoDataTypeFLOAT)r1   argrE   s     r6   	<genexpr>z-_try_cast_integer_to_float.<locals>.<genexpr>   sO         VSw'B'HII     r8   NzOnly 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HALFr`   DOUBLE
from_value	UNDEFINEDscalar_nametuplewarningswarn)rE   rF   floating_scalar_typesold_type	arg0_types   `    r6   _try_cast_integer_to_floatrp      s    !&!'!(
 H )44Q*4 I K-777000++--H        DD
 T>!P	
 	
 	

 ;r8   c                 P    ||S  t          t          d|           | |d          S )N_cast_F)getattropset9)rE   r4   to_types      r6   _cast_to_typerv      s3    .76-G--..q%???r8   c                     t          j        |          }t          j        ||          }t          | ||          \  }}}|                     |||          S rc   )r   r?   _if_scalar_type_asrp   rD   )rE   r4   otherop_name_s        r6   _comparison_operatorr|      sQ    -e44E.ue<<E0E5AAOAue44&&&r8   zaten::gtc                 &    t          | ||d          S )NGreaterr|   rE   r4   ry   s      r6   gtr      s    5%;;;r8   zaten::ltc                 &    t          | ||d          S )NLessr   r   s      r6   ltr      s    5%888r8   z	aten::bmmc                     t          j        |          r;t          | ||          \  }}}t          | |                     d||          |          S |                     d||          S )NMatMul)r   _try_get_scalar_typerp   rv   rD   )rE   selfry   rn   s       r6   bmmr      se    +D11 + :1dE J J$QXtU ; ;XFFFttHdE***r8   zaten::matmulc                 $    t          | ||          S rc   )r   )rE   r   ry   s      r6   matmulr      s    q$r8   zaten::preluc                    t          j        |          }t          j        |          }|=|dk    r7|                     d|t	          t          d|dz
                                }n$|dk    r|dgk    rt          j        | |dg          }t          j        |          r;t          | ||          \  }}}t          | |                     d||          |          S |                     d||          S )Nr,   	Unsqueeze   )axes_ir   PRelu)
r   _get_tensor_rank_get_tensor_sizesrD   listrC   _squeeze_helperr   rp   rv   )rE   r   weight	self_rankweight_sizesrn   s         r6   prelur      s    066I"4V<<LQk6$uQ	A7N7N2O2OPP	aLQC// 0FQC@@+D11 +!;AtV!L!L$QWdF ; ;XFFFttGT6***r8   zaten::mmc                    t          j        ||          }|t          j        d|          |                     dt          j        dg|                                                    }t          j        |          rAt          | |||          \  }}}}t          | |                     d|||dd	          |          S |                     d|||dd	          S )
Nz/mm can only operate on tensors with known typesConstantr   )dtypevalue_tGemmg        r-   beta_falpha_f)
r   r   r   SymbolicValueErrorrD   torchtensorr   rp   rv   )rE   r   ry   scalar_typezero_constantrn   s         r6   mmr      s     "6tUCCK'=t
 
 	
 DDaS(9(9(;(;<<<   M
 +D11 
/ItUM0
 0
,$} DDumCDMM
 
 	

 44e]34LLLr8   zaten::addmmvtc                 r   t          j        |          ret          | |||          \  }}}}t          | |                     d|||t          j        |          t          j        |                    |          S |                     d|||t          j        |          t          j        |                    S )Nr   r   )r   r   rp   rv   rD   _scalar)rE   r   mat1mat2betaalpharn   s          r6   addmmr   
  s     +D11 
%?4t%T%T"$dDD&.t44'/66    
 
 	
 tt"*400#+E22  
 
 	
r8   zaten::flattenc           	         t          j        |dd          }t          j        |dd          }|                                                                }|dk     r||z   }|dk    ro||dz
  k    rft          j        |          r:t          | |          \  }}t          | |                     d||          |          S |                     d||          S |dk    ru||dz
  k    rlt          j        |          r=t          | |          \  }}t          | |                     d||dz             |          S |                     d||dz             S t          j	        | |||          S )	Nr2   	start_dimend_dimr   r   Flatten)axis_ir,   )
r   
_get_constr/   r3   r   rp   rv   rD   rt   flatten)rE   r4   r   r   start_dim_i	end_dim_ir3   rn   s           r6   r   r   &  s|   !,Y[IIK*7CCCI
**,,



C1}})O	aIq00/66 	>8EBBOHe 144	54==x   44	54===aIq00/66 	@8EBBOHe 144	5Q4??   44	5Q4???>!UIw777r8   r   c                    |t           j        j        }nt          j        |          }|                                j        se|                     d|t           j        j                                        d|          }|                     d||                                          S |                     d||                                d|          S )NConstantFillr   )dtype_iinput_as_shape_ivalue_fr[   r\   )r   rd   r`   r   is_floating_pointrD   	onnx_type)rE   r0   r   const_valuer   results         r6   _constant_fillr   C  s    }!/5!/660 
-3==??  
 
 ttFF)>)>)@)@tAAAtt))++  
 
 	
r8   zaten::emptyr2   Fc                 *    t          | |||||          S rc   )zeros)rE   r0   r   layoutdevice
pin_memorymemory_formats          r6   emptyr   [  s     E5&&*===r8   zaten::empty_likec                 *    t          | |||||          S rc   )
zeros_like)rE   r4   r   r   r   r   r   s          r6   
empty_liker   i  s     avvzBBBr8   zaten::zerosc                 &    t          | ||d          S )Nr   r   rE   r0   r   r   r   r   s         r6   r   r   w  s     !UE1---r8   zaten::zeros_likec                 R    |                      d|          }t          | ||d          S )NShaper   rD   r   rE   r4   r   r   r   r   r   shapes           r6   r   r   ~  +     DD%  E!UE1---r8   z
aten::onesc                 &    t          | ||d          S )Nr   r   r   s         r6   onesr     s     !UE1---r8   zaten::ones_likec                 R    |                      d|          }t          | ||d          S )Nr   r   r   r   s           r6   	ones_liker     r   r8   z
aten::fullc                 F   t          j        |d          }t          j        |          rQt          | ||||          }t	          j        | |||                     dt          j        d                              S t          j	        |dd          }t          | |||          S )Nr   r   r   r   r2   r   )r   rA   rB   r   rt   addrD   r   r   r   r   )	rE   r0   valuer   r   r   r   r   tmps	            r6   fullr     s     "25#>>K -- <AueVV44z!S%j%,q//)R)RSSS*5#w??a{;;;r8   zaten::full_likefc                 R    |                      d|          }t          | |||          S )Nr   r   )	rE   r4   
fill_valuer   r   r   r   r   r   s	            r6   	full_liker     s+     DD%  E!UE:666r8   zaten::repeatc                    t          j        |          s)|                     dt          j        |                    }t          j        |          r"t          t          j        |                    }n$t          j        |d          }t          |          }|	                                r|
                                                                }|t          |          z
  }|dk    rDt          j        | ||                     dt          j        dg|z  |z                                 }|                     d||          S )Nr   r   r*   r   r   Tile)r   rB   rD   r   
LongTensor_is_packed_listlen_unpack_listrA   isCompleteTensorr/   r0   rt   viewr   )rE   r   repeatsrepeat_size_lenconst_repeatsr0   	diff_dimss          r6   repeatr     s   $W-- F$$z5+;G+D+D$EE&w// -o:7CCDD'8$GGm,, 		!!###c%jj0	q==;4j%,sYQV?V2W2WXX D 44g&&&r8   )FN)F)1__doc__	functoolsrk   r   torch._Cr   r^   
torch.onnxr   r   r   r   rt   torch.onnx._internalr   r	   partialonnx_symbolic_onnx_symbolicblock_listed_operatorsblock_listed_op_block_list_in_opset_apply_paramsrM   GraphContextrX   rp   rv   r|   r   r   r   r   r   r   
parse_argsr   r   intr   r   r   r   r   r   r   r   r   r   rL   r8   r6   <module>r      s$   @       % % % % % % V V V V V V V V V V V V 8 8 8 8 8 8 8 8 #"<#=QGGG $ .  O.NN-O--..,,_==   
 +o+,@!YOOP   +o+,@!YOOP   +o+,@!YOOP   +o+,?HMMN   +o+,A1hOOP    +o+,BAxPPQ   	 	 	 	 	 	 06 %&&AA A A '&AB)"8    >@Y+ @ @ @ @'I2 ' ' ' ' 
<)
  < < < < 
9)
  9 9 9 9 +9! + + + + i$      +Y# + + + + 
M)
  M M M M2 Cc344
Y# 
 
 
 54 
4   8y% 8 8 8 ! 88
i, 
C 
 
 
 
0 Cc3S99 	> 	>	> 	> 	> :9 	> "##Cc3S99 	C 	C	C 	C 	C :9 $#	C Cc344. .Y# . . . 54 .
 "##Cc3S99 
. 
.
. 
. 
. :9 $#
. Cc344. .I" . . . 54 . !""Cc3S99 
. 
.
. 
. 
. :9 #"
. OT	< 	<	< 	< 	< 	< !""Cc3S#>> 7 77 7 7 ?> #"7 'i$ ' ' '  ' ' 'r8   