Ë
    [^(h‡A ã                  ó4  — 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 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jB                  rd d	l"m#Z# 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„Z0d‡d„Z1d‡d„Z2dˆd„Z3	 	 	 	 d‰d„Z4ddddœ	 	 	 	 	 	 	 	 	 dŠd„Z5d‹d„Z6d„ 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)„ZBd‘d’d*„ZCd“d+„ZDd”d,„ZEd•d–d-„ZFd•d—d.„ZG	 d•	 	 	 	 	 	 	 	 	 d˜d/„ZH	 d•	 	 	 	 	 	 	 	 	 	 	 d™d0„ZIdšd1„ZJd›d2„ZKdœd3„ZL	 	 	 	 d�d4„ZMd‘džd5„ZN	 d•	 džd6„ZOdŸd7„ZPdŸd8„ZQdžd9„ZRd džd:„ZS	 d¡	 džd;„ZTdžd<„ZUd=„ ZVdžd>„ZWdžd?„ZX	 	 	 d¢	 džd@„ZYdždA„ZZdždB„Z[dždC„Z\dždD„Z]	 	 dždE„Z^	 	 	 	 	 	 	 	 	 	 d£dF„Z_dG„ Z`	 	 dždH„ZadždI„ZbdždJ„ZcdždK„Zd	 	 dždL„Ze	 d¤	 	 	 d¥dM„ZfdždN„ZgdždO„ZhdždP„Zid¦dždQ„Zj	 	 dždR„Zk	 	 	 	 	 	 d§dS„Zld¨dT„ZmdždU„ZndV„ ZodW„ ZpdždX„Zq	 d•	 	 	 	 	 	 	 d©dY„Zr	 d•	 	 	 	 	 	 	 	 	 	 	 dªdZ„Zs	 d•	 džd[„Ztd\„ Zudžd]„Zvdžd^„Zwd_„ Zxd‘d`„Zyda„ Zz	 d‘	 	 	 	 	 d«db„Z{d�dždc„Z|d�dždd„Z}džde„Z~ e4dfdgdhdh«      dždi„«       Z	 	 dždj„Z€	 	 	 	 	 	 	 	 	 	 	 	 d¬dk„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                  dlœZ�dmdndodpdqdrdsdtdudvdwdxdydzd{d|œZ‘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@                  e�jB                  gZ¢e�j$                  e�j&                  e�j2                  e�j0                  e�j.                  e�j*                  e�j,                  e�j(                  e�j:                  e�j6                  e�j8                  e�j<                  e�j>                  e�j@                  e�jB                  d}œZ£e�dm   e�dn   e�dt   e�dr   e�ds   e�dq   e�dp   e�do   e�d~   e�dv   e�dw   e�du   e�dn   e�dm   e�dr   e�d{   gZ¤ e¥«       Z¦de§d€<   y)­é    )ÚannotationsN)ÚAnyÚCallableÚLiteralÚNoReturnÚTypeVar)ÚConcatenateÚ	ParamSpec)Ú_C)Ú
_constantsÚ_type_utilsÚerrorsÚutils)ÚGLOBALS)Ú	jit_utils)ÚSequence)Ú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           úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/onnx/symbolic_helper.pyÚ
_parse_argr7   1   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*   v   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   Ÿ   sW   € Ø—‘Ó!€IØ‡~�~ÓÐ0Ò0Ü×'Ñ'ØIÈ)ÈÐTVÐWØó
ð 	
ô �	× Ñ Ó"Ó#Ð#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 ]`  \  Š}t        |«      r8|j                  ˆˆfd„|j                  «       j                  «       D «       «       ŒI|j                   ‰‰|«      «       Œb 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_quantizedd  s   € Ø!ÒQ¤i°£nÒQÔ9LÈSÓ9QÐQr?   c              3  ó0   •K  — | ]  } ‰‰|«      –— Œ y ­wrE   rJ   )Ú.0Ú	arg_inputr�   rG   s     €€r6   ú	<genexpr>zEquantized_args.<locals>.decorator.<locals>.wrapper.<locals>.<genexpr>l  s    øè ø€ ò (à%ñ *¨*°i×@ñ(ùs   ƒz-Bug: Scale must be set for quantized operatorz2Bug: Zero point must be set for quantized operator)ÚoprK   Útensorrb   rZ   rs   rg   Úextendr'   r0   ÚappendÚanyÚdequantize_helperÚreplaceAllUsesWithÚquantize_helper)rt   ru   rv   Ú_scaleÚ_zero_pointÚarg_q_descriptors_extendedÚdescriptor_argsÚis_quantizedr{   Únon_quantized_argsÚdequantized_argÚ	arg_scaleÚarg_zero_pointÚ_r“   Úoutputr�   rG   Úarg_q_descriptorsr~   r‰   r‡   rˆ   s                   @@€€€€€r6   r   z2quantized_args.<locals>.decorator.<locals>.wrapperQ  si  ú€ ð Ð ØŸ™˜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Ô'Ø ×'Ñ'ô (à),¯©«×):Ñ):Ó)<ô(õ ð
 !×'Ñ'Ñ(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óÐ*ñ Ü& q¨&°&¸+ÓFÐFØˆMr?   ©r‚   rƒ   )r~   r   r¨   r‰   r‡   rˆ   s   ` €€€€r6   r„   z!quantized_args.<locals>.decoratorP  s(   ù€ Ü	�‰˜Ó	÷R	ó 
ðR	ðh ˆr?   rJ   )r‡   rˆ   r‰   r¨   r„   s   ```` r6   Úquantized_argsrª   !  s   û€ ÷^Vðp Ð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õ   0  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ó   6  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  D  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  V  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_fnj  s6   ø€ Ü×&Ñ&Ø$ T FÐ*OÜ×0Ñ0Ð1ð 27ð7ó
ð 	
r?   rJ   )r	  r
  s   ` r6   Ú_block_list_in_opsetr  i  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  t  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_helperr8  ²  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_boolrA  Ï  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_numberrF  Õ  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�   rC  rŽ   é
   úAscending is not supportedÚTopKé   ©r   Úoutputs)r   Ú	largest_irP  )rõ   r•   rK   r–   Úint64r.  )rt   r1  rÞ   Ú	decendingÚoutÚshape_Ú	dim_size_s          r6   Ú_sort_helperrW  ç  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 )NrM  rI  r�   rC  rŽ   rk   r  r  rK  rL  rN  rO  )r   rQ  Úsorted_irP  )rõ   r&   r•   rK   r–   rR  r"  r  r   r±   r#  rð   r%  r.  )rt   r1  ÚkrÞ   ÚlargestÚsortedrT  s          r6   Ú_topk_helperr]  ú  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   r1  ÚotherÚ_lt8Ú_lt9s        r6   Ú
