Ë
    Q/æjã@ ã                  ó,  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZmZ d dlmZmZ d dlZd dlmc mZ d dlmZ d dlmZmZmZmZ d dlmZ d dl m!Z! ejD                  rd d	l#m$Z$  ed
«      Z% ed«      Z& ed«      Z'e
d   Z(	 	 d€	 	 	 	 	 d�d„Z)d‚d„Z*dƒd„Z+	 	 	 	 d„d„Z,d„ Z-d„ Z.d…d„Z/d†d„Z0d†d„Z1d‡d„Z2	 	 	 	 dˆd„Z3ddddœ	 	 	 	 	 	 	 	 	 d‰d„Z4dŠd„Z5d„ Z6d‹d„Z7d‹d„Z8dŒd „Z9d�d!„Z:dŽd"„Z;d�d#„Z<d�d$„Z=d�d%„Z>d�d&„Z?d�d'„Z@d�d(„ZAd�d‘d)„ZBd’d*„ZCd“d+„ZDd”d•d,„ZEd”d–d-„ZF	 d”	 	 	 	 	 	 	 	 	 d—d.„ZG	 d”	 	 	 	 	 	 	 	 	 	 	 d˜d/„ZHd™d0„ZIdšd1„ZJd›d2„ZK	 	 	 	 dœd3„ZLd�d�d4„ZM	 d”	 d�d5„ZNdžd6„ZOdžd7„ZPd�d8„ZQdŸd�d9„ZR	 d 	 d�d:„ZSd�d;„ZTd<„ ZUd�d=„ZVd�d>„ZW	 	 	 d¡	 d�d?„ZXd�d@„ZYd�dA„ZZd�dB„Z[d�dC„Z\	 	 d�dD„Z]	 	 	 	 	 	 	 	 	 	 d¢dE„Z^dF„ Z_	 	 d�dG„Z`d�dH„Zad�dI„Zbd�dJ„Zc	 	 d�dK„Zd	 d£	 	 	 d¤dL„Zed�dM„Zfd�dN„Zgd�dO„Zhd¥d�dP„Zi	 	 d�dQ„Zj	 	 	 	 	 	 d¦dR„Zkd§dS„Zld�dT„ZmdU„ ZndV„ Zod�dW„Zp	 d”	 	 	 	 	 	 	 d¨dX„Zq	 d”	 	 	 	 	 	 	 	 	 	 	 d©dY„Zr	 d”	 d�dZ„Zsd[„ Ztd�d\„Zud�d]„Zvd^„ Zwd�d_„Zxd`„ Zy	 d�	 	 	 	 	 dªda„Zzd€d�db„Z{d€d�dc„Z|d�dd„Z} e3dedfdgdg«      d�dh„«       Z~	 	 d�di„Z	 	 	 	 	 	 	 	 	 	 	 	 d«dj„Z€e�j                  �j                  e�j                  �j                  e�j                  �j                  e�j                  �j
                  e�j                  �j                  e�j                  �j                  e�j                  �j                  e�j                  �j                  e�j                  �j                  e�j                  �j                  e�j                  �j                  e�j                  �j                  e�j                  �j                  dkœZ�dldmdndodpdqdrdsdtdudvdwdxdydzd{œZ�e�j"                  e�j$                  e�j&                  e�j(                  e�j*                  e�j,                  e�j.                  e�j0                  e�j2                  e�j4                  e�j6                  e�j8                  e�j:                  e�j<                  e�j>                  e�j@                  gZ¡e�j"                  e�j$                  e�j0                  e�j.                  e�j,                  e�j(                  e�j*                  e�j&                  e�j8                  e�j4                  e�j6                  e�j:                  e�j<                  e�j>                  e�j@                  d|œZ¢e�dl   e�dm   e�ds   e�dq   e�dr   e�dp   e�do   e�dn   e�d}   e�du   e�dv   e�dt   e�dm   e�dl   e�dq   e�dz   gZ£ e¤«       Z¥d~e¦d<   y)¬é    )ÚannotationsN)ÚAnyÚCallableÚLiteralÚNoReturnÚSequenceÚTypeVar)ÚConcatenateÚ	ParamSpec)Ú_C)Ú
_constantsÚ_type_utilsÚerrorsÚutils)ÚGLOBALS)Ú	jit_utils)ÚNumberÚ_TÚ_UÚ_P)	ÚvÚiÚisÚfÚfsÚbÚsÚtÚnonec           	     ón  — |dk(  r| S |dk(  st        | «      s| S | j                  «       }|j                  «       ry |j                  «       dk(  r¬t	        |d«      }|dk(  rt        |«      S |dk(  rt        |«      S |dk(  rt        |«      S |dk(  rt        |«      S |d	k(  r|S |d
k(  r|D �cg c]  }t        |«      ‘Œ c}S |dk(  r|D �cg c]  }t        |«      ‘Œ c}S t        j                  d|› d|› d�| «      ‚|j                  «       dk(  rÁ|d
k(  r¢|j                  «       D ]B  }|j                  «       }|j                  «       dk7  sŒ't        j                  d|› d|› d�| «      ‚ | j                  «       j                  «       D �cg c]%  }t        t	        |j                  «       d«      «      ‘Œ' c}S t        j                  d|› d�| «      ‚|�|€(t        j                  d|j                  «       › d�| «      ‚t        j                  d|› d|› d|j                  «       › d�| «      ‚c c}w c c}w c c}w )Nr   r   úonnx::ConstantÚvaluer   r   r   r   r   r   r   z5ONNX symbolic does not understand the Constant node 'z' specified with descriptor 'ú'.úprim::ListConstructzFailed to export a node 'z' (in list node z_) because it is not constant. Please try to make things (e.g. kernel sizes) static if possible.zbONNX symbolic does not know how to unpack the ListConstruct node that is not a list of integers: 'ú'z*Expected node type 'onnx::Constant', got 'z2Expected node type 'onnx::Constant' for argument 'z' of node 'z', got ')Ú	_is_valueÚnodeÚ
mustBeNoneÚkindÚ	_node_getÚintÚfloatÚboolÚstrr   ÚSymbolicValueErrorÚinputs)r"   ÚdescÚarg_nameÚ	node_namer'   Únode_valr   Úelement_nodes           ú]/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/onnx/symbolic_helper.pyÚ
_parse_argr7   /   sj  € ð ˆv‚~ØˆØˆs‚{œ) EÔ*Øˆà�:‰:‹<€DØ‡�ÔØØ‡y�yƒ{Ð&Ò&Ü˜T 7Ó+ˆØ�3Š;Ü�x“=Ð Ø�SŠ[Ü˜“?Ð"Ø�SŠ[Ü˜“>Ð!Ø�SŠ[Ü�x“=Ð Ø�SŠ[ØˆOØ�TŠ\Ø$,Ö-˜q”C˜•FÒ-Ð-Ø�TŠ\Ø&.Ö/ ”E˜!•HÒ/Ð/ä×+Ñ+ØGÈÀvð N.Ø.2¨V°2ð7àóð ð
 
�‰‹Ð-Ò	-Ø�4Š<Ø—[‘[“]ò 	�Ø Ÿv™v›x�Ø×$Ñ$Ó&Ð*:Ó:Ü ×3Ñ3Ø3°L°>ð B)Ø)-¨ð /\ð]ð óð ð	ð @E¿z¹z»|×?RÑ?RÓ?TÖU¸!”Cœ	 !§&¡&£(¨GÓ4Õ5ÒUÐUä×+Ñ+ð/Ø/3¨f°Að7àóð ð Ð˜9Ð,Ü×'Ñ'Ø8¸¿¹»¸ÀRÐHØó
ð 	
ô
 ×
#Ñ
#ð	Ø!˜
 +¨i¨[¸ÀÇÁÃÀÈRð	Qàóð ùòG .ùâ/ùò& Vs   Â*H(ÃH-Æ*H2c                ó€   — t        | t        j                  «      sJ ‚| j                  |«      } t	        | |«      |«      S )z@Gets attributes of a node which is polymorphic over return type.)Ú
isinstancer   ÚNodeÚkindOfÚgetattr)r'   ÚkeyÚsels      r6   r*   r*   t   s8   € ä�dœBŸG™GÔ$Ð$Ð$Ø
�+‰+�cÓ
€CØŒ7�4˜Ó˜cÓ"Ð"ó    c                óD   — | j                  «       j                  «       dk(  S )z$Whether a Value is an ONNX constant.r!   ©r'   r)   ©r"   s    r6   Ú_is_onnx_constantrC   {   s   € à�:‰:‹<×ÑÓÐ"2Ñ2Ð2r?   c                óh   — t        | t        j                  «      rt        | «      rt	        | |«      S | S ©N)r9   r   ÚValuerC   r7   )r"   Ú
descriptors     r6   Ú_maybe_get_constrH   €   s,   € ô �%œŸ™Ô"Ô'8¸Ô'?Ü˜% Ó,Ð,Ø€Lr?   c                ót   — t        | d«      }t        |t        j                  «      r|j                  dk(  r|S | S )Nr   © )rH   r9   ÚtorchÚTensorÚshape)r"   Úvalue_ts     r6   Ú_maybe_get_scalarrO   Œ   s1   € Ü˜u cÓ*€GÜ�'œ5Ÿ<™<Ô(¨W¯]©]¸bÒ-@ØˆØ€Lr?   c                ój   — t        | «      st        j                  d|› d| › d�| «      ‚t        | |«      S )Nz0ONNX symbolic expected a constant value of the 'z' argument, got 'r%   )Ú_is_constantr   r/   r7   )r"   r1   r2   s      r6   Ú
_get_constrR   “   sH   € Ü˜ÔÜ×'Ñ'Ø>¸x¸jð IØ�7˜!ðàó
ð 	
ô
 �e˜TÓ"Ð"r?   c                ó®   — | j                  «       }|j                  «       dk7  rt        j                  d|› d�| «      ‚t	        |j                  «       «      S )Nr$   z;ONNX symbolic expected node type prim::ListConstruct, got 'r#   )r'   r)   r   r/   Úlistr0   )Ú
list_valueÚ	list_nodes     r6   Ú_unpack_listrW   �   s[   € Ø—‘Ó!€IØ‡~�~ÓÐ0Ò0Ü×'Ñ'ðØ�;˜bð"àó
ð 	
ô
 �	× Ñ Ó"Ó#Ð#r?   c                óº   — | j                  «       }t        | «      s(t        j                  d|j	                  «       › d�| «      ‚t        |j                  «       «      S )Nz>ONNX symbolic expected node type 'prim::TupleConstruct', got 'r#   )r'   Ú_is_tuple_constructr   r/   r)   Útupler0   )Útuple_valueÚ
tuple_nodes     r6   Ú_unpack_tupler]   ¨   s]   € Ø×!Ñ!Ó#€JÜ˜{Ô+Ü×'Ñ'ðØ—O‘OÓ%Ð& bð*àó
ð 	
ô
 �×"Ñ"Ó$Ó%Ð%r?   c                ó   — | j                  «       }t        | «      s;t        j                  d|› d|j	                  «       › dt
        j                  › �| «      ‚t        |j                  «       «      }t        |«      dk(  st        |«      dk(  sJ ‚|S )zöUnpacks a quantized tensor into a tuple of tensor and scale/zero_point.
    Args:
        tuple_value: A tuple of tensor, scale, zero_point, and optionally axis.
    Returns:
        A tuple of tensor, scale, zero_point, and optionally axis.
    z&ONNX symbolic expected the output of `zQ` to be a quantized tensor. Is this likely due to missing support for quantized `z`. Please create an issue on é   é   )
r'   rY   r   r/   r)   r   ÚPYTORCH_GITHUB_ISSUES_URLrZ   r0   Úlen)r[   r\   Úunpackeds      r6   Ú_unpack_quantized_tensorrd   ³   s—   € ð ×!Ñ!Ó#€Jä˜{Ô+Ü×'Ñ'Ø4°Z°Lð Aà—‘Ó!Ð"Ð"?Ä
×@dÑ@dÐ?eðgð ó	
ð 	
ô �Z×&Ñ&Ó(Ó)€HÜˆx‹=˜AÒ¤ X£°!Ò!3Ð3Ð3Ø€Or?   c                ó^   — t        | «      xr! | j                  «       j                  «       dk(  S )Nr$   ©r&   r'   r)   )rU   s    r6   Ú_is_packed_listrg   Ê   s(   € Ü�ZÓ ÒV Z§_¡_Ó%6×%;Ñ%;Ó%=ÐAVÑ%VÐVr?   c                 ó   ‡ — 	 	 	 	 dˆ fd„}|S )aå  A decorator which converts args from torch._C.Value to built-in types.

    For example:

    ```
    @parse_args('v', 'i', 'fs')
    foo(g, a, b, c):
        assert isinstance(a, torch._C.Value)
        assert isinstance(b, int)
        assert isinstance(c, list)
        assert isinstance(c[0], float)
    ```

    Args:
        arg_descriptors: list of str, where each element is
            a string that specifies the type to convert to. Valid descriptors:
            "v": no conversion, keep torch._C.Value.
            "i": int
            "is": list of int
            "f": float
            "fs": list of float
            "b": bool
            "s": str
            "t": torch.Tensor
            "none": the variable is unused
    c                óV   •‡ — ‰‰ _         t        j                  ‰ «      dˆˆ fd„«       }|S )Nc                ó‚  •— d}t        ‰
«      t        |«      k\  s/J dt        |«      › dt        ‰
«      › d‰j                  › d|› �«       ‚	 t        j                  ‰«      }t	        |j
                  j                  «       «      dd  }‰j                  }t        |‰
|«      D ���	cg c]  \  }}}	t        |||	|«      ‘Œ }}}}	t        |«      dk  sJ d‰j                  › d|› �«       ‚t        |«      dk(  rd	|v sJ d‰j                  › d
|› �«       ‚ ‰| g|¢­i |¤ŽS # t        $ r d gt        |«      z  }d }Y Œ¤w xY wc c}	}}w )NzÛIf you believe this is not due to custom symbolic implementation within your code or an external library, please file an issue at https://github.com/pytorch/pytorch/issues/new?template=bug-report.yml to report this bug.z,A mismatch between the number of arguments (z) and their descriptors (z") was found at symbolic function 'z'. é   zSymbolic function z4's '**kwargs' can contain a single key/value entry. Ú_outputsz='s '**kwargs' can only contain '_outputs' key at '**kwargs'. )
rb   Ú__name__ÚinspectÚ	signaturerT   Ú
parametersÚkeysÚ	ExceptionÚzipr7   )ÚgÚargsÚkwargsÚFILE_BUG_MSGÚsigÚ	arg_namesÚfn_nameÚargÚarg_descr2   Úarg_descriptorsÚfns             €€r6   Úwrapperz.parse_args.<locals>.decorator.<locals>.wrapperñ   s•  ø€ ðlð ô
 �Ó'¬3¨t«9Ò4ð Ø>¼sÀ4»y¸kð J&Ü&)¨/Ó&:Ð%;Ð;]Ð^`×^iÑ^iÐ]jÐjmØ�.ð"óÐ4ðÜ×'Ñ'¨Ó+�Ü  §¡×!4Ñ!4Ó!6Ó7¸¸Ð;�	ØŸ+™+�ô 03°4¸È)Ó/T÷ð á+�C˜ 8ô ˜3 ¨(°GÕ<ðˆDò ô
 �v“; !Ò#ð Ø$ R§[¡[ Mð 2$à�.ð"óÐ#ô �6‹{˜aÒØ! VÑ+ð Ø(¨¯©¨ð 65à#�nð&óÐ+ñ
 �aÐ)˜$Ò) &Ñ)Ð)øô- ò ð "˜F¤S¨£YÑ.�	Ø’ð	üô
