
    ¯wg:                     |   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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d/       e
jF                  d0d0d0d1d1      dej0                  fd2              Z$ ed3      dej0                  fd4       Z%dej0                  d5e&fd6Z' ed7       e
jF                  d0d8d0d0d0d0      	 	 dKdej0                  fd9              Z( ed:       e
jF                  d0d8d0d0d0d0      	 	 dKdej0                  fd;              Z) ed<       e
jF                  d0d8d0d0d0      dLdej0                  fd=              Z* ed>       e
jF                  d0d8d0d0d0d0      	 	 dKdej0                  fd?              Z+ ed@       e
jF                  d0d8d0d0d0      dLdej0                  fdA              Z, edB       e
jF                  d0d8d0d0d0d0      	 	 dKdej0                  fdC              Z- edD      	 dLdej0                  fdE       Z. edF       e
jF                  d0dGd8d0d0d0d0      	 	 dKdej0                  fdH              Z/ edI      dej0                  fdJ       Z0y)Ma  
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           	      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_sizeargsscalesalign_cornersidiminterpolate_modenames
          _/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/onnx/symbolic_opset8.pysymbolic_fnz!_interpolate.<locals>.symbolic_fn^   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 )rE   rC   rD   rG   s   ``` rF   _interpolaterI   E   s    2Q.     zaten::__interpolater<   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interpolater)   zdynamic scales in opset 8zdynamic size in opset 8r-   r.   )r   r5   _is_noner4   r6    _interpolate_get_scales_and_moder;   )	r<   r=   sizescale_factormoderA   recompute_scale_factor	antialiasr@   s	            rF   __interpolaterU   x   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@@rJ   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)r;   _C_onnxTensorProtoDataTypeFLOAT).0argr<   s     rF   	<genexpr>z-_try_cast_integer_to_float.<locals>.<genexpr>   s4       VSw'B'B'H'HIs   69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)r<   r?   floating_scalar_typesold_type	arg0_types   `    rF   _try_cast_integer_to_floatrn      s    !!&&!!''!!((
 H ))44Q**44I K--77700++-H  D
 T>!P	

 ;rJ   c                 @    ||S  t        t        d|       | |d      S )N_cast_F)getattropset9)r<   r=   to_types      rF   _cast_to_typert      s+    .76VG9-.q%??rJ   c                     t        j                  |      }t        j                  ||      }t        | ||      \  }}}| j	                  |||      S ra   )r   r3   _if_scalar_type_asrn   r;   )r<   r=   otherop_name_s        rF   _comparison_operatorrz      sK    --e4E..ue<E0E5AOAue44&&rJ   zaten::gtc                     t        | ||d      S )NGreaterrz   r<   r=   rw   s      rF   gtr      s    5%;;rJ   zaten::ltc                     t        | ||d      S )NLessr}   r~   s      rF   ltr      s    5%88rJ   z	aten::bmmc                     t        j                  |      r/t        | ||      \  }}}t        | | j	                  d||      |      S | j	                  d||      S )NMatMul)r   _try_get_scalar_typern   rt   r;   )r<   selfrw   rl   s       rF   bmmr      sT    ++D1 :1dE J$QXtU ;XFFttHdE**rJ   zaten::matmulc                     t        | ||      S ra   )r   )r<   r   rw   s      rF   matmulr      s    q$rJ   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 )Nr+   	Unsqueeze   )axes_ir   PRelu)
r   _get_tensor_rank_get_tensor_sizesr;   listr7   _squeeze_helperr   rn   rt   )r<   r   weight	self_rankweight_sizesrl   s         rF   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**rJ   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        r,   beta_falpha_f)
r   r   r   SymbolicValueErrorr;   torchtensorr   rn   rt   )r<   r   rw   scalar_typezero_constantrl   s         rF   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LrJ   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   rn   rt   r;   _scalar)r<   r   mat1mat2betaalpharl   s          rF   addmmr   
  s     ++D1%?4t%T"$dDD&..t4'//6   
 	
 tt"**40#++E2  
 	
rJ   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 )	NrB   	start_dimend_dimr   r   Flatten)axis_ir+   )
r   
_get_constr9   rC   r   rn   rt   r;   rr   flatten)r<   r=   r   r   start_dim_i	end_dim_irC   rl   s           rF   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7rJ   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_frX   rY   )r   rb   r]   r   is_floating_pointr;   	onnx_type)r<   r:   r   const_valuer   results         rF   _constant_fillr   C  s    }!//55!//600--33==?  
 ttFF)>)>)@tAAtt))+  
 	
rJ   zaten::emptyrB   c                 "    t        | |||||      S ra   )zeros)r<   r:   r   layoutdevice
pin_memorymemory_formats          rF   emptyr   [  s     E5&&*==rJ   zaten::empty_likec                 "    t        | |||||      S ra   )
zeros_like)r<   r=   r   r   r   r   r   s          rF   
empty_liker   i  s     avvzBBrJ   zaten::zerosc                     t        | ||d      S )Nr   r   r<   r:   r   r   r   r   s         rF   r   r   w  s     !UE1--rJ   zaten::zeros_likec                 B    | j                  d|      }t        | ||d      S )NShaper   r;   r   r<   r=   r   r   r   r   r   shapes           rF   r   r   ~  %     DD% E!UE1--rJ   z
aten::onesc                     t        | ||d      S )Nr   r   r   s         rF   onesr     s     !UE1--rJ   zaten::ones_likec                 B    | j                  d|      }t        | ||d      S )Nr   r   r   r   s           rF   	ones_liker     r   rJ   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   rB   r   )r   r5   r6   r   rr   addr;   r   r   r   r   )	r<   r:   valuer   r   r   r   r   tmps	            rF   fullr     s     "225#>K  -AueVV4zz!S%j%,,q/)RSS**5#w?a{;;rJ   zaten::full_likefc                 B    | j                  d|      }t        | |||      S )Nr   r   )	r<   r=   
fill_valuer   r   r   r   r   r   s	            rF   	full_liker     s%     DD% E!UE:66rJ   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   r*   r   r   Tile)r   r6   r;   r   
LongTensor_is_packed_listlen_unpack_listr5   isCompleteTensorr9   r:   rr   viewr   )r<   r   repeatsrepeat_size_lenconst_repeatsr:   	diff_dimss          rF   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&&rJ   )FN)F)1__doc__	functoolsri   r   torch._Cr   r[   
torch.onnxr   r   r   r   rr   torch.onnx._internalr   r	   partialonnx_symbolic_onnx_symbolicblock_listed_operatorsblock_listed_op_block_list_in_opset_apply_paramsrI   GraphContextrU   rn   rt   rz   r   r   r   r   r   r   
parse_argsr   r   intr   r   r   r   r   r   r   r   r   r   rH   rJ   rF   <module>r      s  @    % V V 8 #""<#=#=QG $ . O.NVO,-.,,,_= +o++,@!YOP +o++,@!YOP +o++,@!YOP +o++,?HMN +o++,A1hOP  +o++,BAxPQ						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$$ '  'rJ   