_lt_helperre    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 )NrK  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_warningrk    s]   € ä ×:Ñ:¸bÒ@‰Àoð ô ‡M�MØ2Ø
ñ	ðñ	ô ”×2Ñ2Ó3ñ	4ð7Pñ	Põ
r?   c                óŒ  — t        |«      dk(  r|S 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�   rC  rŽ   Ú	Unsqueeze©Úaxes_iz<Opset version must be >= 13 for Unsqueeze with dynamic axes.)	rb   rQ   r.  r•   rK   r–   Úlongr   r/   )rt   r1  rp  r2  s       r6   Ú_unsqueeze_helperrr  +  s¯   € Ü
ˆ6ƒ{�aÒàˆÜ	�f˜Q‘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   rm  r�   rC  rŽ   ÚSqueezero  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–   rq  r   r/   rß   rr  )rt   r1  rp  r2  Úaxes_tÚ	axes_ranks         r6   Ú_squeeze_helperrw  <  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   rm  r�   rC  rŽ   Ú	ReduceSum)Ú
keepdims_iÚnoop_with_empty_axes_i©rp  rz  )rH   r.  r&   r•   rK   r–   rq  )rt   r1  rp  rz  r{  s        r6   Ú_reducesum_helperr}  U  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   rN  r�   rC  rŽ   r  r  rJ  r   ©r2  r4  r3  ÚDivÚConcatr  ç      ð?)rH   r&   r•   rK   ÚonesÚfloat32rð   r%  r:  r8  ÚsysÚmaxsizeÚranger,   rÁ   râ   r–   )rt   r1  Úoutput_sizerÞ   ÚoffsetÚoffsetsÚdividendÚdivisorÚ
scale_dimsÚscalesr   Úscales_constants               r6   Ú_interpolate_size_to_scalesr�  t  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�   rN  rC  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�   rN  rC  rŽ   r   r�  r  r  r  r   )r•   rK   rƒ  r„  rß   r9   rÁ   r   rÇ   rr  rð   r%  r:  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   rN  r�  r   z.Both size and scales are None in __interpolate)rH   rk  r9   r-   rõ   rÁ   rÞ   r¼   r�  rg   rr  r‡  r•   r�  )	rt   r1  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   rz  Úselect_last_index_i©r   rz  )r.  r•   )r1  r   rz  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©  rJ  ÚConstantOfShaperk   rC  ÚReshaper   )r¼   r"  r•   rK   r–   rR  r7   )rt   r1  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_pixelrJ  r   rN  r  r  r  r�  r  rm  r�   rC  rŽ   ÚResizeç      è¿Úfloor©Ú coordinate_transformation_mode_sÚcubic_coeff_a_fÚmode_sÚnearest_mode_s)r™  rO   r•   r8  rð   r%  r#  r.  Ú"_optional_input_placeholder_tensorrK   r–   r„  )rt   r1  rˆ  ru   rŽ  r˜  Úcoordinate_transformation_modeÚ
input_sizeÚinput_size_begÚ	empty_roiÚempty_scalesri  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Þ   ri  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¶  rJ  r   rN  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  rm  r�   rC  rŽ   r·  r¸  r¹  rº  zinterpolate (with scales)r¢  )rH   r9   r-   r¼   r•   r8  rg   rÞ   ÚAttributeErrorrg  rh  rß   rõ   rr  r‡  rð   r%  r#  r.  r¿  rK   r–   r„  r�  )rt   r1  rì   r›  r—  r˜  Úrecompute_scale_factorrÀ  rÁ  r£  Úrankr   rÃ  rÄ  rŽ  s                  r6   Ú__interpolate_helperrÊ  F  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 )NrK  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   rP  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   rC  ÚOneHotr�  r  ÚTile)r/  rß  rà  rÅ   r•   rK   r!  rQ   rH   rß   r–   rƒ  rR  )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#  )ÚscalarsrE  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 )NrK  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 )NrJ  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   )ÚexpandrK  rÒ  Ú
index_fillzinput rank not accessibler   rJ  )r/  rú  r.  rÓ  rÎ  rÁ   rÞ   rõ   r7   rr  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Ž   rm  rk   zReshape with allowzero=1é   r¬  )Úallowzero_i)	rH   r&   r•   rK   r!  r.  r  r   r  )rt   r1  rM   Ú	allowzeros       r6   r"  r"  M  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‚  rC  r�   rŽ   g        rè   Ú	Transpose)r   rN  rk   )Úperm_iF)r/  r  ræ   r¼   r   r/   rK   r–   r   r±   r²   r  r•   r"  rR  )rt   r1  ÚweightÚbiasÚrunning_meanÚrunning_varr  Ú
batch_sizeÚchannel_sizeÚweight_valueÚ
bias_valueÚ
reshape_inÚtrans_ins                r6   Ú_batchnorm_helperr  [  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-   rg  rh  )Ú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 )NrJ  r   )r2  r3  r4  r�   rè   rC  rŽ   rk   r�  r   )Ú_reshape_from_tensor)r•   r8  rK   r–   rq  r/  r'  )rt   r1  Ú	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_staticr1  Î  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æ   )r’   r   r¶   s     €r6   r”   z*_handle_reduce_dim_none.<locals>.<genexpr>á  s#   øè ø€ ò  Ø/0Ô˜T 1Ó%¨Õ*ñ ùs   ƒrk   ©rz  r   )rß   r™   r‡  r•   )rt   r¶   rø   rÉ  s    `  r6   Ú_handle_reduce_dim_noner:  ß  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  rm  ÚDequantizeLinearú Attribute axis is not supported.r  )rd   rb   rR   r   r±   r²   r  rð   r%  ÚUINT8r•   r:  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.
    rm  ÚQuantizeLinearr>  r  r  r   r<  r  rÕ   )r¼   r   r  r  r   r±   r²   r³   r:  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.
    ÚMulrJ  r«  r   rC  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_helperrQ  W  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²   )r’   ÚelemÚ