s   ÁAD Â#D:ÄD7Ä6D7)rt   r   ru   z_P.argsrv   z	_P.kwargsÚreturnr   )Ú_arg_descriptorsÚ	functoolsÚwraps)r~   r   r}   s   ` €r6   Ú	decoratorzparse_args.<locals>.decoratorì   s0   ù€ ð .ˆÔä	�‰˜Ó	õ'	*ó 
ð'	*ðR ˆr?   )r~   ú"Callable[_Concatenate[_U, _P], _T]r€   r…   rJ   )r}   r„   s   ` r6   Ú
parse_argsr†   Î   s!   ø€ ð</Ø.ð/à	+õ/ðb Ðr?   T)ÚscaleÚ
zero_pointÚquantize_outputc                ó   ‡ ‡‡‡— ˆˆˆ ˆfd„}|S )a  A decorator which extends support for quantized version of the base operator.

    Quantization is detected by examining the arguments that are annotated by
    `arg_q_descriptors`.

    If quantization is detected, the base operator symbolic function will be wrapped with
    argument de-quantization and output quantization.

    Otherwise, only the base symbolic function will be invoked.

    For example:

    ```
    @quantized_args(True, False)
    def foo(g, x, y):
        return x + y
    ```

    is equivalent to

    ```
    def q_foo(g, x, y):
        if is_quantized_tensor(x):
            x = dequantize(x)
            out = foo(g, x, y)
            return quantize(out)
        else:
            return foo(g, x, y)
    ```

    Args:
        arg_q_descriptors: A sequence of bool, where each element represents if the
          argument is QTensor for quantized version of this operator. It defaults
          to False for unspecified (variable length) arguments.
        scale: Quantized output scale. If None, derive from
          the first quantized input scale.
        zero_point: Quantized output zero point. If None,
          derive from the first quantized input zero point.
        quantize_output: If True, quantize the output of the base operator. Default is True
    c                óL   •‡ — t        j                  ‰ «      ˆˆ ˆˆˆfd„«       }|S )Nc                ó
  •— ‰�'| j                  dt        j                  ‰«      ¬«      }nd }‰�'| j                  dt        j                  ‰«      ¬«      }nd }‰dt        |«      t        ‰«      z
  z  z   }t	        t        ||«      «      }d„ }g }|D ]d  \  }	}
t        |
«      r<|
j                  «       j                  «       D ]  }|j                   ||	|«      «       Œ ŒM|j                   ||	|
«      «       Œf t        |«      s ‰| g|¢­i |¤ŽS g }|D ]¿  \  }	}
 ||	|
«      r,t        | |
«      \  }}}}|j                  |«       |€|}|�Œ8|}Œ;t        |
«      ri|
j                  «       j                  «       D ]6  } ||	|«      sŒt        | |«      \  }}}}|€|}|€|}|j                  |«       Œ8 |j                  |
«       Œ¯|j                  |
«       ŒÁ  ‰| g|¢­i |¤Ž}|€J d«       ‚|€J d«       ‚‰rt        | |||«      S |S )NÚConstant©rN   )Fc                ó:   — | xr t        |«      xr t        |«      S rE   )r&   rY   )rG   r{   s     r6   Ú_is_arg_quantizedzMquantized_args.<locals>.decorator.<locals>.wrapper.<locals>._is_arg_quantizedc  s   € Ø!ÒQ¤i°£nÒQÔ9LÈSÓ9QÐQr?   z-Bug: Scale must be set for quantized operatorz2Bug: Zero point must be set for quantized operator)ÚoprK   Útensorrb   rZ   rs   rg   r'   r0   ÚappendÚanyÚdequantize_helperÚreplaceAllUsesWithÚquantize_helper)rt   ru   rv   Ú_scaleÚ_zero_pointÚarg_q_descriptors_extendedÚdescriptor_argsr�   Úis_quantizedrG   r{   Ú	arg_inputÚnon_quantized_argsÚdequantized_argÚ	arg_scaleÚarg_zero_pointÚ_ÚoutputÚarg_q_descriptorsr~   r‰   r‡   rˆ   s                     €€€€€r6   r   z2quantized_args.<locals>.decorator.<locals>.wrapperP  sw  ø€ ð Ð ØŸ™˜j´%·,±,¸uÓ2E˜ÓF‘à�ØÐ%ØŸd™d :´u·|±|ÀJÓ7O˜dÓP‘à"�ð *;¸XÜ�D“	œCÐ 1Ó2Ñ2ñ>ñ *Ð&ô $¤CÐ(BÀDÓ$IÓJˆOòRð ˆLØ#2ò L‘�
˜Cä" 3Ô'Ø%(§X¡X£Z×%6Ñ%6Ó%8ò V˜	Ø$×+Ñ+Ñ,=¸jÈ)Ó,TÕUñVð !×'Ñ'Ñ(9¸*ÀcÓ(JÕKðLô �|Ô$Ù˜!Ð-˜dÒ- fÑ-Ð-ð "$ÐØ#2ò  3‘�
˜CÙ$ Z°Ô5äDUØ˜3óEÑA�O Y°Àð '×-Ñ-¨oÔ>à�~Ø!*˜Ø"Ñ*Ø&4™ä$ SÔ)Ø%(§X¡X£Z×%6Ñ%6Ó%8ò J˜	Ù,¨Z¸ÕCô !2°!°YÓ ?ñØ /Ø )Ø .Ø !ð  &˜~Ø)2 Ø*Ð2Ø.< Ø%×8Ñ8¸ÕIðJð '×-Ñ-¨cÕ2ð '×-Ñ-¨cÕ2ðA 3ñF ˜Ð9Ð.Ò9°&Ñ9ˆFàÐ%ÐVÐ'VÓVÐ%àÐ'ðDàCóDØ'ñ Ü& q¨&°&¸+ÓFÐFØˆMr?   ©r‚   rƒ   )r~   r   r¤   r‰   r‡   rˆ   s   ` €€€€r6   r„   z!quantized_args.<locals>.decoratorO  s(   ù€ Ü	�‰˜Ó	÷P	ó 
ðP	ðd ˆr?   rJ   )r‡   rˆ   r‰   r¤   r„   s   ```` r6   Úquantized_argsr¦      s   û€ ÷^Tðl Ðr?   c                óv   — t        | t        j                  «      r| j                  dk(  r| j	                  «       S y)z,Convert a scalar tensor into a Python value.rJ   N)r9   rK   rL   rM   Úitem©Úxs    r6   Ú_scalarr«   ¨  s(   € ä�!”U—\‘\Ô" q§w¡w°"¢}Ø�v‰v‹xˆØr?   c                óF  — t        | t        j                  «      r| S t        j                  j                  |t        j                  j                  «      }|t        j                  j                  k7  r/|j                  «       j                  «       } t        | |«      «       S | S )zÔ
    Convert self into the same type of tensor, as necessary.
    We only support implicit casting for scalars, so we never
    actually need to insert an ONNX cast operator here; just
    fix up the scalar.
    )
r9   r   rF   r   ÚJitScalarTypeÚ
from_valueÚ	UNDEFINEDÚscalar_nameÚlowerr<   )Úselfr’   Úscalar_typeÚtys       r6   Ú_if_scalar_type_asrµ   ¯  s‚   € ô �$œŸ™Ô!Øˆä×+Ñ+×6Ñ6Ø”×)Ñ)×3Ñ3ó€Kð ”k×/Ñ/×9Ñ9Ò9Ø×$Ñ$Ó&×,Ñ,Ó.ˆØ Œw�t˜RÓ Ó"Ð"Ø€Kr?   c                ó‚   — | d u xs: t        | t        j                  «      r| j                  «       j	                  «       S dS ©NF)r9   r   rF   r'   r(   r©   s    r6   Ú_is_noner¸   Â  s2   € Ø�ˆ9ÒU´*¸QÄÇÁÔ2I˜Ÿ™›×,Ñ,Ó.ÐUÈuÐUr?   c                ó6   — t        | t        j                  «      S rE   )r9   r   rF   r©   s    r6   r&   r&   Æ  s   € Ü�aœŸ™Ó"Ð"r?   c                ó^   — t        | «       xs  | j                  «       j                  «       dv S )N>   r!   úprim::Constantrf   rB   s    r6   rQ   rQ   Ê  s2   € Ü˜ÓÐò  5§:¡:£<×#4Ñ#4Ó#6ð ;ð $ð r?   c                óx   — | j                  «       j                  t        j                  j	                  «       «      S rE   )ÚtypeÚisSubtypeOfr   Ú
TensorTypeÚgetr©   s    r6   Ú
_is_tensorrÁ   Ñ  s&   € Ø�6‰6‹8×Ñ¤§¡× 1Ñ 1Ó 3Ó4Ð4r?   c                ó<   — t        | t        j                  «      r| S y rE   )r9   r   ÚListType)Újit_types    r6   Ú_as_list_typerÅ   Ö  s   € Ü�(œBŸK™KÔ(ØˆØr?   c                ó8   — t        | j                  «       «      d uS rE   )rÅ   r½   r©   s    r6   Ú_is_listrÇ   Ü  s   € Ü˜Ÿ™›Ó"¨$Ð.Ð.r?   c                óŠ   — t        | j                  «       «      }|€yt        |j                  «       t        j
                  «      S r·   )rÅ   r½   r9   ÚgetElementTyper   r¿   ©rª   Úx_types     r6   Ú_is_tensor_listrÌ   à  s4   € Ü˜1Ÿ6™6›8Ó$€FØ€~ØÜ�f×+Ñ+Ó-¬r¯}©}Ó=Ð=r?   c                ó˜   — t        | j                  «       «      }|€yt        j                  j	                  | «      }|j                  «       S )z±Checks if x is a scalar list, for example: List[float], List[int].

    Besides checking the type is ListType, we also check if the data type is
    a valid ONNX data type.
    F)rÅ   r½   r   r­   r®   Úonnx_compatible)rª   rË   r³   s      r6   Ú_is_scalar_listrÏ   ç  sA   € ô ˜1Ÿ6™6›8Ó$€FØ€~ØÜ×+Ñ+×6Ñ6°qÓ9€KØ×&Ñ&Ó(Ð(r?   c                óD   — | j                  «       j                  «       dk(  S )Núprim::TupleConstructrA   r©   s    r6   rY   rY   ô  s   € Ø�6‰6‹8�=‰=‹?Ð4Ñ4Ð4r?   c                ó&  — t        | «      sJ ‚t        j                  j                  | t        j                  j                  «      t        j                  j
                  t        j                  j                  t        j                  j                  hv S rE   )r&   r   r­   r®   r¯   Ú	COMPLEX32Ú	COMPLEX64Ú
COMPLEX128r©   s    r6   Úis_complex_valuerÖ   ø  sq   € Ü�QŒ<Ðˆ<Ü×$Ñ$×/Ñ/Ø	Œ;×$Ñ$×.Ñ.óô 	×!Ñ!×+Ñ+Ü×!Ñ!×+Ñ+Ü×!Ñ!×,Ñ,ð
ðð r?   c                óÂ   — t        | «      r| j                  «       €y | j                  «       }t        j                  t        j
                  |«      }|j                  «       S rE   )rÁ   r½   ÚtypingÚcastr   r¿   ÚdimrÊ   s     r6   Ú_get_tensor_rankrÛ     sB   € Ü�aŒ=˜AŸF™F›HÐ,ØØ�V‰V‹X€FÜ�[‰[œŸ™¨Ó/€FØ�:‰:‹<Ðr?   c                óæ   — t        | «      r| j                  «       €y | j                  «       }t        j                  t        j
                  |«      }|r|j                  «       S |j                  «       S rE   )rÁ   r½   rØ   rÙ   r   r¿   ÚvaryingSizesÚsizes)rª   Úallow_nonstaticrË   s      r6   Ú_get_tensor_sizesrà     sX   € Ü�aŒ=˜AŸF™F›HÐ,ØØ�V‰V‹X€FÜ�[‰[œŸ™¨Ó/€FÙð ×"Ñ"Ó$Ð$ð �<‰<‹>Ðr?   c                ó*   — t        | «      }|r||   S d S rE   )rà   )rª   rÚ   rÞ   s      r6   Ú_get_tensor_dim_sizerâ     s   € Ü˜aÓ €EÙˆ5�‰:Ð( DÐ(r?   c                ó˜   — |dk(  rt        | «      }|€J ‚||z   S |€.t        | «      }|€J ‚t        |«      D ]  \  }}|€Œ	|dk(  sŒ|c S  |S )Néÿÿÿÿr_   )rÛ   rà   Ú	enumerate)rª   rÚ   Útensor_rankrÞ   ÚindexÚsizes         r6   Ú_get_dim_for_crossré     su   € Ø
ˆb‚yÜ& qÓ)ˆØÐ&Ð&Ð&Ø�[Ñ Ð à
€{Ü! !Ó$ˆØÐ Ð Ð Ü$ UÓ+ò 	‰KˆE�4ØÑ D¨A£IØ’ð	ð €Jr?   c                ó~   — t         j                  t        j                  j                  k(  rt        | › d|› �|«       y y )Nz, )r   Úoperator_export_typeÚ_C_onnxÚOperatorExportTypesÚONNXÚ_onnx_unsupported)r‘   Úmsgr"   s      r6   Ú_unimplementedrñ   -  s6   € ä×#Ñ#¤w×'BÑ'B×'GÑ'GÒGÜ˜R˜D  3 %˜.¨%Õ0ð Hr?   c                ó¸   — d| › dt         j                  › �}t        |t        j                  «      rt        j                  ||«      ‚t        j                  |«      ‚)Nz%Unsupported: ONNX export of operator zR. Please feel free to request support or submit a pull request on PyTorch GitHub: )r   ra   r9   r   rF   r   r/   ÚOnnxExporterError)Úop_namer"   Úmessages      r6   rï   rï   3  sa   € à
/°¨yð 9ä(×BÑBÐCð	Eð ô
 �%œŸ™Ô"Ü×'Ñ'ØØó
ð 	
ô ×
"Ñ
" 7Ó
+Ð+r?   c                ó¤   — d| › d|› d|› d�}t        |t        j                  «      rt        j                  ||«      ‚t        j
                  |«      ‚)NúUnsupported: ONNX export of ú
 in opset ú. Please try opset version ú.©r9   r   rF   r   r/   ró   )rô   Úcurrent_opsetÚsupported_opsetr"   rõ   s        r6   Ú_onnx_opset_unsupportedrþ   A  se   € ð ' w i¨z¸-¸ð I$Ø$3Ð#4°Að	7ð ô �%œŸ™Ô"Ü×'Ñ'ØØó
ð 	
ô ×
"Ñ
" 7Ó
+Ð+r?   c           	     óª   — d| › d|› d|› d|› d�	}t        |t        j                  «      rt        j                  ||«      ‚t        j
                  |«      ‚)Nr÷   rø   z. rù   rú   rû   )rô   rü   rý   Úreasonr"   rõ   s         r6   Ú _onnx_opset_unsupported_detailedr  S  sm   € ð ' w ið 0Ø�˜r & Ð)DÀ_ÐDUÐUVð	Xð ô �%œŸ™Ô"Ü×'Ñ'ØØó
ð 	
ô ×
"Ñ
" 7Ó
+Ð+r?   c                ó   ‡ — ˆ fd„}|S )Nc                 óX   •— t        j                  d‰› dt        j                  › d�«      ‚)NzONNX export failed on z%, which is not implemented for opset z*. Try exporting with other opset versions.)r   ró   r   Úexport_onnx_opset_version)ru   rv   Únames     €r6   Úsymbolic_fnz)_block_list_in_opset.<locals>.symbolic_fng  s6   ø€ Ü×&Ñ&Ø$ T FÐ*OÜ×0Ñ0Ð1ð 27ð7ó
ð 	
r?   rJ   )r  r  s   ` r6   Ú_block_list_in_opsetr  f  s   ø€ ô
ð Ðr?   c                 óÄ   — | D ][  }t         j                  j                  |t         j                  j                  «      }|t         j                  j                  k7  sŒY|c S  y rE   )r   r­   r®   r¯   )ru   r{   r³   s      r6   Ú_try_get_scalar_typer	  q  sY   € Øò ˆÜ!×/Ñ/×:Ñ:Ø”×*Ñ*×4Ñ4ó
ˆð œ+×3Ñ3×=Ñ=Ó=ØÒðð r?   c                 óp  — t         j                  j                  }| D �cg c]  }t        |«      ‘Œ }}t	        |«      dk(  r|S t	        |«      dk(  r|d   S |d   j                  «       }|D ]&  }t        j                  ||j                  «       «      }Œ( t         j                  j                  |«      S c c}w )Nr   rk   )	r   r­   r¯   r	  rb   ÚdtyperK   Úpromote_typesÚ
from_dtype)ru   Úundefr{   Ú	jit_typesÚ	new_dtyper   s         r6   Ú_type_promote_from_valuesr  {  s¨   € Ü×%Ñ%×/Ñ/€EØ6:Ö;¨sÔ% cÕ*Ð;€IÐ;Ü
ˆ9ƒ~˜ÒØˆÜ
ˆ9ƒ~˜ÒØ˜‰|ÐØ˜!‘×"Ñ"Ó$€IØò >ˆÜ×'Ñ'¨	°1·7±7³9Ó=‰	ð>ä×$Ñ$×/Ñ/°	Ó:Ð:ùò <s   ŸB3c                óÀ   — t         j                  j                  |t         j                  j                  «      |k7  r"| j	                  d||j                  «       ¬«      S |S ©NÚCast©Úto_i)r   r­   r®   r¯   r‘   Ú	onnx_type)rt   r"   rÄ   s      r6   Ú_maybe_cast_to_typer  ˆ  s_   € ô 	×!Ñ!×,Ñ,¨U´K×4MÑ4M×4WÑ4WÓXØò	ð �t‰tØØØ×#Ñ#Ó%ð ó 
ð 	
ð
 €Lr?   c           
     óh  — t        |«      }t        |«      }t        |«      s(| j                  dt	        j
                  |g«      ¬«      }n;|�9|r7|dk(  r2t        | || j                  dt	        j
                  dg«      ¬«      «      }t        j                  j                  |t        j                  j                  «      }|t        j                  j                  t        j                  j                  hvr,| j                  d|t        j                  j                  ¬«      }| j                  d|||¬«      S )	Nr�   rŽ   r   rk   r  r  ÚGather©Úaxis_i)rO   rÛ   r&   r‘   rK   Ú
LongTensorÚ_reshape_helperr   r­   r®   r¯   ÚINT64ÚINTrì   ÚTensorProtoDataType)rt   r²   rÚ   rç   Úapply_reshapeÚindex_constÚ	index_dimÚindex_scalar_types           r6   Ú_select_helperr&  —  s  € Ü# EÓ*€KÜ  Ó'€IÜ�[Ô!à—‘�Z¬×)9Ñ)9¸;¸-Ó)H�ÓI‰Ø	Ð	¡=Ø˜Š>ä#Ø�5˜!Ÿ$™$˜z´5×3CÑ3CÀQÀCÓ3H˜$ÓIóˆEô $×1Ñ1×<Ñ<ØŒ{×(Ñ(×2Ñ2óÐð Ü×!Ñ!×'Ñ'Ü×!Ñ!×%Ñ%ð!ñ ð —‘�V˜U¬×)DÑ)D×)JÑ)J�ÓKˆØ�4‰4�˜$ ¨cˆ4Ó2Ð2r?   c                ój   — | j                   dk  rddlm}  || ||||«      S ddlm}  || |||||«      S )Né	   r   )Ú_slice)ÚopsetÚtorch.onnx.symbolic_opset9r)  Útorch.onnx.symbolic_opset10)rt   ÚinputÚaxesÚstartsÚendsÚstepsÚ_slice9Ú_slice10s           r6   Ú_slice_helperr4  ¯  s=   € ð 	‡w�w�!‚|Ý@á�q˜%  v¨tÓ4Ð4åBá˜˜5 $¨°°eÓ<Ð<r?   c                ó>  — t         j                  j                  | t         j                  j                  «      t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  hv S rE   )r   r­   r®   r¯   ÚFLOATÚDOUBLEÚHALFÚBFLOAT16rB   s    r6   Ú_is_fpr:  Á  st   € Ü×$Ñ$×/Ñ/ØŒ{×(Ñ(×2Ñ2óô 	×!Ñ!×'Ñ'Ü×!Ñ!×(Ñ(Ü×!Ñ!×&Ñ&Ü×!Ñ!×*Ñ*ð	
ðð r?   c                ó¨   — t         j                  j                  | t         j                  j                  «      t         j                  j                  hv S rE   )r   r­   r®   r¯   ÚBOOLrB   s    r6   Ú_is_boolr=  Ì  sC   € Ü×$Ñ$×/Ñ/ØŒ{×(Ñ(×2Ñ2óä
×
#Ñ
#×
(Ñ
(Ð	)ð*ð *r?   c                ó  — t        |t        j                  «      rJ ‚t        |t        «      r6| j	                  dt        j
                  |t        j                  ¬«      ¬«      S | j	                  dt        j
                  |«      ¬«      S )a  Creates a wrapped number based on https://github.com/pytorch/pytorch/issues/9515.

    A Tensor is a considered a "wrapped number" if it is
    auto-wrapped from a C++ or Python number type. Integer types are
    wrapped as 0-dim int64 tensors and floating-point types are
    wrapped as 0-dim double tensors.

    The input to this function is constant value. If the data type
    is a floating point type, it is converted to a 0-dim double
    tensor, else it is converted to a 0-dim tensor of its original type
    r�   ©r  rŽ   )r9   rK   rL   r,   r‘   r’   Údouble)rt   Úscalars     r6   Ú_generate_wrapped_numberrB  Ò  s`   € ô ˜&¤%§,¡,Ô/Ð/Ð/Ü�&œ%Ô Ø�t‰t�J¬¯©°VÄ5Ç<Á<Ô(PˆtÓQÐQØ�4‰4�
¤E§L¡L°Ó$8ˆ4Ó9Ð9r?   c                óf  — |�t        dd«       | j                  d|«      }| j                  d|| j                  dt        j                  |gt        j                  ¬«      ¬«      «      }| j
                  dk  r$|st        dd	«       | j                  d
|||d¬«      S | j                  d
||||d¬«      S )NÚSortúOut parameter is not supportedÚShaper  r�   r?  rŽ   é
   úAscending is not supportedÚTopKé   ©r  Úoutputs)r  Ú	largest_irL  )rñ   r‘   rK   r’   Úint64r*  )rt   r-  rÚ   Ú	decendingÚoutÚshape_Ú	dim_size_s          r6   Ú_sort_helperrS  ä  s®   € Ø
€Ü�vÐ?Ô@Ø�T‰T�'˜5Ó!€FØ—‘ØØØ	�‰ˆZ¤§¡¨s¨e¼5¿;¹;Ô!GˆÓHó€Ið
 	‡w�w�"‚}ÙÜ˜6Ð#?Ô@Ø�t‰t�F˜E 9°SÀ!ˆtÓDÐDà�t‰tØ�E˜9¨S¸IÈqð ó 
ð 	
r?   c           
     óB  — |�t        dd«       t        |«      s8| j                  dt        j                  |gt        j
                  ¬«      ¬«      }n„t        | || j                  dt        j                  dg«      ¬«      «      }t        |«      t        j                  j                  k7  r,| j                  d|t        j                  j                  ¬«      }| j                  d	k  r$|st        dd
«       | j                  d|||d¬«      S | j                  d|||||d¬«      S )NrI  rE  r�   r?  rŽ   rk   r  r  rG  rH  rJ  rK  )r  rM  Úsorted_irL  )rñ   r&   r‘   rK   r’   rN  r  r	  r   r­   r  rì   r!  r*  )rt   r-  ÚkrÚ   ÚlargestÚsortedrP  s          r6   Ú_topk_helperrY  ÷  sõ   € ð €Ü�vÐ?Ô@Ü�QŒ<Ø�D‰D�¤U§\¡\°1°#¼U¿[¹[Ô%IˆDÓJ‰ä˜A˜q !§$¡$ z¼5¿<¹<ÈÈÓ;L $Ó"MÓNˆÜ Ó"¤k×&?Ñ&?×&EÑ&EÒEØ—‘�V˜Q¤W×%@Ñ%@×%FÑ%F�ÓGˆAØ‡w�w�"‚}ÙÜ˜6Ð#?Ô@Ø�t‰t�F˜E 1¨S¸!ˆtÓ<Ð<à�t‰tØ�E˜1 S°GÀfÐVWð ó 
ð 	
r?   c                ó`   — | j                   dk  rddlm}  || ||«      S ddlm}  || ||«      S )Né   r   )Últ)r*  Útorch.onnx.symbolic_opset8r\  r+  )rt   r-  ÚotherÚ_lt8Ú_lt9s        r6   Ú
_lt_helperra    s1   € Ø‡w�w�!‚|Ý9á�A�u˜eÓ$Ð$å9á�A�u˜eÓ$Ð$r?   c                ó¢   — t         j                  dk\  rdnd}t        j                  d|z   dz   t	        t         j                  «      z   dz   «       y )NrG  zonnx:Resizezonnx:Upsamplez(You are trying to export the model with z for ONNX opset version aœ  . This operator might cause results to not match the expected results by PyTorch.
ONNX's Upsample/Resize operator did not match Pytorch's Interpolation until opset 11. Attributes to determine how to transform the input were added in onnx:Resize in opset 11 to support Pytorch's behavior (like coordinate_transformation_mode and nearest_mode).
We recommend using opset 11 and above for models using this operator.)r   r  ÚwarningsÚwarnr.   )Úinterpolate_modeÚonnx_ops     r6   Ú_interpolate_warningrg    s]   € ä ×:Ñ:¸bÒ@‰Àoð ô ‡M�MØ2Ø
ñ	ðñ	ô ”×2Ñ2Ó3ñ	4ð7Pñ	Põ
r?   c                ól  — t        |d   «      rl| j                  dk\  rI| j                  dt        j                  |t        j
                  ¬«      ¬«      }| j                  d||«      S | j                  d||¬«      S | j                  dk  rt        j                  d|«      ‚| j                  d||d   «      S )	Nr   é   r�   r?  rŽ   Ú	Unsqueeze©Úaxes_iz<Opset version must be >= 13 for Unsqueeze with dynamic axes.)rQ   r*  r‘   rK   r’   Úlongr   r/   )rt   r-  rl  r.  s       r6   Ú_unsqueeze_helperrn  (  sž   € Ü�F˜1‘IÔØ�7‰7�bŠ=Ø—4‘4˜
¬E¯L©L¸ÄuÇzÁzÔ,R�4ÓSˆDØ—4‘4˜ U¨DÓ1Ð1Ø�t‰t�K ¨vˆtÓ6Ð6à‡w�w�‚|Ü×'Ñ'ØJÈEó
ð 	
ð �4‰4�˜U F¨1¡IÓ.Ð.r?   c                ó  — t        |d   «      rl| j                  dk\  rI| j                  dt        j                  |t        j
                  ¬«      ¬«      }| j                  d||«      S | j                  d||¬«      S | j                  dk  rt        j                  d|«      ‚|d   }t        |«      }|€J ‚|d	kD  rt        j                  d
|«      ‚|dk(  r!t        | |dg«      }| j                  d||«      S | j                  d||«      S )Nr   ri  r�   r?  rŽ   ÚSqueezerk  z:Opset version must be >= 13 for Squeeze with dynamic axes.rk   zCFor Squeeze axses as input, the axes rank must be one in ONNX spec.)
rQ   r*  r‘   rK   r’   rm  r   r/   rÛ   rn  )rt   r-  rl  r.  Úaxes_tÚ	axes_ranks         r6   Ú_squeeze_helperrs  6  s  € Ü�F˜1‘IÔØ�7‰7�bŠ=Ø—4‘4˜
¬E¯L©L¸ÄuÇzÁzÔ,R�4ÓSˆDØ—4‘4˜	 5¨$Ó/Ð/Ø�t‰t�I˜u¨VˆtÓ4Ð4à‡w�w�‚|Ü×'Ñ'ØHÈ%ó
ð 	
ð �A‰Y€FÜ  Ó(€IØÐ Ð Ð Ø�1‚}Ü×'Ñ'ØQÐSXó
ð 	
ð 
�aŠä" 1 f¨q¨cÓ2ˆØ�t‰t�I˜u fÓ-Ð-Ø�4‰4�	˜5 &Ó)Ð)r?   c                ó>  — t        |d«      }| j                  dk\  rn|rWt        |«      s6| j                  dt	        j
                  |t        j                  ¬«      ¬«      }| j                  d||||¬«      S | j                  d|||¬«      S | j                  d|||¬«      S )	Nr   ri  r�   r?  rŽ   Ú	ReduceSum)Ú