base_dtypes     €r6   r”   z'args_have_same_dtype.<locals>.<genexpr>p  s,   øè ø€ ò ØEIŒ×!Ñ!×,Ñ,¨TÓ2°jÕ@ñùs   ƒ,/)r   r±   r²   Úall)ru   Úhas_same_dtyperU  s     @r6   Úargs_have_same_dtyperX  m  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±   r:  rT   r²   r>  r   r  ÚisCompleteTensorr   r/   r´   ré   r•   r  )rt   rø   ru   rv   rZ  r[  r0   Údtype_0Úrequire_castr1  Úinput_scalar_typer   r¶   s                r6   Ú_op_with_optional_float_castra  v  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_inputrc  «  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   rf  s   `` r6   Ú_apply_paramsrg  ·  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Þ   r|  r�   rC  rŽ   r9  )	rc  r:  rR   r.  r•   r&   rK   r–   rq  )	rt   r¶   rÞ   r­  r1   Údim_listr2  Ú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   )rm  rl  rn  s   `` r6   Ú_reduce_op_symbolic_helperrp  À  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_countru  á  s'   ø€ Ü‡_�_�RÓóUó ðUð €Nr?   c                óF   ‡‡‡— t        | ‰¬«      Št        ˆˆˆfd„«       }|S )N)rl  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	  rn  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 ry  rz  )
rt   r¶   rÞ   r­  r  r{  r|  r}  r	  rn  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€  rl  r	  rn  s	         €€€r6   Úreducez)_reduce_with_dtype_helper.<locals>.reduceõ  sk   ø€ ä	˜Ó	Ü	�C˜Ó	 ô	ó 
!ó 
ð	ñ" 3‘4¸ˆä	˜Ó	Ü	�C˜ 3¨Ó	/ô	ó 
0ó 
ð	ð" ˜ZÐ'Ð'r?   )rp  ru  )rj  r	  rl  r‚  rn  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   r9  ÚMaxr§  ©rZ  r   r­  rÞ   rj  r|  r�   rC  rŽ   ÚArgMaxr©  ©r•   ra  rR   r.  rK   r–   rq  )rt   r¶   Údim_or_yr­  rÞ   Úmaxr2  Ú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   r9  ÚMinr§  r‡  r   r­  rÞ   rj  r|  r�   rC  rŽ   ÚArgMinr©  r‰  )rt   r¶   rŠ  r­  rÞ   Úminr2  rŒ  s           r6   Ú_min_helperr”  8  rŽ  r?   c                óN   — | j                  d|«      }| j                  d|d¬«      S )NrJ  Ú
ReduceProdr   r9  )r•   )rt   r¶   rM   s      r6   Ú_numel_helperr—  L  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 )Nrj  Ú
ReduceMeanr   r9  r|  rk   rJ  r  r�   rŽ   r  r–  ÚSubrH  r  r  rC  r€  )
r.  r•   r—  rK   r–   rð   r%  r:  r,   rq  )rt   r1  rÞ   Ú
correctionr­  ÚmeanÚt_meanÚnum_elementsÚredudced_dimsÚsub_vÚsqr_subÚkeepdim_meanÚvarÚoneÚmulr2  s                   r6   Ú_var_mean_helperr¦  Q  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   )r2  r3  r4  r5  ÚLoop)Ún_blocksr  r  ÚSlicerH  r|  rj  r™  rC  r9  r…  )r   Úexport_trainingró   ÚRuntimeErrorr•   rK   r–   rð   r%  r@  rr  rø  r8  r…  r†  r   Úadd_op_with_blocksÚblockr   Ú_add_input_to_blockr¼   r}  r.  rq  Ú_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Úindices_startÚindices_endÚindices_rowÚ
embeddingsÚper_sample_weights_rowr2  Ú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°Ó<ÐÜ	×Ñ˜jÔ)à —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è   Frj  r�   rC  rŽ   r…  ÚAbsr|  r9  r�  r   rÌ  Úlinalg_vector_normr,  zord=0 not supportedÚNotÚEqualr  r  rk   ÚReduceL1)rÞ   r­  )r­  rN  ÚReduceL2ÚPowr€  r   r  )r¼   r"  r.  r•   rK   r–   rq  ÚmathÚinfr  rR  r!  r   r±   r²   r  r}  rp  r„  rR   )
rt   r¶   ÚordrÞ   r­  r  r2  r|  Ú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_trD  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_opsro  )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ù  r1  ú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ô  rA  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ô  )rj  r.   r	  r.   rl  r-   )rt   rù  r¶   rú  rÒ  r,   rÞ   zSequence[int] | Noner­  r-   r  rú  )¨Ú
__future__r   r‚   rn   rÐ  r…  rÜ   rg  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Úcollections.abcr   Ú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*  r8  r>  rA  rF  rW  r]  re  rk  rr  rw  r}  r�  r”  r™  r�  r¤  r²  rÅ  rÊ  rÐ  rÕ  rÝ  rè  rñ  rô  rø  r  r"  r  r  r%  r.  r1  r¿  r:  rš   rœ   rQ  rX  ra  rc  rg  rp  ru  rƒ  r�  r”  r—  r¦  rÇ  rÕ  r%  r?  rF  r;  r:  ÚFLOAT16rI  r#  ÚINT16r@  rØ   rÙ   r=  r³   Úcast_pytorch_to_onnxÚscalar_name_to_pytorchÚuint8Úint8Úshortr+   rR  rè  r,   rD  Ú	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‘  ðæ "ã Û Û Û 
Û Û ß HÕ Hß Rã ß  Ð  Ý ÷ >Ó =Ý 'Ý *ð 
×ÒÝ(å"áˆdƒ^€Ùˆdƒ^€Ù�Ó€ð ðñ
Ð ð   Ø ð	Bà
ðBð ðBð ó	BóJ#ó3ð
	Ø=ð	à ó	òò#ó$ó&óó.WðOØ&ðOàWóOðh Ø!Ø ñ	GØðGàðGð ðGð ð	Gð
 4óGóTòó&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?   