keepdims_iÚnoop_with_empty_axes_i©rl  rv  )rH   r*  r&   r‘   rK   r’   rm  )rt   r-  rl  rv  rw  s        r6   Ú_reducesum_helperry  O  s±   € ô " *¨cÓ2€JØ‡w�w�"‚}ÙÜ˜VÔ$ØŸ™Ø¬¯©°VÄ5Ç:Á:Ô(Nð ó �ð —4‘4ØØØØ%Ø'=ð ó ð ð �t‰tØØØ!Ø#9ð	 ó 
ð 	
ð �t‰t�K ¨vÀ*ˆtÓMÐMr?   c           	     ó>  — t        |d«      }t        |«      rëd}| j                  dt        j                  |t        j
                  ¬«      ¬«      }| j                  d|t        j                  j                  ¬«      }t        | | j                  d|«      d	gt        j                  g|g¬
«      }| j                  d|t        j                  j                  ¬«      }| j                  d||«      }| j                  d||d	¬«      }	|	S t        d	|«      D �
cg c]J  }
|
dk  rdn@t        |||
z
      «      t        |j                  «       j                  «       ||
z
      «      z  ‘ŒL }}
| j                  dt        j                   |t        j
                  ¬«      ¬«      }	|	S c c}
w )Nr   rJ  r�   r?  rŽ   r  r  rF  r   ©r.  r0  r/  ÚDivÚConcatr  ç      ð?)rH   r&   r‘   rK   ÚonesÚfloat32rì   r!  r6  r4  ÚsysÚmaxsizeÚranger,   r½   rÞ   r’   )rt   r-  Úoutput_sizerÚ   ÚoffsetÚoffsetsÚdividendÚdivisorÚ
scale_dimsÚscalesr   Úscales_constants               r6   Ú_interpolate_size_to_scalesrŒ  n  s{  € Ü" ;°Ó5€KÜ�ÔØˆØ—$‘$�z¬5¯:©:°fÄEÇMÁMÔ+R�$ÓSˆØ—4‘4˜ ´'×2MÑ2M×2SÑ2S�4ÓTˆÜØˆq�t‰t�G˜UÓ#¨1¨#´S·[±[°MÈ6È(ô
ˆð —$‘$�v˜w¬W×-HÑ-H×-NÑ-N�$ÓOˆØ—T‘T˜% ¨7Ó3ˆ
Ø—‘�h ¨¸A�Ó>ˆð €Mô ˜1˜c“]ö
ð
 ð �1Šuñ ä�{ S¨1¡W :Ñ.Ó/Ü�E—J‘J“L×&Ñ&Ó(¨3°©7¨Ñ4Ó5ñ6ñ6ð
ˆð 
ð —‘Ø¤§¡¨_ÄEÇMÁMÔ Rð ó 
ˆð €Mùò
s   ÄAFc           	     óN  — t        |d   d«      dk7  xr t        |d   «       }|sy | j                  dt        j                  dt        j
                  ¬«      ¬«      }| j                  dt        j                  t        |d   d«      «      ¬«      }| j                  d||d¬	«      }|S )
Nr   r   rä   r�   rJ  r?  rŽ   r}  r  )rH   r¸   r‘   rK   r  r€  r’   )rt   rŠ  Úavailable_scalesr†  Úscales_lists        r6   Ú$_interpolate_get_scales_if_availabler�  ˆ  s¥   € Ü'¨¨q©	°4Ó8¸BÑ>ò ÄxØˆq‰	óHð DÐñ Øà�d‰d�:¤u§z¡z°!¼5¿=¹=Ô'IˆdÓJ€GØ—$‘$ØœEŸL™LÔ)9¸&À¹)ÀTÓ)JÓKð ó €Kð �T‰T�(˜G [¸ˆTÓ;€FØ€Mr?   c                óP   — |dk(  rd }|dd  }n
|d   }|dd  }t        | |«      }||fS )NÚnearestr   rk   )r�  )rt   Úmoderu   Úalign_cornersrŠ  s        r6   Ú_get_interpolate_attributesr•  ˜  sE   € ØˆyÒØˆØ�a�b�‰à˜Q™ˆØ�a�b�ˆÜ1°!°VÓ<€FØ�=Ð Ð r?   c                óò  — | j                  dt        j                  dt        j                  ¬«      ¬«      }t	        |«      }t        |j                  «       t        j                  «      s|�|dkD  r| j                  d||d¬«      S t        | |dg«      }| j                  d|t        j                  j                  ¬	«      }t        |dz
  «      D �cg c]  }|‘Œ }} | j                   d|g|¢­d
diŽ}|S c c}w )Nr�   rJ  r?  rŽ   r   r}  r  r  r  r  )r‘   rK   r  r€  rÛ   r9   r½   r   rÃ   rn  rì   r!  r6  rƒ  )rt   Úscale_factorrÚ   r†  Úscale_factor_rankr   rŠ  s          r6   Ú_interpolate_get_scalesr™  £  sä   € Ø�d‰d�:¤u§z¡z°!¼5¿=¹=Ô'IˆdÓJ€GÜ(¨Ó6ÐÜ�,×#Ñ#Ó%¤r§{¡{Ô3ØÐ%Ð*;¸aÒ*?à�t‰t�H˜g |¸AˆtÓ>Ð>ä(¨¨L¸1¸#Ó>ˆØ—t‘tØ�L¤w×'BÑ'B×'HÑ'Hð ó 
ˆô ).¨c°A©g«Ö7 1’,Ð7ˆÐ7Ø�1—4‘4˜ 'Ð=¨FÒ=¸1Ñ=€LØÐùò 8s   Ã	C4c                ó’  — t        |d«      }d|v rd}d|v rd}t        |«       t        |d«      }t        |t        «      r|rt	        dd«      S |j                  «       j                  «       st	        dd«      S |j                  «       j                  «       }t        |«      st        | ||«      }||fS t        |«      s{t        |«      s^t        |d«      j                  «       d	k(  }|r?t        | |d	g«      }t        |d
z
  «      D �cg c]  }|‘Œ }} | j                  dg|¢­dd	iŽ}t        | |||«      }||fS t	        dd«      S c c}w )Nr   ÚlinearÚcubicr   Úinterpolatezalign_corners == Trueúmissing input shaper   r   rJ  r}  r  z.Both size and scales are None in __interpolate)rH   rg  r9   r-   rñ   r½   rÚ   r¸   r™  rg   rn  rƒ  r‘   rŒ  )	rt   r-  rè   r—  r“  r”  rÚ   Ú	is_scalarr   s	            r6   Ú _interpolate_get_scales_and_moder   ´  sX  € ô ˜D #Ó&€DØ�4ÑØˆØ�$�ØˆÜ˜Ôä$ ]°CÓ8€MÜ�-¤Ô&©=Ü˜mÐ-DÓEÐEà�:‰:‹<×ÑÔÜ˜mÐ-BÓCÐCØ
�*‰*‹,×
Ñ
Ó
€Cä�LÔ!Ü.¨q°,ÀÓDˆð ˜ÐÐô �dŒ^Ü˜tÔ$Ü(¨¨sÓ3×7Ñ7Ó9¸QÑ>ˆIÙÜ(¨¨D°1°#Ó6�Ü&+¨C°!©G£nÖ5 šÐ5�Ð5Ø�q—t‘t˜HÐ6 tÒ6°AÑ6�Ü2°1°e¸TÀ3ÓGˆð
 ˜ÐÐô ØÐKó
ð 	
ùò	 6s   Ä	Ec           
     ó¶  ‡ ‡— ˆ ˆfd„}t        |«      r°t        ‰ |‰ j                  dt        j                  dg«      ¬«      «      } ||dd¬«      }|ro‰ j                  d|«      }‰ j                  d|«      }	‰ j                  d	|	t        j                  d
gt        j
                  ¬«      ¬«      }
‰ j                  d||
«      }|S t        |d«      } ||||¬«      S )Nc                óx   •— ‰j                   dk\  r‰j                  ‰| ||d¬«      S ‰j                  ‰| ||¬«      S )Né   F)r  rv  Úselect_last_index_i©r  rv  )r*  r‘   )r-  r  rv  rt   rô   s      €€r6   Ú
op_wrapperz)_argmin_argmax_helper.<locals>.op_wrapperÞ  sL   ø€ Ø�7‰7�bŠ=Ø—4‘4ØØØØ%Ø$)ð ó ð ð �t‰t�G˜U¨6¸jˆtÓIÐIr?   r�   rä   rŽ   r   Fr¥  rF  ÚConstantOfShaperk   r?  ÚReshaper   )r¸   r  r‘   rK   r’   rN  r7   )rt   r-  rÚ   Úkeepdimrô   r¦  Ú	flattenedr£   Úinput_shapeÚinput_shape_shapeÚ	new_shapes   `   `      r6   Ú_argmin_argmax_helperr®  ×  sÐ   ù€ õ	Jô �„}Ü#Øˆu�a—d‘d˜:¬u¯|©|¸R¸DÓ/A�dÓBó
ˆ	ñ ˜I¨a¸EÔBˆÙØŸ$™$˜w¨Ó.ˆKØ !§¡ W¨kÓ :ÐØŸ™Ø!Ø!ÜŸ™ a S´·±Ô<ð ó ˆIð
 —T‘T˜) V¨YÓ7ˆFØˆä
�S˜#Ó
€CÙ�e C°GÔ<Ð<r?   c                ó2   ‡— t        ddd«      ˆfd„«       }|S )NTFc                óR  •— t        | ‰|«      \  }}t        |«      }‰dk(  rdn|rdnd}|�€| j                  d|«      }t        | |dgdgdg¬«      }| j                  d	|t        j
                  j                  ¬
«      }| j                  d||d¬«      }| j                  dk\  rt        | «      }	t        | «      }
nl| j                  dt        j                  g t        j                  ¬«      ¬«      }	| j                  dt        j                  g t        j                  ¬«      ¬«      }
| j                  d||	|
||d‰d¬«	      S | j                  dk\  rt        | «      }	n6| j                  dt        j                  g t        j                  ¬«      ¬«      }	| j                  d||	||d‰d¬«      S )Nr’  Ú
asymmetricr”  Ú
half_pixelrF  r   rJ  r{  r  r  r}  r  ri  r�   r?  rŽ   ÚResizeç      è¿Úfloor©Ú coordinate_transformation_mode_sÚcubic_coeff_a_fÚmode_sÚnearest_mode_s)r•  rO   r‘   r4  rì   r!  r  r*  Ú"_optional_input_placeholder_tensorrK   r’   r€  )rt   r-  r„  ru   rŠ  r”  Úcoordinate_transformation_modeÚ
input_sizeÚinput_size_begÚ	empty_roiÚempty_scalesre  s              €r6   r  z(_interpolate_helper.<locals>.symbolic_fnþ  sÅ  ø€ ä ;¸AÐ?OÐQUÓ VÑˆ�Ü)¨-Ó8ˆð   9Ò,ñ ñ ñ !àð 	'ð ‰>ØŸ™˜g uÓ-ˆJÜ*Ø�: Q C¨q¨c¸1¸#ôˆNð Ÿ$™$Ø˜¬'×*EÑ*E×*KÑ*Kð ó ˆKð Ÿ$™$˜x¨¸ÈQ˜$ÓOˆKà�w‰w˜"Š}Ü>¸qÓA�	ÜAÀ!ÓD‘àŸD™DØ¬¯©°R¼u¿}¹}Ô(Mð !ó �	ð  !Ÿt™tØ¬¯©°R¼u¿}¹}Ô(Mð  $ó  �ð —4‘4ØØØØØØ1OØ %Ø'Ø&ð ó 
ð 
ð �w‰w˜"Š}Ü>¸qÓA‘	àŸD™DØ¬¯©°R¼u¿}¹}Ô(Mð !ó �	ð —4‘4ØØØØØ1OØ %Ø'Ø&ð ó 	ð 	r?   )r¦   )r  rÚ   re  r  s     ` r6   Ú_interpolate_helperrÁ  ý  s'   ø€ Ü�D˜% Ó'ó<ó (ð<ð| Ðr?   c                ód  — t        |d«      }d|v rd}d|v rd}t        |d«      }t        |t        «      sdn|}|dk(  rdn|rdnd	}t        |«      �s˜| j	                  d
|«      }t        | |dgdgdg¬«      }	 t        |«       xr t        |d«      j                  «       dk(  }	|	rXt        |«      }
|
€t        dd«      S t        | |dg«      }t        |
dz
  «      D �cg c]  }|‘Œ }} | j                  dg|¢­ddiŽ}| j	                  d|t        j                   j"                  ¬«      }| j	                  d||d¬«      }| j$                  dk\  rt'        | «      }t'        | «      }nl| j	                  dt)        j*                  g t(        j,                  ¬«      ¬«      }| j	                  dt)        j*                  g t(        j,                  ¬«      ¬«      }| j	                  d|||||d|d¬«	      S t        |«      }
|
€t        dd «      S | j$                  dk\  rt'        | «      }n6| j	                  dt)        j*                  g t(        j,                  ¬«      ¬«      }t/        | ||
«      }| j	                  d||||d|d¬«      S # t        $ r' t        |«       }	|	st        j                  d«       Y �Œw xY wc c}w )!Nr   r›  rœ  r   Fr’  r±  r”  r²  rF  r   rJ  r{  r   zkCannot verify if the output_size is a scalar while exporting interpolate. Assuming that it is not a scalar.z'interpolate (with a scalar output_size)z?missing input shape (try giving an array of output_size values)r}  r  r  r  r  ri  r�   r?  rŽ   r³  r´  rµ  r¶  zinterpolate (with scales)rž  )rH   r9   r-   r¸   r‘   r4  rg   rÚ   ÚAttributeErrorrc  rd  rÛ   rñ   rn  rƒ  rì   r!  r  r*  r»  rK   r’   r€  r™  )rt   r-  rè   r—  r“  r”  Úrecompute_scale_factorr¼  r½  rŸ  Úrankr   r¿  rÀ  rŠ  s                  r6   Ú__interpolate_helperrÆ  @  sÒ  € ô ˜D #Ó&€DØ�4ÑØˆØ�$�ØˆÜ$ ]°CÓ8€MÜ!+¨M¼4Ô!@‘EÀm€Mð �9Òñ 	ñ ñ àð #ô �D�>Ø—T‘T˜' 5Ó)ˆ
Ü" 1 j¸°sÀ!ÀÈaÈSÔQˆ
ð

	Ü+¨DÓ1Ð1ò Ü   sÓ+×/Ñ/Ó1°QÑ6ð ñ Ü# EÓ*ˆDØˆ|Ü%Ø=ØUóð ô % Q¨¨q¨cÓ2ˆDÜ"'¨¨q©£/Ö2˜Q’DÐ2ˆDÐ2Ø�1—4‘4˜Ð2 4Ò2°Ñ2ˆDØ�t‰t�F˜D¤w×'BÑ'B×'HÑ'HˆtÓIˆØ�t‰t�H˜j¨$°qˆtÓ9ˆà�7‰7�bŠ=Ü:¸1Ó=ˆIÜ=¸aÓ@‰LàŸ™˜Z´·±¸bÌÏÉÔ1V˜ÓWˆIØŸ4™4Ø¤E§L¡L°¼5¿=¹=Ô$Ið  ó ˆLð �t‰tØØØØØØ-KØ!ØØ"ð ó 

ð 
	
ô   Ó&ˆØˆ<Ü!Ð"=Ð?TÓUÐUà�7‰7�bŠ=Ü:¸1Ó=‰IàŸ™˜Z´·±¸bÌÏÉÔ1V˜ÓWˆIä(¨¨L¸$Ó?ˆØ�t‰tØØØØØ-KØ!ØØ"ð ó 	
ð 		
øôi ò 	Ü+¨DÓ1Ð1ˆIÙÜ—‘ðUôúð	üò  3s   Á8+I: Ã	J-É:,J*Ê)J*c                ó|   — | j                   dk  rddlm} n| j                   dk  rddlm} nddlm}  || |||«      S )Né   r   )Úunbindr£  )r*  r+  rÉ  Útorch.onnx.symbolic_opset11Útorch.onnx.symbolic_opset13)rt   r²   rÚ   rl   rÉ  s        r6   Ú_unbind_helperrÌ  £  s2   € Ø‡w�w�‚|Þ5Ø	
�‰�BŠÞ6å6Ù�!�T˜3 Ó)Ð)r?   c                óR   — | j                   dk  rddlm} nddlm}  || ||||«      S )NrG  r   ©Úscatter)r*  r+  rÏ  rÊ  )rt   r²   rÚ   rç   ÚsrcrÏ  s         r6   Ú_scatter_helperrÑ  ­  s(   € Ø‡w�w�"‚}Þ6õ 	8Ù�1�d˜C ¨Ó,Ð,r?   c                óä   — | j                   dk  r| j                  d|dg|z  ||¬«      }n=ddlm} | j                  dt	        j
                  dg|z  «      ¬«      } || ||||¬	«      }|dkD  r|S |gS )
Nr£  ÚSplitrk   )Úsplit_ir  rL  r   )Úsplitr�   rŽ   )rl   )r*  r‘   rË  rÕ  rK   r’   )rt   r²   ÚrepsrÚ   Ú	split_outrÕ  Úrepeatss          r6   Ú_repeat_interleave_split_helperrÙ  ¶  su   € Ø‡w�w�"‚}Ø—D‘D˜ $°°°d±
À3ÐPT�DÓU‰	å5à—$‘$�z¬5¯<©<¸¸¸d¹
Ó+C�$ÓDˆÙ˜!˜T 7¨C¸$Ô?ˆ	Ø˜qšˆ9Ð1 y kÐ1r?   c                ó@  — ddl m}m} t        |«      s&| j	                  dt        j                  |«      ¬«      }t        |«      }t        |d«      }t        |«      dk(  r8| j	                  d|| j	                  dt        j                  dg«      ¬«      «      } || ||dz   «      }|rJt        j                  t        |«      t
        j                  ¬«      }	||	|dz   <   | j	                  d|	¬«      }
n�| j	                  d	 || |dz   d«      | j	                  dt        j                  t        |«      «      ¬«      | j	                  d
| j	                  dt        j                  dg«      ¬«      |d¬«      «      }	 || |	dd«      }
| j	                  d||
«      } || |||dz   «      S )Nr   )ÚflattenÚ	unsqueezer�   rŽ   r   r¨  rk   r?  ÚOneHotr}  r  ÚTile)r+  rÛ  rÜ  rÁ   r‘   rK   r  rQ   rH   rÛ   r’   r  rN  )rt   r²   rØ  rÚ   rÛ  rÜ  Úconst_repeatsrÖ  Ú
unsqueezedÚonehotÚrepeats_per_dimÚtileds               r6   Ú-_repeat_interleave_single_value_repeat_helperrä  Á  s…  € ÷ >ä�gÔØ—$‘$�z¬5×+;Ñ+;¸GÓ+D�$ÓEˆä& wÓ/€MÜ˜G SÓ)€Dô ˜Ó  AÒ%Ø—$‘$�y '¨1¯4©4°
ÄEÇLÁLÐRSÐQTÓDU¨4Ó+VÓWˆñ ˜1˜d C¨!¡GÓ,€Jñ ä—‘Ô,¨ZÓ8ÄÇÁÔLˆØˆˆs�Q‰w‰ØŸ$™$˜z°6˜$Ó:‰ð —‘ØÙ�a˜˜q™ !Ó$Ø�D‰DØ¤E§L¡LÔ1AÀ*Ó1MÓ$Nð ó ð �D‰DØ˜!Ÿ$™$˜z´5·<±<ÀÀÓ3D˜$ÓEÀwÐWXð ó ó	
ˆñ " ! V¨Q°Ó2ˆà�D‰D�˜ _Ó5€EÙ�1�e˜S #¨¡'Ó*Ð*r?   c                ó&  — d„ }|�t        |«      rct        |«      rX ||||g«      rt        j                  j                  }nYt        j                  j                  t        j                  «       «      }n't        |t        «      sJ ‚t        j                  |«      }|r"| j                  d||j                  «       ¬«      nd }|r"| j                  d||j                  «       ¬«      nd }|r"| j                  d||j                  «       ¬«      nd }||||fS )Nc                óü   — | D ]w  }t         j                  j                  |t         j                  j                  «      }|t         j                  j                  k7  sŒY|t         j                  j                  k7  sŒw y y)NFT)r   r­   r®   r¯   r  )ÚscalarsrA  r³   s      r6   Ú_is_all_integralz-_arange_cast_helper.<locals>._is_all_integraló  sj   € Øò 	ˆFÜ%×3Ñ3×>Ñ>Øœ×1Ñ1×;Ñ;óˆKð œ{×8Ñ8×>Ñ>Ó>Ø¤;×#<Ñ#<×#FÑ#FÓFáð	ð r?   r  r  )r&   r¸   r   r­   r  r  rK   Úget_default_dtyper9   r+   r‘   r  )rt   ÚendÚstartÚstepr  rè  r³   s          r6   Ú_arange_cast_helperrí  ë  sñ   € ò
ð  €}œ 5Ô)¬h°u¬oÙ˜U C¨Ð.Ô/Ü%×3Ñ3×9Ñ9‰Kä%×3Ñ3×>Ñ>Ü×'Ñ'Ó)ó‰Kô ˜%¤Ô%Ð%Ð%ä!×/Ñ/°Ó6ˆáAFˆA�D‰D�˜ [×%:Ñ%:Ó%<ˆDÔ=ÈD€EÙ=@ˆ!�$‰$ˆv�s ×!6Ñ!6Ó!8ˆ$Ô
9Àd€CÙ?Cˆ1�4‰4�˜ ;×#8Ñ#8Ó#:ˆ4Ô;È€DØ˜˜U DÐ(Ð(r?   c                óL   — | j                   dk  rddlm} nddlm}  || g|¢­Ž S )NrG  r   )Úarange)r*  r+  rï  rÊ  )rt   ru   rï  s      r6   Ú_arange_helperrð    s#   € Ø‡w�w�"‚}Þ5å6Ù�!Ð�dÒÐr?   c           
     ó’   — | j                  d|«      }ddlm}  || || j                  dt        j                  dg«      ¬«      |«      S )NrF  r   )Úselectr�   rŽ   )r‘   r+  rò  rK   r’   )rt   r²   rÚ   Ú
full_shaperò  s        r6   Ú_size_helperrô    s>   € Ø—‘�g˜tÓ$€JÝ1á�!�Z §¡ j¼%¿,¹,ÈÀsÓ:K Ó!LÈcÓRÐRr?   c           
     óî  — ddl m} | j                  dk  rddl m} nddlm} |j                  «       j                  «       €t        dd«      S |j                  «       j                  «       }t        |d«      }|dk  r||z  }t        | |t        |«      D �cg c]
  }||k7  sŒ	|‘Œ c}«      }	 || | j                  d|«      dt        | |dg«      | j                  d|«      «      }
 || |	|
d «      }|
|fS c c}w )	Nr   )ÚexpandrG  rÎ  Ú
index_fillzinput rank not accessibler   rF  )r+  rö  r*  rÏ  rÊ  r½   rÚ   rñ   r7   rn  rƒ  r‘   )rt   r²   rÚ   rç   rö  rÏ  Úself_dimÚ	dim_valuer   Úunsqueezed_indexÚexpanded_index_shapeÚexpanded_indexs               r6   Ú_index_fill_reshape_helperrý  $  sñ   € õ 2à‡w�w�"‚}Þ6õ 	8à‡y�yƒ{‡�ÓÐ Ü˜lÐ,GÓHÐHØ�y‰y‹{�‰Ó €HÜ˜3 Ó$€IØ�1‚}Ø�XÑˆ	Ü(Ø	ˆ5œe H›oÖ@˜°°i³’1Ò@óÐñ #Ø	ˆ1�4‰4�˜Ó Ô#4°Q¸¸a¸SÓ#AÀ1Ç4Á4ÈÐQVÓCWóÐñ ˜AÐ/Ð1EÀtÓL€NØ Ð/Ð/ùò As   Â
C2Â C2c                ó,  — t        |d«      }t        |«      s&| j                  dt        j                  |«      ¬«      }| j
                  dk  r4|dk(  rt        dt        j                  d|«       | j                  d||«      S | j                  d|||¬	«      S )
Nr   r�   rŽ   ri  rk   zReshape with allowzero=1é   r¨  )Úallowzero_i)	rH   r&   r‘   rK   r  r*  rþ   r   r  )rt   r-  rM   Ú	allowzeros       r6   r  r  G  s‰   € Ü˜U DÓ)€EÜ�UÔØ—‘�Z¬×)9Ñ)9¸%Ó)@�ÓAˆØ‡w�w�"‚}Ø˜Š>Ü#Ø*¬G×,MÑ,MÈrÐSXôð �t‰t�I˜u eÓ,Ð,à�t‰t�I˜u e¸ˆtÓCÐCr?   c                óÀ  — ddl m} t        |d«      }t        |d«      }|�t        |«      rq|€t	        j
                  d|«      ‚t        j                  dg|z  t        j                  j                  |«      j                  «       ¬«      }	| j                  d|	¬«      }|�t        |«      rq|€t	        j
                  d|«      ‚t        j                  d	g|z  t        j                  j                  |«      j                  «       ¬«      }
| j                  d|
¬«      }|�t        |«      s|�t        |«      r¥|�|€J ‚t        | || j                  dt        j                  ||d
gt        j                  ¬«      ¬«      «      }| j                  d|g d¢¬«      } || || j                  dt        j                  ddgt        j                  ¬«      ¬«      dd«      \  }}||||fS )Nr   )Ú	_var_meanrk   z@Unsupported: ONNX export of batch_norm for unknown channel size.r~  r?  r�   rŽ   g        rä   Ú	Transpose)r   rJ  rk   )Úperm_iF)r+  r  râ   r¸   r   r/   rK   r’   r   r­   r®   r  r‘   r  rN  )rt   r-  ÚweightÚbiasÚrunning_meanÚrunning_varr  Ú
batch_sizeÚchannel_sizeÚweight_valueÚ
bias_valueÚ
reshape_inÚtrans_ins                r6   Ú_batchnorm_helperr  U  sÛ  € õ 5ä% e¨QÓ/€JÜ'¨¨qÓ1€Là€~œ &Ô)ØÐÜ×+Ñ+ØRØóð ô —|‘|ØˆE�LÑ Ü×+Ñ+×6Ñ6°uÓ=×CÑCÓEô
ˆð —‘�j¨,�Ó7ˆØ€|”x ”~ØÐÜ×+Ñ+ØRØóð ô —\‘\ØˆE�LÑ Ü×+Ñ+×6Ñ6°uÓ=×CÑCÓEô
ˆ
ð �t‰t�J¨
ˆtÓ3ˆð 	ÐÜ�LÔ!ØÐÜ�KÔ àÐ%¨,Ð*BÐBÐBÜ$ØØØ�D‰DØÜŸ™ j°,ÀÐ%CÌ5Ï;É;ÔWð ó ó
ˆ
ð —4‘4˜ Zº	�4ÓBˆÙ$-ØØØ�D‰D�¤U§\¡\°1°a°&ÄÇÁÔ%LˆDÓMØØó%
Ñ!ˆ�\ð �4˜ {Ð2Ð2r?   c                ó‚   — |r-|j                  «       j                  «       dk7  rt        |d«       t         | |«      «      S )Nr»   Údivisor_override)r'   r)   rñ   rZ   )Útuple_fnÚpaddingÚkernel_sizeÚstrider  r  s         r6   Ú_avgpool_helperr  Ž  s=   € ñ Ð,×1Ñ1Ó3×8Ñ8Ó:Ð>NÒNÜ�tÐ/Ô0Ü‘˜'Ó"Ó#Ð#r?   c                ón  — t         j                  t        j                  j                  k(  ry| rt        j                  j
                  }nt        j                  j                  }|t         j                  k(  rydt        | «      › �}t        j                  dt         j                  › d|› d|› d|› d�	«       y)zMWarns the user if the model's training mode and the export mode do not agree.Nztrain=zONNX export mode is set to z, but operator 'z' is set to z. Exporting with rú   )
r   Útraining_moderì   ÚTrainingModeÚPRESERVEÚTRAININGÚEVALr-   rc  rd  )Úop_train_moderô   Úop_mode_enumÚop_mode_texts       r6   Úcheck_training_moder!  ›  s¤   € ä×Ñ¤× 4Ñ 4× =Ñ =Ò=ØáÜ×+Ñ+×4Ñ4‰ä×+Ñ+×0Ñ0ˆØ”w×,Ñ,Ò,ààœD Ó/Ð0Ð1€Lô ‡M�MØ
%¤g×&;Ñ&;Ð%<Ð<LÈWÈIð VØ!�NÐ"3°L°>Àð	Dõr?   c                óº  — | j                  d|«      }t        | |dgdg|g¬«      }|| j                  dt        j                  dgt        j                  ¬«      ¬«      g}||dz
  k  rPt        | |dg|dz   g|g¬«      }|| j                  dt        j                  dgt        j                  ¬«      ¬«      |g} | j                   d	g|¢­d
diŽ}	ddlm}
  |
| ||	«      S )NrF  r   )r.  r/  r0  r�   rä   r?  rŽ   rk   r}  r  )Ú_reshape_from_tensor)r‘   r4  rK   r’   rm  r+  r#  )rt   r-  Ú	start_dimÚend_dimrÚ   r½  Úslice1ÚslicesÚslice3Úfinal_shaper#  s              r6   Ú_flatten_helperr*  ´  sÛ   € Ø—‘�g˜uÓ%€JÜ˜1˜j°¨s¸A¸3ÀiÀ[ÔQ€FØ�a—d‘d˜:¬u¯|©|¸R¸DÌÏ
É
Ô/S�dÓTÐU€FØ��q‘ÒÜØˆz  ¨W°q©[¨MÀÀô
ˆð Ø�D‰D�¤U§\¡\°2°$¼e¿j¹jÔ%IˆDÓJØð
ˆð �!—$‘$�xÐ3 &Ò3°Ñ3€KÝ?á  5¨+Ó6Ð6r?   c                ód   — |€yt        | «      r"| j                  «       j                  «       dk7  ryy)NFr!   Trf   )Úsplit_size_or_sizesrl   s     r6   Ú_is_split_staticr-  È  s5   € ØÐØäÐ%Ô&Ø×$Ñ$Ó&×+Ñ+Ó-Ð1AÒAàØr?   c                ó‚   — | j                  d«      }|j                  t        j                  j	                  «       «       |S )Nr»   )r‘   ÚsetTyper   ÚOptionalTypeÚofTensor)rt   Úns     r6   r»  r»  Ó  s/   € Ø	�‰ÐÓ€AØ‡I�IŒb�o‰o×&Ñ&Ó(Ô)Ø€Hr?   c                ó¨   ‡— t        ‰«      }|�1t        ˆfd„t        |«      D «       «      r| j                  |‰d¬«      S | j                  |‰d¬«      S )Nc              3  ó<   •K  — | ]  }t        ‰|«      d k(  –— Œ y­w)r   N)râ   )Ú.0r   r²   s     €r6   ú	<genexpr>z*_handle_reduce_dim_none.<locals>.<genexpr>Û  s#   øè ø€ ò  Ø/0Ô˜T 1Ó%¨Õ*ñ ùs   ƒrk   ©rv  r   )rÛ   r”   rƒ  r‘   )rt   r²   rô   rÅ  s    `  r6   Ú_handle_reduce_dim_noner8  Ù  sW   ø€ Ü˜DÓ!€DØÐœCó  Ü49¸$³Kô ô ð
 �t‰t�G˜T¨aˆtÓ0Ð0Ø�4‰4�˜¨!ˆ4Ó,Ð,r?   c                óJ  — t        |«      }|dd \  }}}t        |«      dk\  r|d   nd}t        |dd«      }t        j                  j                  |«      }	|€-|	�|	j                  «       }nt        j                  j                  }| j                  d||¬«      }
| j                  d|t        j                  j                  ¬«      }| j                  d||¬«      }|�0t        j                  dk  rt        d	t        j                  dd
|«       | j                  d	|
|||¬«      |||fS )a’  Appends to graph `g` ONNX nodes that dequantizes `qtensor` into `tensor`.

    Args:
        g: Graph, the ONNX IR graph that is under construction.
        qtensor: torch._C.Value, either a tuple of (quantized_tensor, scale, zero_point)
            for per tensor quantization, or
            (quantized_tensor, scale, zero_point, axis) for per channel quantization,
            representing the quantized tensor.
        qdtype: torch.onnx.TensorProtoDataType default None, if not None, represents the
            data type of quantized tensor. It must be either
            torch.onnx.TensorProtoDataType.UINT8 or torch.onnx.TensorProtoDataType.INT8.
    Nr_   r`   r   Úaxisr  r  ri  ÚDequantizeLinearú Attribute axis is not supported.r  )rd   rb   rR   r   r­   r®   r  rì   r!  ÚUINT8r‘   r6  r   r  r  )rt   ÚqtensorÚqdtypeÚunpacked_qtensorsr’   r‡   rˆ   r:  r  Úinput_qdtyper"   s              r6   r•   r•   ä  s.  € ô" 1°Ó9ÐØ 1°"°1Ð 5Ñ€FˆE�:Ü#&Ð'8Ó#9¸QÒ#>Ð˜QÒÀD€DÜ˜˜c 6Ó*€FÜ×,Ñ,×7Ñ7¸Ó?€LØ€~ØÐ#Ø!×+Ñ+Ó-‰Fä×0Ñ0×6Ñ6ˆFØ�D‰D�˜ fˆDÓ-€EØ�D‰D�˜¤W×%@Ñ%@×%FÑ%FˆDÓG€EØ—‘�f˜j¨v�Ó6€JàÐœg×?Ñ?À"ÒDÜ(ØÜ×-Ñ-ØØ.Øô	
ð 	
�‰Ð ¨¨zÀ&ˆÓIØØØð	ð r?   c                óh  — |�;t        |«      s0t        j                  dk  rt        dt        j                  dd|«       |€J ‚t        j
                  j                  |t        j
                  j                  «      t        j
                  j                  k7  r,| j                  d|t        j                  j                  ¬«      }|€J ‚t        j
                  j                  |t        j
                  j                  «      t        j
                  j                  t        j
                  j                  hvr,| j                  d|t        j                  j                  ¬«      }| j                  d|||t        |dd«      ¬«      }|||g}|�t        |«      s|j                  |«        | j                  d	g|¢­Ž S )
ai  Appends to graph `g` ONNX nodes that quantizes `tensor` based on `scale`, `zero_point` and `axis`.

    Args:
        g: Graph, the ONNX IR graph that is under construction.
        tensor: torch._C.Value, representing the tensor to be quantized.
        scale: torch._C.Value, quantized scale.
        zero_point: torch._C.Value, quantized zero point.
        axis: Optional[torch._C.Value] default None, if None, represents per tensor quantization.
            Otherwise, represents per channel quantization, along given axis.

    Returns:
        A TupleConstruct storing information of the quantized tensor.
    ri  ÚQuantizeLinearr<  r  r  r   r:  r  rÑ   )r¸   r   r  r  r   r­   r®   r¯   r6  r‘   rì   r!  r=  ÚINT8rR   r“   )rt   r’   r‡   rˆ   r:  r£   ru   s          r6   r—   r—     s‡  € ð* 	ÐÜ˜”Ü×-Ñ-°Ò2ä(ØÜ×-Ñ-ØØ.Øô	
ð ÐÐÐä×!Ñ!×,Ñ,¨U´K×4MÑ4M×4WÑ4WÓXÜ×$Ñ$×*Ñ*ò	+ð —‘�V˜U¬×)DÑ)D×)JÑ)J�ÓKˆàÐ!Ð!Ð!Ü× Ñ ×+Ñ+Ø”K×-Ñ-×7Ñ7óô 	×!Ñ!×'Ñ'Ü×!Ñ!×&Ñ&ðñð —T‘T˜& *´7×3NÑ3N×3TÑ3T�TÓUˆ
Ø�T‰TØØØØÜ˜$  VÓ,ð ó €Fð �E˜:Ð&€DØÐ¤¨¤Ø�‰�DÔØˆ1�4‰4Ð&Ð.¨Ò.Ð.r?   c                ó¢  — | j                  d||«      }| j                  d|«      }| j                  d|t        j                  dgt        j                  ¬«      ¬«      }| j                  d| j                  d||«      t        j
                  j                  ¬	«      }g }	|�t        |«      s|	j                  |«        | j                   d
|||g|	¢­Ž S )ad  In PyTorch, bias is float and is quantized to int32 implicitly inside the quantized ATen op kernel.
    In ONNX we need to make the quantization explicit because operators expect all of their inputs to be quantized.
    Since int32 is not a supported output type by ONNX operator `QuantizeLinear`, quantization is exported using
    regular operators.
    ÚMulrF  r§  r   r?  rŽ   r  r|  r  rÑ   )	r‘   rK   r’   r+   rì   r!  ÚINT32r¸   r“   )
rt   r  Úinput_scaleÚweight_scaler:  Ú
bias_scaleÚbias_scale_shapeÚbias_zero_pointÚq_biasÚ	axis_argss
             r6   Úrequantize_bias_helperrO  Q  sÆ   € ð —‘�e˜\¨;Ó7€JØ—t‘t˜G ZÓ0ÐØ—d‘dØÐ+´U·\±\À1À#ÌUÏYÉYÔ5Wð ó €Oð �T‰TØ�—‘�U˜D *Ó-´G×4OÑ4O×4UÑ4Uð ó €Fð €IØÐ¤¨¤Ø×Ñ˜ÔØˆ1�4‰4Ð&¨°
¸OÐXÈiÒXÐXr?   c                ó|   ‡— | sJ ‚t         j                  j                  | d   «      Št        ˆfd„| D «       «      }|S )Nr   c              3  ób   •K  — | ]&  }t         j                  j                  |«      ‰k(  –— Œ( y ­wrE   )r   r­   r®   )r5  ÚelemÚ
base_dtypes     €r6   r6  z'args_have_same_dtype.<locals>.<genexpr>j  s,   øè ø€ ò ØEIŒ×!Ñ!×,Ñ,¨TÓ2°jÕ@ñùs   ƒ,/)r   r­   r®   Úall)ru   Úhas_same_dtyperS  s     @r6   Úargs_have_same_dtyperV  g  sC   ø€ Ù€Kˆ4Ü×*Ñ*×5Ñ5°d¸1±gÓ>€JÜó ØMQôó €Nð Ðr?   c           
     ó<  — |j                  dd«      }|j                  dt        j                  j                  «      }t	        |«      }t        j                  j                  |d   «      }t        |d   «       xr |du xs t        j                  |k  }|rÌ|D ]r  }	|	j                  «       sŒt        j                  j                  |	«      }
|
|k7  sŒ9t        j                  d|› d|j                  «       › d|
j                  «       › �|	«      ‚ t        |«      D ]G  \  }}	|	j                  «       sŒt        |	«      rŒ#| j                  d|	|j                  «       ¬	«      ||<   ŒI  | j                  |g|¢­i |¤Ž}|r"| j                  d||j                  «       ¬	«      }|S )
a·  Some PyTorch operators (e.g., Clip/Min/ReLU/Pad) are super set of ONNX in terms of data types.
    This function maximizes the exportability of PyTorch-ONNX by allowing ONNX-unsupported PyTorch
    operator data type. For example, `Cast<int>(Clip<float>(Cast<float>(INPUT)))` can be used to mimic
    `Clip<int>(INPUT)` (opset version < 12).

    Args:
        g (torch._C.Graph): graph to write the ONNX representation into.
        op_name (str): operator name in ONNX.
        *args (tuple): operands to the operator.
        **kwargs (dict): attributes to the operator along with "opset_before" (optional, None by default)
            indicating the smallest opset version to trigger such casting behavior and "target_float_t"
            (optional, torch.onnx.JitScalarType.FLOAT by default) indicating the data type of internal operator.

    Returns:
        Optional[torch._C.Value, Tuple[torch._C.Value, ...]]: output(s) of the operator.
    Úopset_beforeNÚtarget_float_tr   z
Inputs of z must have same dtype.Got z and r  r  )Úpopr   r­   r6  rT   r®   r:  r   r  ÚisCompleteTensorr   r/   r°   rå   r‘   r  )rt   rô   ru   rv   rX  rY  r0   Údtype_0Úrequire_castr-  Úinput_scalar_typer   r²   s                r6   Ú_op_with_optional_float_castr_  p  s¢  € ð" —:‘:˜n¨dÓ3€LØ—Z‘ZÐ 0´+×2KÑ2K×2QÑ2QÓR€Nä�$‹Z€FÜ×'Ñ'×2Ñ2°6¸!±9Ó=€Gä˜f Q™iÓ(Ð(ò Ø˜ÐÒP¤× AÑ AÀLÑ Pð ñ Øò 	ˆEØ×%Ñ%Õ'Ü$/×$=Ñ$=×$HÑ$HÈÓ$OÐ!Ø$¨Ó/Ü ×3Ñ3Ø$ W Ið .Ø&×2Ñ2Ó4Ð5°UÐ;L×;XÑ;XÓ;ZÐ:[ð]àóð ð		ô " &Ó)ò 	‰HˆAˆuØ×%Ñ%Õ'´°uµØŸD™DØØØ'×1Ñ1Ó3ð !ó ��q’	ð	ð ˆ1�4‰4�Ð+˜&Ò+ FÑ+€DáØ�t‰t�F˜D w×'8Ñ'8Ó':ˆtÓ;ˆà€Kr?   c                óX  — t         j                  j                  |t         j                  j                  «      }|t         j                  j                  k7  rTt	        |«      sI|t         j                  j
                  k7  r,| j                  d|t        j                  j
                  ¬«      }|S r  )	r   r­   r®   r¯   r:  r  r‘   rì   r!  )rt   r²   r³   s      r6   Ú_maybe_cast_reduce_op_inputra  ¥  s€   € Ü×+Ñ+×6Ñ6ØŒk×'Ñ'×1Ñ1ó€Kð ”k×/Ñ/×9Ñ9Ò9ô �dŒ| ¬{×/HÑ/H×/NÑ/NÒ NØ—4‘4˜ ¬7×+FÑ+F×+LÑ+L�4ÓMˆDØ€Kr?   c                 ó   ‡ ‡— ˆ ˆfd„}|S )z_Returns a decorator that calls the decorated (higher-order) function with the given parameters.c                ó   •—  | ‰i ‰¤ŽS rE   rJ   )r~   ru   rv   s    €€r6   Ú_applyz_apply_params.<locals>._apply´  s   ø€ Ù�4Ð"˜6Ñ"Ð"r?   rJ   )ru   rv   rd  s   `` r6   Ú_apply_paramsre  ±  s   ù€ õ#ð €Mr?   c                ó   ‡ ‡— dˆˆ fd„	}|S )Nc                ó   •— t        | |«      }|�|dk(  rt        | |‰«      S t        |dd«      }| j                  dk  r/‰rdnd}t        ||d«      }‰r|n|g}| j	                  ‰|||¬«      S t        |«      r|}np‰r7| j	                  dt        j                  |t        j                  ¬	«      ¬
«      }n7| j	                  dt        j                  |gt        j                  ¬	«      ¬
«      }| j	                  ‰|||¬«      S )NrJ   r   r©  é   r   rÚ   rx  r�   r?  rŽ   r7  )	ra  r8  rR   r*  r‘   r&   rK   r’   rm  )	rt   r²   rÚ   r©  r1   Údim_listr.  Úallow_multi_dim_supportÚonnx_op_names	          €€r6   Úsymbolicz,_reduce_op_symbolic_helper.<locals>.symbolic»  sù   ø€ Ü*¨1¨dÓ3ˆØˆ;˜# š)ô +¨1¨d°LÓAÐAô ! ¨#¨yÓ9ˆGØ�w‰w˜Š|Ù6‘t¸C�Ü   d¨EÓ2�Ù"9™3À¸u�Ø—t‘t˜L¨$°xÈG�tÓTÐTä˜S”>Ø‘Dá.Ø Ÿt™tØ&´·±¸SÌÏ
É
Ô0Sð  $ó  ™ð  !Ÿt™tØ&´·±¸c¸UÌ%Ï*É*Ô0Uð  $ó  ˜ð —t‘t˜L¨$°À�tÓIÐIr?   ©NNrJ   )rk  rj  rl  s   `` r6   Ú_reduce_op_symbolic_helperrn  º  s   ù€ öJð: €Or?   c                óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )Nc                óÌ   •—  ‰| g|¢­Ž }|D ]0  }|j                   }t        |«      t        |«      k(  sŒ' || g|¢­Ž c S  t        d‰j                  › �dt        |«      › d�«      S )Nzaten::zwith z
 arguments)r�   rb   rñ   rm   )rt   ru   Ú	overloadsÚoverloadr}   r~   s        €r6   r   z'_overload_by_arg_count.<locals>.wrapperÜ  sr   ø€ á�q�L˜4’Lˆ	Ø!ò 	*ˆHØ&×7Ñ7ˆOÜ�?Ó#¤s¨4£yÓ0Ù Ð) DÒ)Ò)ð	*ô   r§{¡{ mÐ4¸¼cÀ$»i¸[È
Ð6SÓTÐTr?   r¥   )r~   r   s   ` r6   Ú_overload_by_arg_countrs  Û  s'   ø€ Ü‡_�_�RÓóUó ðUð €Nr?   c                óF   ‡‡‡— t        | ‰¬«      Št        ˆˆˆfd„«       }|S )N)rj  c                ó¨   •— t        d«      t        dd«      ˆˆfd„«       «       }‰rdnd}t        d«      t        d|dd«      ˆˆfd„«       «       }||fS )NTr   r   c                óÖ  •— d }|j                  «       j                  «       dk(  rEt        |dd«      }t        j                  |«      j                  «       }| j                  d||¬«      }n.|j                  «       j                  «       dk7  rt        ‰d|«      S  ‰| |«      }|�Ft        j                  j                  |«      j                  «       }||k7  r| j                  d||¬«      }|S ©Nr!   r   r  r  r  r»   ©	r'   r)   rR   r   r­   r  r‘   rñ   r®   )rt   r²   r  Ú
dtype_onnxÚresultÚresult_dtype_onnxr  rl  s         €€r6   Úreduce_nodimz?_reduce_with_dtype_helper.<locals>.reduce.<locals>.reduce_nodimñ  sÜ   ø€ ð ˆJØ�z‰z‹|× Ñ Ó"Ð&6Ò6Ü" 5¨#¨wÓ7�Ü(×6Ñ6°uÓ=×GÑGÓI�
Ø—t‘t˜F D¨z�tÓ:‘Ø—‘“×"Ñ"Ó$Ð(8Ò8Ü% d¨G°UÓ;Ð;Ù˜a Ó&ˆFØÐ%Ü$/×$=Ñ$=×$HÑ$HØó%ç‘)“+ð "ð %¨
Ò2ØŸT™T &¨&°z˜TÓB�FØˆMr?   r   r   c                óÚ  •— d }|j                  «       j                  «       dk(  rEt        |dd«      }t        j                  |«      j                  «       }| j                  d||¬«      }n.|j                  «       j                  «       dk7  rt        ‰d|«      S  ‰	| |||«      }|�Ft        j                  j                  |«      j                  «       }||k7  r| j                  d||¬«      }|S rw  rx  )
rt   r²   rÚ   r©  r  ry  rz  r{  r  rl  s
           €€r6   Ú
reduce_dimz=_reduce_with_dtype_helper.<locals>.reduce.<locals>.reduce_dim  sà   ø€ ð ˆJØ�z‰z‹|× Ñ Ó"Ð&6Ò6Ü" 5¨#¨wÓ7�Ü(×6Ñ6°uÓ=×GÑGÓI�
Ø—t‘t˜F D¨z�tÓ:‘Ø—‘“×"Ñ"Ó$Ð(8Ò8Ü% d¨G°UÓ;Ð;Ù˜a  s¨GÓ4ˆFØÐ%Ü$/×$=Ñ$=×$HÑ$HØó%ç‘)“+ð "ð %¨
Ò2ØŸT™T &¨&°z˜TÓB�FØˆMr?   )r¦   r†   )	rt   ru   rv   r|  Údim_descr~  rj  r  rl  s	         €€€r6   Úreducez)_reduce_with_dtype_helper.<locals>.reduceï  sk   ø€ ä	˜Ó	Ü	�C˜Ó	 ô	ó 
!ó 
ð	ñ" 3‘4¸ˆä	˜Ó	Ü	�C˜ 3¨Ó	/ô	ó 
0ó 
ð	ð" ˜ZÐ'Ð'r?   )rn  rs  )rf  r  rj  r€  rl  s    `` @r6   Ú_reduce_with_dtype_helperr�  è  s1   ú€ ô *ØÐ)@ô€Hô õ)(ó ð)(ðV €Mr?   c                ó   — |€|€| j                  d|d¬«      S |€t        | d||d¬«      S t        |dd«      }t        |dd	«      }| j                  d
k  r| j                  d||g|¬«      }nL| j                  dt	        j
                  |gt        j                  ¬«      ¬«      }| j                  d|||¬«      }| j                  d|||¬«      }||fS )NÚ	ReduceMaxr   r7  ÚMaxr£  ©rX  r   r©  rÚ   rh  rx  r�   r?  rŽ   ÚArgMaxr¥  ©r‘   r_  rR   r*  rK   r’   rm  )rt   r²   Údim_or_yr©  rÚ   Úmaxr.  Úindicess           r6   Ú_max_helperr‹    óÔ   € àÐ˜G˜OØ�t‰t�K °!ˆtÓ4Ð4à€Ü+¨A¨u°d¸HÐSUÔVÐVô ˜W c¨9Ó5ˆÜ˜ 3¨Ó.ˆØ�7‰7�RŠ<Ø—$‘$�{ D°#°À7�$ÓK‰Cà—4‘4˜
¬E¯L©L¸#¸ÄeÇjÁjÔ,Q�4ÓRˆDØ—$‘$�{ D¨$¸7�$ÓCˆCØ—$‘$�x ¨c¸g�$ÓFˆØ�Gˆ|Ðr?   c                ó   — |€|€| j                  d|d¬«      S |€t        | d||d¬«      S t        |dd«      }t        |dd	«      }| j                  d
k  r| j                  d||g|¬«      }nL| j                  dt	        j
                  |gt        j                  ¬«      ¬«      }| j                  d|||¬«      }| j                  d|||¬«      }||fS )NÚ	ReduceMinr   r7  ÚMinr£  r…  r   r©  rÚ   rh  rx  r�   r?  rŽ   ÚArgMinr¥  r‡  )rt   r²   rˆ  r©  rÚ   Úminr.  rŠ  s           r6   Ú_min_helperr’  2  rŒ  r?   c                óN   — | j                  d|«      }| j                  d|d¬«      S )NrF  Ú
ReduceProdr   r7  )r‘   )rt   r²   rM   s      r6   Ú_numel_helperr•  F  s'   € Ø�D‰D�˜$Ó€EØ�4‰4�˜e°ˆ4Ó2Ð2r?   r   r   r   c           
     ó  — | j                   dk  �r•|€#| j                  d|d¬«      }|}t        | |«      }n‰| j                  d|||¬«      }| j                  d||d¬«      }| j                  d|«      }| j                  d|| j                  d	t        j                  |«      ¬
«      d¬«      }| j                  d|d¬«      }| j                  d||«      }	| j                  d|	|	«      }
|€dn|}| j                  d|
||¬«      }|€d}|dk7  r™| j                  d|t
        j                  j                  ¬«      }| j                  d	t        j                  |t        j                  ¬«      ¬
«      }| j                  d||«      }| j                  d|| j                  d||«      «      }||fS d }|€#| j                  d|d¬«      }|}t        | |«      }n¿| j                  d	t        j                  |t        j                  ¬«      ¬
«      }| j                  d|||¬«      }| j                  d||d¬«      }| j                  d|«      }| j                  d|| j                  d	t        j                  |«      ¬
«      d¬«      }| j                  d|d¬«      }| j                  d||«      }	| j                  d|	|	«      }
|€dn|}|€| j                  d|
|¬«      }n| j                  d|
||¬«      }|€d}|dk7  r™| j                  d|t
        j                  j                  ¬«      }| j                  d	t        j                  |t        j                  ¬«      ¬
«      }| j                  d||«      }| j                  d|| j                  d||«      «      }||fS )Nrh  Ú
ReduceMeanr   r7  rx  rk   rF  r  r�   rŽ   r  r”  ÚSubrF  r  r  r?  r|  )
r*  r‘   r•  rK   r’   rì   r!  r6  r,   rm  )rt   r-  rÚ   Ú
correctionr©  ÚmeanÚt_meanÚnum_elementsÚredudced_dimsÚsub_vÚsqr_subÚkeepdim_meanÚvarÚoneÚmulr.  s                   r6   Ú_var_mean_helperr¤  K  sd  € à‡w�w�ƒ|Øˆ;Ø—4‘4˜ e¸�4Ó:ˆDØˆFÜ(¨¨EÓ2‰Là—4‘4˜ e°CÀG�4ÓLˆDØ—T‘T˜,¨°cÀa�TÓHˆFØŸD™D ¨%Ó0ˆMàŸD™DØØØ—‘�Z¬¯©°cÓ):�Ó;Øð	 !ó ˆMð Ÿ4™4 ¨mÈ˜4ÓJˆLØ—‘�U˜E 6Ó*ˆØ—$‘$�u˜e UÓ+ˆØ˜K‘q¨WˆØ�d‰d�< °ÀˆdÓNˆàÐØˆJØ˜Š?ØŸ4™4Ø˜¬7×+FÑ+F×+LÑ+Lð  ó ˆLð —$‘$�z¬5¯<©<¸
Ì%Ï+É+Ô+V�$ÓWˆCØ—$‘$�u˜c <Ó0ˆCØ—$‘$�u˜c 1§4¡4¨¨|¸SÓ#AÓBˆCØ�DˆyÐàˆØˆ;Ø—4‘4˜ e¸�4Ó:ˆDØˆFÜ(¨¨EÓ2‰Là—4‘4˜
¬E¯L©L¸ÄEÇJÁJÔ,O�4ÓPˆDØ—4‘4˜ e¨T¸g�4ÓFˆDØ—T‘T˜,¨¨tÀ�TÓBˆFØŸD™D ¨%Ó0ˆMàŸD™DØØØ—‘�Z¬¯©°cÓ):�Ó;Øð	 !ó ˆMð Ÿ4™4 ¨mÈ˜4ÓJˆLØ—‘�U˜E 6Ó*ˆØ—$‘$�u˜e UÓ+ˆØ˜K‘q¨WˆØˆ<Ø—$‘$�| W¸�$ÓF‰Cà—$‘$�| W¨d¸|�$ÓLˆCàÐØˆJØ˜Š?ØŸ4™4Ø˜¬7×+FÑ+F×+LÑ+Lð  ó ˆLð —$‘$�z¬5¯<©<¸
Ì%Ï+É+Ô+V�$ÓWˆCØ—$‘$�u˜c <Ó0ˆCØ—$‘$�u˜c 1§4¡4¨¨|¸SÓ#AÓBˆCØ�DˆyÐr?   c
                óô  — |rt         j                  rt        d«      S |	�|	dk\  rt        d«      ‚| j	                  dt        j                  d«      ¬«      }
| j	                  d|
t        j                  j                  ¬«      }
| j	                  dt        j                  dg«      ¬«      }t        | t        | || j	                  dt        j                  d«      ¬«      «      dg«      }|s||g} | j                  d	g|¢­d
diŽ}t        | |dgdgt        j                  gdg¬«      }t        | |dgdgt        j                  gdg¬«      }t        | || j	                  dt        j                  d«      ¬«      «      }t        j                   | d||
d¬«      \  }\  }}|j"                  }t%        j&                  |«      }t%        j&                  |«      }|j	                  d||d¬«      }|j	                  d||d¬«      }t        ||dg«      }t        ||dg«      }|j	                  d||||«      }|j	                  d||d¬«      }t)        |«      s6|j	                  d||||«      }t        ||dg«      }|j	                  d||«      }|dk(  rt+        ||dgd¬«      }nê|dk(  rs|j,                  dk  r|j	                  d|dgd¬«      }n¿|j	                  dt        j                  dgt
        j.                  ¬«      ¬«      }|j	                  d||d¬«      }nr|j,                  dk  r|j	                  d|dgd¬«      }nL|j	                  dt        j                  dgt
        j.                  ¬«      ¬«      }|j	                  d||d¬«      }|j	                  d|
t        j                  j                  ¬«      }t%        j0                  ||«       t%        j0                  ||«       |j3                  «       j5                  «       d d d fS )Nz7embedding_bag with scale_grad_by_freq for training moder   zembedding_bag with padding_idxr�   rk   rŽ   r  r  r}  r  )r.  r/  r0  r1  ÚLoop)Ún_blocksr  r  ÚSlicerF  rx  rh  r—  r?  r7  rƒ  )r   Úexport_trainingrï   ÚRuntimeErrorr‘   rK   r’   rì   r!  r<  rn  rô  r4  r�  r‚  r   Úadd_op_with_blocksÚblockr   Ú_add_input_to_blockr¸   ry  r*  rm  Ú_add_output_to_blockr'   r£   )rt   Úembedding_matrixrŠ  r†  Úscale_grad_by_freqr“  ÚsparseÚper_sample_weightsÚinclude_last_offsetÚpadding_idxÚloop_conditionÚzeroÚindices_lenÚoffsets_startsÚoffsets_endsÚloop_lenÚloopÚloop_contextr¢   Ú
loop_blockÚblock_input_iterÚcondÚindices_startÚindices_endÚindices_rowÚ
embeddingsÚper_sample_weights_rowr.  Úcond_outs                                r6   Ú_embedding_bag_helperrÆ  ”  sô  € ñ œg×5Ò5Ü ØEó
ð 	
ð Ð ;°!Ò#3ÜÐ;Ó<Ð<à—T‘T˜*¬e¯l©l¸1«o�TÓ>€NØ—T‘T˜& .´w×7RÑ7R×7WÑ7W�TÓX€NØ�4‰4�
¤E§L¡L°!°Ó$5ˆ4Ó6€Dä#Ø	Ü�Q˜ §¡ j¼%¿,¹,Àq»/ Ó!JÓKØ	
ˆó€Kñ
 Ø˜KÐ(ˆØ�!—$‘$�xÐ4 'Ò4°!Ñ4ˆô
 #Ø	ˆ7˜!˜ a S´·±¨}ÀQÀCô€Nô !Ø	ˆ7˜!˜ a S´·±¨}ÀQÀCô€Lô ˜A˜|¨Q¯T©T°*ÄeÇlÁlÐSTÃo¨TÓ-VÓW€Hä(×;Ñ;Ø	ˆ6�8˜^°aô Ñ€D‰/ˆ<˜1ð ×#Ñ#€Jô ×0Ñ0°Ó<ÐÜ×$Ñ$ ZÓ0€Dà —O‘OØ�.Ð"2¸1ð $ó €Mð —/‘/ (¨LÐ:JÐST�/ÓU€KÜ% l°MÀAÀ3ÓG€MÜ# L°+À¸sÓC€Kà—/‘/ '¨7°MÀ;ÐPTÓU€KØ—‘ Ð+;¸[ÐQR�ÓS€JÜÐ&Ô'Ø!-§¡ØÐ'¨¸ÀTó"
Ðô "3ØÐ0°1°#ó"
Ðð "—_‘_ U¨JÐ8NÓOˆ
Øˆq‚yÜ&Ø˜*¨a¨S¸Qô
‰
ð 
�ŠØ×Ñ Ò"Ø%Ÿ™Ø˜j°!°Àð )ó ‰Jð  —?‘?Ø¤E§L¡L°!°¼E¿J¹JÔ$Gð #ó ˆDð &Ÿ™¨°zÀ4ÐTU˜ÓV‰Jà×Ñ Ò"Ø%Ÿ™Ø˜Z°°Àð )ó ‰Jð  —?‘?Ø¤E§L¡L°!°¼E¿J¹JÔ$Gð #ó ˆDð &Ÿ™¨°jÀ$ÐST˜ÓUˆJà�‰Ø�¤W×%@Ñ%@×%EÑ%Eð ó €Hô 
×Ñ˜z¨8Ô4Ü	×Ñ˜z¨:Ô6ð �9‰9‹;×ÑÓ  t¨TÐ1Ð1r?   c                ó¤  — d }t        |«      rt        | |dg«      }d}nE| j                  dk\  r6| j                  dt	        j
                  |t        j                  ¬«      ¬«      }|t        j                  k(  r…| j                  dk  r'| j                  d| j                  d|«      ||¬	«      }�nV|€&| j                  d| j                  d|«      |¬
«      }�n.| j                  d| j                  d|«      ||¬
«      }�n|t        j                   k(  r…| j                  dk  r'| j                  d| j                  d|«      ||¬	«      }�n½|€&| j                  d| j                  d|«      |¬
«      }�n•| j                  d| j                  d|«      ||¬
«      }�nn|dk(  rú| j                  dk  rt        dddd|«      S |€Dt        | || j                  dt	        j
                  dgt        j                  ¬«      ¬«      «      }d}| j                  d| j                  d|| j                  dt	        j                  dg«      ¬«      «      «      }| j                  d|t        j                  j                  |«      j                  «       ¬«      }t!        | |||¬	«      S |dk(  rU| j                  dk  r t#        d«      | |||¬«      }�nD|€ t#        d«      | ||¬«      }�n, t#        d«      | |||¬«      }�n|dk(  rR| j                  dk  r t#        d«      | |||¬«      }në|€ t#        d«      | ||¬«      }nÔ t#        d«      | |||¬«      }n¾| j                  dt	        j
                  |t        j$                  ¬«      ¬«      }	t!        | | j                  d| j                  d|«      |	«      ||¬	«      }| j                  d|| j                  d| j                  dt	        j
                  dt        j$                  ¬«      ¬«      |	«      «      }t        |«      sBt'        |dd«      }| j                  d|t        j                  |«      j                  «       ¬«      }|S )Nrä   Frh  r�   r?  rŽ   rƒ  ÚAbsrx  r7  rŽ  r   rÈ  Úlinalg_vector_normr(  zord=0 not supportedÚNotÚEqualr  r  rk   ÚReduceL1)rÚ   r©  )r©  rJ  ÚReduceL2ÚPowr|  r   r  )r¸   r  r*  r‘   rK   r’   rm  ÚmathÚinfr  rN  r  r   r­   r®   r  ry  rn  r€  rR   )
rt   r²   ÚordrÚ   r©  r  r.  rz  Úcond_opÚord_ops
             r6   Ú_linalg_vector_norm_helperrÔ  þ  sý  € ð €Dä�„}Ü˜q $¨¨Ó-ˆØ‰Ø	
�‰�BŠØ�t‰t�J¬¯©°SÄÇ
Á
Ô(KˆtÓLˆà
Œd�h‰h‚Ø�7‰7�RŠ<Ø—T‘TØ˜QŸT™T %¨Ó.°sÀwð ó ŠFð ˆ|ØŸ™˜k¨1¯4©4°°tÓ+<È˜ÓQ’àŸ™˜k¨1¯4©4°°tÓ+<¸dÈw˜ÓW’Ø	”—‘�	Ò	Ø�7‰7�RŠ<Ø—T‘TØ˜QŸT™T %¨Ó.°sÀwð ó ŠFð ˆ|ØŸ™˜k¨1¯4©4°°tÓ+<È˜ÓQ’àŸ™˜k¨1¯4©4°°tÓ+<¸dÈw˜ÓW’Ø	�ŠØ�7‰7�RŠ<Ü3Ø$ a¨Ð-BÀDóð ð ˆ{Ü&ØØØ—D‘D˜¬U¯\©\¸2¸$ÄeÇkÁkÔ-R�DÓSó�ð
  �à—d‘dØØ—‘�W˜d A§D¡D¨¼U×=MÑ=MÈqÈcÓ=R DÓ$SÓTóˆGð —d‘dØØÜ ×.Ñ.×9Ñ9¸$Ó?×IÑIÓKð ó ˆGô
 % Q¨¸ÈÔPÐPØ	�ŠØ�7‰7�RŠ<Ø;Ô/°
Ó;Ø�4˜S¨'ôŠFð ˆ|Ø?Ô3°JÓ?Ø�t Wô’ð @Ô3°JÓ?Ø�t˜T¨7ô’ð 
�ŠØ�7‰7�RŠ<Ø;Ô/°
Ó;Ø�4˜S¨'ô‰Fð ˆ|Ø?Ô3°JÓ?Ø�t Wô‘ð @Ô3°JÓ?Ø�t˜T¨7ô‘ð —‘�j¬%¯,©,°sÄ%Ç-Á-Ô*P�ÓQˆÜ"Øˆq�t‰t�E˜1Ÿ4™4  tÓ,¨fÓ5¸cÈgô
ˆð —‘ØØØ�D‰DØØ—‘�Z¬¯©°a¼u¿}¹}Ô)M�ÓNØóó
ˆô �EŒ?Ü˜5 # wÓ/ˆØ—‘�f˜f¬;×+DÑ+DÀUÓ+K×+UÑ+UÓ+W�ÓXˆØ€Mr?   )ÚByteÚCharÚDoubleÚFloatÚHalfÚIntÚLongÚShortÚBoolÚComplexFloatÚComplexDoubleÚBFloat16Ú	UndefinedrÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  ÚQInt8ÚQUInt8ÚQInt32rà  )Úuint8_tÚint8_tr@  r,   Úhalfr+   Úint64_tÚint16_tr-   Ú	complex64Ú
complex128Úqint8Úquint8Úqint32Úbfloat16)rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  râ  rã  rä  rà  rá  zset[int]Ú_quantized_opsrm  )r1   Ú_ValueDescriptorr2   ú
str | Noner3   rò  )r'   z_C.Noder=   r.   )r"   ú_C.Value)r"   z2_C.Value | torch.Tensor | Number | Sequence | NonerG   rñ  )rU   ró  r€   zlist[_C.Value])r[   ró  r€   ztuple[_C.Value, ...])rU   r   r€   r-   )r}   rñ  r€   zRCallable[[Callable[_Concatenate[_U, _P], _T]], Callable[_Concatenate[_U, _P], _T]])
r¤   r-   r‡   zfloat | Nonerˆ   ú
int | Noner‰   r-   r€   z.Callable[[Callable[_P, _T]], Callable[_P, _T]])rª   r   r€   zNumber | None)rª   r   r€   r-   )r"   r   r€   r-   )rª   ró  r€   r-   )rÄ   z
_C.JitTyper€   z_C.ListType | None)rª   ró  r€   rô  )T)rª   ró  rß   r-   )rª   ró  rÚ   r+   r€   rô  )rª   ró  rÚ   rô  rE   )r‘   r.   rð   r.   r"   ú_C.Value | Noner€   ÚNone)rô   r.   r"   rõ  r€   r   )
rô   r.   rü   r+   rý   r+   r"   rõ  r€   r   )rô   r.   rü   r+   rý   r+   r   r.   r"   rõ  r€   r   )r  r.   )r€   z _type_utils.JitScalarType | None)r€   ú_type_utils.JitScalarType)rt   újit_utils.GraphContextrÄ   r÷  )rt   rø  )r€   r-   )TN)TFN)Nrk   r   )
rt   rø  r-  útorch._C.ValuerÚ   rù  r©  r-   rô   r.   )NNN)rt   rø  r€   zStuple[_type_utils.JitScalarType, _C.Value | None, _C.Value | None, _C.Value | None])r   )r  zCallable[[Any], Sequence[int]]r  zint | Sequence[int]r€   ztuple[int, ...])r  r+   rô   r.   r€   rö  )rt   rø  r>  ró  r?  z"_C_onnx.TensorProtoDataType | Noner€   z4tuple[_C.Value, _C.Value, _C.Value, _C.Value | None])rt   rø  r’   ró  r‡   ró  rˆ   ró  r:  rõ  r€   ró  )rf  r.   r  r.   rj  r-   )rt   rø  r²   rù  rÑ  r,   rÚ   zSequence[int] | Noner©  r-   r  rù  )§Ú
__future__r   r‚   rn   rÏ  r�  rØ   rc  r   r   r   r   r   r	   Ú_TypeVarÚtyping_extensionsr
   Ú_Concatenater   Ú
_ParamSpecrK   Útorch._C._onnxr   Ú_onnxrì   Ú
torch.onnxr   r   r   r   Útorch.onnx._globalsr   Útorch.onnx._internalr   ÚTYPE_CHECKINGÚtorch.typesr   r   r   r   rñ  r7   r*   rC   rH   rO   rR   rW   r]   rd   rg   r†   r¦   r«   rµ   r¸   r&   rQ   rÁ   rÅ   rÇ   rÌ   rÏ   rY   rÖ   rÛ   rà   râ   ré   rñ   rï   rþ   r  r  r	  r  r  r&  r4  r:  r=  rB  rS  rY  ra  rg  rn  rs  ry  rŒ  r�  r•  r™  r   r®  rÁ  rÆ  rÌ  rÑ  rÙ  rä  rí  rð  rô  rý  r  r  r  r!  r*  r-  r»  r8  r•   r—   rO  rV  r_  ra  re  rn  rs  r�  r‹  r’  r•  r¤  rÆ  rÔ  r!  r=  rD  r7  r6  ÚFLOAT16rG  r  ÚINT16r<  rÔ   rÕ   r9  r¯   Úcast_pytorch_to_onnxÚscalar_name_to_pytorchÚuint8Úint8Úshortr+   rN  rç  r,   r@  Ú	complex32rê  rë  r-   rì  rí  rî  rï  Úscalar_type_to_pytorch_typeÚpytorch_name_to_typeÚscalar_type_to_onnxÚsetrð  Ú__annotations__rJ   r?   r6   ú<module>r     sŽ  ðæ "ã Û Û Û 
Û Û ß R× Rß Rã ß  Ð  Ý ÷ >Ó =Ý 'Ý *ð 
×ÒÝ"áˆdƒ^€Ùˆdƒ^€Ù�Ó€ð ðñ
Ð ð   Ø ð	Bà
ðBð ðBð ó	BóJ#ó3ð
	Ø=ð	à ó	òò#ó$ó&óó.WðOØ&ðOàWóOðh Ø!Ø ñ	EØðEàðEð ðEð ð	Eð
 4óEóPòó&Vó#óó5ó
ó/ó>ó
)ó5óóôó)ó
ô1ô,ð$ "ð	,Øð,àð,ð ð,ð ð	,ð
 ó,ð. "ð,Øð,àð,ð ð,ð ð	,ð
 ð,ð ó,ó&óó
;ðØðØ0Ióô3ð< ð=Øó=ó$ó*ó:ô$
ð( OSð
Øó
ó*%òó"/ó*ð8 ØØðNØóNó>ó4ó !óð" Øó ðF#=Øð#=àð#=ð 
ð#=ð ð	#=ð
 ó#=òL@ðF`
Øó`
óF*ó-ó2ð'+Øó'+ðV BFð')Øð')ðó')óTóSó0ôFDð63Øó63ðr
$Ø,ð
$à ð
$ð ó
$óó27ò(òó-ð 26ð-Øð-àð-ð /ð-ð :ó	-ðj !ð:/Øð:/àð:/ð ð:/ð ð	:/ð
 ð:/ð ó:/ð| FJðYØóYò,ó2ój	òóòB
ð >Bð3Øð3Øð3Ø6:ó3ôlô(ó(3ñ
 ˆC��s˜CÓ òEó !ðEðPg2Øóg2ðTjØðjà
ðjð 
ðjð 
ð	jð
 ðjð ójðb ×'Ò'×-Ò-Ø×'Ò'×,Ò,Ø×)Ò)×0Ò0Ø×(Ò(×.Ò.Ø×'Ò'×/Ò/Ø×&Ò&×,Ò,Ø×'Ò'×-Ò-Ø×(Ò(×.Ò.Ø×'Ò'×,Ò,Ø×/Ò/×9Ò9Ø×0Ò0×;Ò;Ø×+Ò+×4Ò4Ø×,Ò,×6Ò6ñÐ ð$ ØØØØØØØØØØ!ØØØØñÐ ð0 
‡K‚KØ	‡J‚JØ	‡K‚KØ	‡I‚IØ	‡K‚KØ	‡J‚JØ	‡K‚KØ	‡L‚LØ	‡O‚OØ	‡O‚OØ	×ÒØ	‡J‚JØ	‡K‚KØ	‡L‚LØ	‡L‚LØ	‡N‚Nð!Ð ð. �KŠKØ�JŠJØ�lŠlØ�[Š[Ø�JŠJØ�9Š9Ø�KŠKØ�[Š[Ø�JŠJØ—O’OØ×%Ò%Ø�[Š[Ø�lŠlØ�lŠlØ—’ñÐ ð* ˜Ñ Ø˜Ñ Ø˜Ñ!Ø˜ÑØ˜Ñ Ø˜Ñ Ø˜Ñ!Ø˜Ñ"Ø˜Ñ%Ø˜Ñ(Ø˜Ñ)Ø˜Ñ Ø˜Ñ Ø˜Ñ Ø˜ÑØ˜Ñ$ð!Ð ñ* ›5€�Ô  r?   