Ë
    P/æj^Ã  ã                   óT	  — d 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	 ddl
mZmZmZmZ ddlZddlmZmZmZmZmZmZmZmZ erddlmZ  ej4                  e«      Zej:                  j=                  ed«      Zg d¢Z dd	l!m"Z# d
„ Z$ G d„ d«      Z%i dejL                  “dejN                  “dejP                  “dejR                  “dejT                  “dejV                  “dejX                  “dejZ                  “dej\                  “dej^                  “dej`                  “dd„ “dejb                  “dejd                  “dejf                  “dejh                  “dejj                  “ejl                  ejn                  ejp                  ejr                  ejr                  ejt                  ejv                  ejx                  eeeeeejz                  ejz                  dœ¥Z>h d £Z?d!„ Z@d"ZAeAD ]J  ZBd#eB› �ZCd$eC› �ZD eEe%eC e@eB«      «        eFeeD«      e>eC<   e?jQ                  eC«       e j�                  eC«       ŒL dhZHe?eHz  ZIh d%£ZJh d&£ZKdhZLeJeLz  ZMh d'£ZNdd(hZOh d)£ZPeAD ]  ZBd#eB› �ZCePjQ                  eC«       Œ h d*£ZQh d+£ZRd,„ ZSd-„ ZTd.„ ZUd/„ ZVd0„ ZWd1„ ZXd2„ ZYd3„ ZZd4„ Z[d5„ Z\ejP                  ejx                  ejj                  eVeWeXeYeZeSeTeUe[e\d6œZ]d7„ Z^d8„ Z_d9„ Z`d:„ Zad;„ Zbd<„ Zcd=„ Zdd>„ Zed?„ Zfd@„ ZgdA„ ZhdB„ ZidC„ ZjejÖ                  e   ZldD„ ZmeAD ]'  ZBdEeB› �Zn emeB«      Zoenxeo_p        eo_         eEeleneo«       Œ) [o[B[ndF„ ZqdbdG„ZrdH„ ZsdI„ Zti e]¥i dJejê                  “dejL                  “deb“dKec“ded“dee“def“deg“de_“de`“dLes“dea“dMejn                  “dNeh“dOei“dPej“deq“¥eretdQœ¥ZveAD ]  ZBd#eB› �ZC eFeldEeB› �«      eveC<   Œ [B[C[A[ldR„ ZwdS„ ZxdT„ ZydU„ ZzdV„ Z{dW„ Z|dX„ Z}dY„ Z~eweyeze|e}e~dZœZe�j                   e�j                  d[œZ‚d\„ Zƒd]„ Z„d^„ Z…d_„ Z†d`„ Z‡ev�j                  «       D ]  \  Z‰ZŠ e†e‰eŠ«       Œ e�j                  «       D ]  \  Z‰ZŠ e‡e‰eŠ«       Œ da„ Z‹ev�j                  «       D ]D  \  Z‰ZŠe‰eJv r
 e‹e‰e«       Œe‰eNv r
 e‹e‰e«       Œ"e‰eLv se‰eKv r	 e‹e‰e«        e‹e‰e«        e‹e‰e«       ŒF [‰[Šy)cae  
This file does three things:
- Contains the definition of SymNode
- Installs all the magic methods into SymBool, SymFloat, SymFloat at import time
- Does not depend on sympy at import time

As this file is imported from within torch/__init__.py we do not want it to depend on SymPy
to avoid having to load SymPy at import time, as doing so is *very* slow.
é    N)Ú	lru_cacheÚupdate_wrapper)ÚOptionalÚTypeÚTYPE_CHECKINGÚUnion)Ú	sym_floatÚsym_iteÚsym_maxÚsym_minÚsym_notÚSymBoolÚSymFloatÚSymInt)ÚShapeEnvÚsym_node)ÚSymNodeÚmethod_to_operatorÚmagic_methods)Úpy_sym_typesc                 óZ   — | t         u rt        S | t        u rt        S | t        u rt
        S | S ©N)Úboolr   Úintr   Úfloatr   )Úts    úa/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/fx/experimental/sym_node.pyÚ_to_symtyper   1   s+   € ØŒD�yÜˆØŒC�xÜˆØŒE�zÜˆØ€Hó    c                   óœ  — e Zd ZdZ	 	 dUdeeeeef      fd„Z	dVd„Z
dd defd„Zdefd	„Zed
„ «       Zed„ «       Zd„ ZdWd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zde j:                  fd„Z!dXd„Z"dXd„Z#dWdXd„Z$dXd „Z%dXd!„Z&dXd"„Z'dXd#„Z(dXd$„Z)dXd%„Z*dXd&„Z+dXd'„Z,dXd(„Z-dXd)„Z.dXd*„Z/dXd+„Z0dXd,„Z1dXd-„Z2dXd.„Z3dXd/„Z4dXd0„Z5dXd1„Z6dXd2„Z7dXd3„Z8dXd4„Z9dXd5„Z:dXd6„Z;dXd7„Z<dXd8„Z=dXd9„Z>dXd:„Z?dXd;„Z@dXd<„ZAdXd=„ZBdXd>„ZCdXd?„ZDdXd@„ZEdXdA„ZFdXdB„ZGdXdC„ZHdD„ ZIdE„ ZJdF„ ZKdXdG„ZLdH„ ZMdI„ ZNdJ„ ZOdK„ ZPdL„ ZQdM„ ZRdN„ ZSdO„ ZTdP„ ZUdQ„ ZVdR„ ZWdS„ ZXdT„ ZYy)Yr   z¤
    This is a type erased SymInt/SymFloat which we use to do actual operations.
    End users don't touch this.  Magic methods are NOT defined on this object.
    NÚhintc                 óÈ  ‡ — |‰ _         |‰ _        |‰ _        ˆ fd„}|��t        |«      |u s,t        |«      t	        |«      u sJ d|› dt        |«      › �«       ‚‰ j                  rC‰ j                  j
                  r- |«       }||k(  s!J |› d|› d‰ j                  › d�«       ‚ |«       }|‰ _        |‰ _        ‰ j                  xr ‰ j                  j
                  }	|	xr |‰ _	        y )Nc                  óÒ   •— ddl m}   | ‰j                  «      ry ‰j                  j	                  ‰j                  d¬«      }|�#t        |t        «      s‰j                  |«      n|}|S )Nr   ©Úfree_unbacked_symbolsT)Úcompute_hint)Ú%torch.fx.experimental.symbolic_shapesr%   ÚexprÚ	shape_envÚ_maybe_evaluate_staticÚ
isinstanceÚSymTypesÚpytype)r%   r!   Úselfs     €r   r&   z&SymNode.__init__.<locals>.compute_hintl   sZ   ø€ ÝSñ % T§Y¡YÔ/ØØ—>‘>×8Ñ8¸¿¹ÐQUÐ8ÓVˆDØÐÜ0:¸4ÄÔ0J�t—{‘{ 4Ô(ÐPT�ØˆKr   zCannot create SymNode of type z  with incompatible hint of type z != z (for ú))
Ú_exprr)   r-   Útyper   Ú_translation_validation_enabledr(   Ú_hintÚconstantÚfx_node)
r.   r(   r)   r-   r!   r4   r5   r&   Úcomputed_hintÚtx_validation_ens
   `         r   Ú__init__zSymNode.__init__D   sú   ø€ ð ˆŒ
Ø"ˆŒØˆŒô:	ð ÐÜ˜“: Ñ'¬4°«:¼ÀVÓ9LÑ+Lð Ø0Ø�(Ð:¼4À»:¸,ðHóÐLð �~Š~ $§.¡.×"PÒ"Pñ !-£�à˜MÒ)ðBà�V˜4 ˜¨f°T·Y±Y°K¸qÐAóBØ)ñ  “>ˆDØˆŒ
Ø;CˆŒð �N‰NÒM˜tŸ~™~×MÑMð 	ð (Ò3¨Gˆ�r   Úreturnc                 ó†   — t        | j                  || j                  | j                  | j                  | j
                  «      S r   )r   r0   r-   r3   r4   r5   )r.   r)   s     r   Úwith_shape_envzSymNode.with_shape_env”   s0   € ÜØ�J‰J˜	 4§;¡;°·
±
¸D¿M¹MÈ4Ï<É<ó
ð 	
r   Úotherc                 ó  — | j                   |j                   k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )r0   r-   r3   r4   r5   ©r.   r<   s     r   Ú	_value_eqzSymNode._value_eq™   sq   € ð �J‰J˜%Ÿ+™+Ñ%ò .Ø—‘˜uŸ|™|Ñ+ò.à—
‘
˜eŸk™kÑ)ò.ð —‘ §¡Ñ/ò.ð —‘ §¡Ñ-ð	
r   c                 ó†   — t        | j                  | j                  | j                  | j                  | j
                  f«      S r   )Úhashr0   r-   r3   r4   r5   ©r.   s    r   Ú_value_hashzSymNode._value_hash£   s,   € ä�T—Z‘Z §¡¨d¯j©j¸$¿-¹-ÈÏÉÐVÓWÐWr   c                 óL   — | j                   j                  | j                  «      S r   )r)   Úreplacer0   rB   s    r   r(   zSymNode.expr§   s   € à�~‰~×%Ñ% d§j¡jÓ1Ð1r   c                 ó   — | j                   S r   ©r3   rB   s    r   r!   zSymNode.hint«   s   € à�z‰zÐr   c                 ó   — | j                   d uS r   rG   rB   s    r   Úhas_hintzSymNode.has_hint¯   s   € Ø�z‰z Ð%Ð%r   c                 ó„   — | j                   €)|�|S | j                  j                  | j                  «      S | j                   S r   )r3   r)   Ú	size_hintr(   )r.   Úfallbacks     r   Úrequire_hintzSymNode.require_hint²   s:   € Ø�:‰:ÐØÐ#Ø�à—>‘>×+Ñ+¨D¯I©IÓ6Ð6Ø�z‰zÐr   c                 óZ   — | j                   j                  rt        | j                   «      S y r   )r(   Ú	is_numberr   rB   s    r   Úmaybe_as_intzSymNode.maybe_as_intº   s    € Ø�9‰9×ÒÜ�t—y‘y“>Ð!àr   c                 óv   — dd l }t        | j                  |j                  «      rt	        | j                  «      S y ©Nr   )Úsympyr+   r(   ÚFloatr   ©r.   rS   s     r   Úmaybe_as_floatzSymNode.maybe_as_floatÁ   s)   € Ûä�d—i‘i §¡Ô-Ü˜Ÿ™Ó#Ð#àr   c                 óp   — dd l }| j                  |j                  u ry| j                  |j                  u ryy )Nr   TF)rS   r(   ÚtrueÚfalserU   s     r   Úmaybe_as_boolzSymNode.maybe_as_boolÉ   s.   € Ûà�9‰9˜Ÿ
™
Ñ"ØØ�Y‰Y˜%Ÿ+™+Ñ%Øàr   c                 ó&   — | j                   t        u S r   )r-   r   rB   s    r   Úis_intzSymNode.is_intÓ   s   € Ø�{‰{œcÐ!Ð!r   c                 ó&   — | j                   t        u S r   )r-   r   rB   s    r   Úis_floatzSymNode.is_floatÖ   s   € Ø�{‰{œeÐ#Ð#r   c                 ó&   — | j                   t        u S r   )r-   r   rB   s    r   Úis_boolzSymNode.is_boolÙ   s   € Ø�{‰{œdÐ"Ð"r   c                 ó¢   — | j                   d uxr@ t        | j                   t        «      xr$ | j                   j                  j	                  «       S r   )r3   r+   r   ÚnodeÚis_nested_intrB   s    r   rc   zSymNode.is_nested_intÜ   sA   € ð �J‰J˜dÐ"ò 0Ü˜4Ÿ:™:¤vÓ.ò0à—
‘
—‘×-Ñ-Ó/ð	
r   c                 óŒ   — t        |«      t        u sJ ‚dd l}t        |j	                  |«      | j
                  t        |||¬«      S ©Nr   )r4   r5   )r1   r   rS   r   ÚIntegerr)   ©r.   ÚnumrS   s      r   Úwrap_intzSymNode.wrap_intä   s?   € Ü�C‹yœCÑÐÐÛäØ�M‰M˜#Ó §¡´°SÀ3ÐPSô
ð 	
r   c                 óŒ   — t        |«      t        u sJ ‚dd l}t        |j	                  |«      | j
                  t        |||¬«      S re   )r1   r   rS   r   rT   r)   rg   s      r   Ú
wrap_floatzSymNode.wrap_floatì   s?   € Ü�C‹yœEÑ!Ð!Ð!ÛäØ�K‰K˜Ó˜dŸn™n¬e°SÀ3ÐPSô
ð 	
r   c                 óž   — t        |«      t        u sJ ‚dd l}t        |r|j                  n|j
                  | j                  t        |||¬«      S re   )r1   r   rS   r   rX   rY   r)   rg   s      r   Ú	wrap_boolzSymNode.wrap_boolô   sF   € Ü�C‹yœDÑ Ð Ð ÛäÙˆE�JŠJ 5§;¡;Ø�N‰NÜØØØô
ð 	
r   c                 ó   — | S r   © rB   s    r   ÚclonezSymNode.clone  s   € Øˆr   c                 ó   — | j                   › S r   )r(   rB   s    r   ÚstrzSymNode.str  s   € Ø—)‘)�Ðr   c                 ó"   — | j                  «       S r   ©rr   rB   s    r   Ú__str__zSymNode.__str__  s   € Ø�x‰x‹zÐr   c                 óz  — d| j                   › d| j                  › d| j                  › �g}| j                  �|j	                  d| j                  › �«       | j
                  �|j	                  d| j
                  › �«       | j                  �|j	                  d| j                  › �«       dj                  |«      dz   S )	NzSymNode(z, shape_env=z	, pytype=zhint=z	constant=zfx_node=z, r/   )r0   r)   r-   r3   Úappendr4   r5   Újoin)r.   Úreps     r   Ú__repr__zSymNode.__repr__
  s¤   € à�t—z‘z�l ,¨t¯~©~Ð.>¸iÈÏÉÀ}ÐUð
ˆð �:‰:Ð!Ø�J‰J˜˜tŸz™z˜lÐ+Ô,Ø�=‰=Ð$Ø�J‰J˜ 4§=¡= /Ð2Ô3Ø�<‰<Ð#Ø�J‰J˜ $§,¡, Ð0Ô1Ø�y‰y˜‹~ Ñ#Ð#r   c                 ó"   — | j                  «       S r   rt   rB   s    r   Ú_graph_reprzSymNode._graph_repr  s   € à�x‰x‹zÐr   c                 ó"   — | j                  «       S r   )Ú_absrB   s    r   ÚabszSymNode.abs  ó   € Ø�y‰y‹{Ðr   c                 ó"   — | j                  «       S r   )Ú_posrB   s    r   ÚposzSymNode.pos  r€   r   c                 ó$   — | j                  |«      S r   )Ú_round)r.   Úndigitss     r   ÚroundzSymNode.round"  s   € Ø�{‰{˜7Ó#Ð#r   c                 ó"   — | j                  «       S r   )Ú_truncrB   s    r   ÚtrunczSymNode.trunc%  ó   € Ø�{‰{‹}Ðr   c                 ó$   — | j                  |«      S r   )Ú_addr>   s     r   ÚaddzSymNode.add(  ó   € Ø�y‰y˜ÓÐr   c                 ó$   — | j                  |«      S r   )Ú_subr>   s     r   ÚsubzSymNode.sub+  r�   r   c                 ó$   — | j                  |«      S r   )Ú_mulr>   s     r   ÚmulzSymNode.mul.  r�   r   c                 ó$   — | j                  |«      S r   )Ú_modr>   s     r   ÚmodzSymNode.mod1  r�   r   c                 ó$   — | j                  |«      S r   )Ú
_float_powr>   s     r   Ú	float_powzSymNode.float_pow4  s   € Ø�‰˜uÓ%Ð%r   c                 ó$   — | j                  |«      S r   )Ú_pow_by_naturalr>   s     r   Úpow_by_naturalzSymNode.pow_by_natural7  s   € Ø×#Ñ# EÓ*Ð*r   c                 ó$   — | j                  |«      S r   )Ú_and_r>   s     r   Úand_zSymNode.and_:  s   € Ø�z‰z˜%Ó Ð r   c                 ó$   — | j                  |«      S r   )Ú_or_r>   s     r   Úor_zSymNode.or_=  r�   r   c                 ó$   — | j                  |«      S r   )Ú_float_truedivr>   s     r   Úfloat_truedivzSymNode.float_truediv@  s   € Ø×"Ñ" 5Ó)Ð)r   c                 ó$   — | j                  |«      S r   )Ú_int_truedivr>   s     r   Úint_truedivzSymNode.int_truedivC  ó   € Ø× Ñ  Ó'Ð'r   c                 ó$   — | j                  |«      S r   )Ú_int_floordivr>   s     r   Úint_floordivzSymNode.int_floordivF  ó   € Ø×!Ñ! %Ó(Ð(r   c                 ó$   — | j                  |«      S r   )Ú_lshiftr>   s     r   ÚlshiftzSymNode.lshiftI  ó   € Ø�|‰|˜EÓ"Ð"r   c                 ó$   — | j                  |«      S r   )Ú_rshiftr>   s     r   ÚrshiftzSymNode.rshiftL  r³   r   c                 ó"   — | j                  «       S r   )Ú_sym_notrB   s    r   r   zSymNode.sym_notO  ó   € Ø�}‰}‹Ðr   c                 ó$   — | j                  |«      S r   )Ú_eqr>   s     r   Úeqz
SymNode.eqR  ó   € Ø�x‰x˜‹Ðr   c                 ó$   — | j                  |«      S r   )Ú_ner>   s     r   Únez
SymNode.neU  r½   r   c                 ó$   — | j                  |«      S r   )Ú_gtr>   s     r   Úgtz
SymNode.gtX  r½   r   c                 ó$   — | j                  |«      S r   )Ú_ltr>   s     r   Últz
SymNode.lt[  r½   r   c                 ó$   — | j                  |«      S r   )Ú_ler>   s     r   Úlez
SymNode.le^  r½   r   c                 ó$   — | j                  |«      S r   )Ú_ger>   s     r   Úgez
SymNode.gea  r½   r   c                 ó"   — | j                  «       S r   )Ú_floorrB   s    r   ÚfloorzSymNode.floord  r‹   r   c                 ó"   — | j                  «       S r   )Ú_is_integerrB   s    r   Ú
is_integerzSymNode.is_integerg  s   € Ø×ÑÓ!Ð!r   c                 ó"   — | j                  «       S r   )Ú
_sym_floatrB   s    r   r	   zSymNode.sym_floatj  s   € Ø�‰Ó Ð r   c                 ó"   — | j                  «       S r   )Ú_sym_intrB   s    r   Úsym_intzSymNode.sym_intm  r¹   r   c                 ó"   — | j                  «       S r   )Ú_ceilrB   s    r   ÚceilzSymNode.ceilp  s   € Ø�z‰z‹|Ðr   c                 ó"   — | j                  «       S r   )Ú_negrB   s    r   ÚnegzSymNode.negs  r€   r   c                 ó$   — | j                  |«      S r   )Ú_sym_minr>   s     r   r   zSymNode.sym_minv  ó   € Ø�}‰}˜UÓ#Ð#r   c                 ó$   — | j                  |«      S r   )Ú_sym_maxr>   s     r   r   zSymNode.sym_maxy  rà   r   c                 ó&   — | j                  ||«      S r   )Ú_sym_ite)r.   Úthen_valÚelse_vals      r   r
   zSymNode.sym_ite|  s   € Ø�}‰}˜X xÓ0Ð0r   c                 ó&   — | j                  ||«      S r   )Ú_is_contiguous©r.   ÚsizesÚstridess      r   Úis_contiguouszSymNode.is_contiguous  s   € Ø×"Ñ" 5¨'Ó2Ð2r   c                 ó&   — | j                  ||«      S r   )Ú_is_channels_last_contiguous_2dré   s      r   Úis_channels_last_contiguous_2dz&SymNode.is_channels_last_contiguous_2d‚  ó   € Ø×3Ñ3°E¸7ÓCÐCr   c                 ó&   — | j                  ||«      S r   )Ú_is_channels_last_contiguous_3dré   s      r   Úis_channels_last_contiguous_3dz&SymNode.is_channels_last_contiguous_3d…  rð   r   c                 ó&   — | j                  ||«      S r   )Ú_is_channels_last_strides_2dré   s      r   Úis_channels_last_strides_2dz#SymNode.is_channels_last_strides_2dˆ  ó   € Ø×0Ñ0°¸Ó@Ð@r   c                 ó&   — | j                  ||«      S r   )Ú_is_channels_last_strides_3dré   s      r   Úis_channels_last_strides_3dz#SymNode.is_channels_last_strides_3d‹  r÷   r   c                 ó&   — | j                  ||«      S r   )Ú'_is_non_overlapping_and_dense_indicatorré   s      r   Ú&is_non_overlapping_and_dense_indicatorz.SymNode.is_non_overlapping_and_dense_indicatorŽ  s   € Ø×;Ñ;¸EÀ7ÓKÐKr   c                 ó$   — | j                  |«      S r   )r¤   r>   s     r   Úsym_orzSymNode.sym_or’  r½   r   c                 ó$   — | j                  |«      S r   )r¡   r>   s     r   Úsym_andzSymNode.sym_and•  r�   r   c                 ó$   — | j                  |«      S r   )r§   r>   s     r   ÚtruedivzSymNode.truediv™  r¯   r   c                 ó$   — | j                  |«      S r   )r®   r>   s     r   ÚfloordivzSymNode.floordivœ  r«   r   c                 ó$   — | j                  |«      S r   )r›   r>   s     r   ÚpowzSymNode.pow   s   € Ø�~‰~˜eÓ$Ð$r   c                 óX   — | j                  ||«      j                  t        | d«      «      S )Né   )rý   r¼   Úto_noderé   s      r   Úis_non_overlapping_and_densez$SymNode.is_non_overlapping_and_dense£  s)   € Ø×:Ñ:¸5À'ÓJ×MÑMÌgÐVZÐ\]ÓN^Ó_Ð_r   c                 ó&   — | j                  dd«      S ©NÚ r   )Ú	guard_intrB   s    r   Úint_zSymNode.int_¦  s   € Ø�~‰~˜b !Ó$Ð$r   c                 óÚ   — | j                   j                  | j                  | j                  | j                  ¬«      }	 t        |«      S # t        $ r t        j                  d|«       ‚ w xY w)N©r5   zFailed to convert to int: %s)	r)   Úevaluate_exprr(   r!   r5   r   Ú	ExceptionÚlogÚwarning©r.   ÚfileÚlineÚrs       r   r  zSymNode.guard_intª  sZ   € ð �N‰N×(Ñ(¨¯©°D·I±IÀtÇ|Á|Ð(ÓTˆð	Ü�q“6ˆMøÜò 	Ü�K‰KÐ6¸Ô:Øð	úó   ¾
A	 Á	!A*c                 óÚ   — | j                   j                  | j                  | j                  | j                  ¬«      }	 t        |«      S # t        $ r t        j                  d|«       ‚ w xY w)Nr  zFailed to convert to float: %s)	r)   r  r(   r!   r5   r   r  r  r  r  s       r   Úguard_floatzSymNode.guard_float´  sZ   € ð �N‰N×(Ñ(¨¯©°D·I±IÀtÇ|Á|Ð(ÓTˆð	Ü˜“8ˆOøÜò 	Ü�K‰KÐ8¸!Ô<Øð	úr  c                 óÚ   — | j                   j                  | j                  | j                  | j                  ¬«      }	 t        |«      S # t        $ r t        j                  d|«       ‚ w xY w)Nr  úFailed to convert to bool: %s©	r)   r  r(   r!   r5   r   r  r  r  r  s       r   Ú
guard_boolzSymNode.guard_bool¾  sZ   € ð �N‰N×(Ñ(¨¯©°D·I±IÀtÇ|Á|Ð(ÓTˆð	Ü˜“7ˆNøÜò 	Ü�K‰KÐ7¸Ô;Øð	úr  c                 ó  — ddl m} | j                  «       r: || j                  «      s(| j                  j
                  s| j                  ||«      S | j                  j                  | j                  |› d|› �| j                  ¬«      S )Nr   r$   ú:r  )	r'   r%   rI   r(   r)   Ú+prefer_deferred_runtime_asserts_over_guardsr!  Údefer_runtime_assertr5   )r.   r  r  r%   s       r   Úexpect_truezSymNode.expect_trueÈ  st   € ÝOð �M‰MŒOÙ)¨$¯)©)Ô4Ø—N‘N×NÒNð —?‘? 4¨Ó.Ð.ð
 �~‰~×2Ñ2Ø�I‰I˜$˜˜q  Ð'°·±ð 3ó 
ð 	
r   c                 ó¼   — ddl m} | j                  | j                  d«      «      }|j	                  ||«      }|r!| j                  «       s |t        | «      «       |S )Nr   )Ú_advise_is_size)r'   r(  rÌ   ri   r&  rI   r   )r.   r  r  r(  Úbr  s         r   Úexpect_sizezSymNode.expect_sizeÚ  sJ   € ÝIà�G‰G�D—M‘M !Ó$Ó%ˆà�M‰M˜$ Ó%ˆñ
 �T—]‘]”_ÙœF 4›LÔ)Øˆr   c                 óÜ   — | j                   j                  | j                  | j                  | j                  d¬«      }	 t        |«      S # t        $ r t        j                  d|«       ‚ w xY w)aN  
        Like guard_bool, but if we encounter unbacked symbols, if those symbols
        are size-like, we will treat them as >= 2 for the purposes of the analysis.

        This CHANGES the runtime semantics, but all size-oblivious sites have been
        audited to ensure that the runtime semantics don't change in a material way.
        Acceptable runtime semantic changes are, e.g., squeeze() no longer dropping
        an unbacked one size, or a tensor reporting as non-contiguous even if it's
        contiguous if it would have been reported contiguous due to being empty.
        T)r5   Úsize_obliviousr  r   r  s       r   Úguard_size_obliviouszSymNode.guard_size_obliviousè  sa   € ð �N‰N×(Ñ(Ø�I‰I�t—y‘y¨$¯,©,Àtð )ó 
ˆð	Ü˜“7ˆNøÜò 	Ü�K‰KÐ7¸Ô;Øð	ús   ¿
A
 Á
!A+c                 ó&   — | j                  dd«      S r  )r!  rB   s    r   Úbool_zSymNode.bool_þ  s   € Ø�‰˜r 1Ó%Ð%r   c                  ó   — y)NTro   rB   s    r   Úis_symboliczSymNode.is_symbolic  ó   € Ør   c                  ó   — y r   ro   rB   s    r   Ú
nested_intzSymNode.nested_int  r2  r   c                  ó   — y)NFro   rB   s    r   Úis_constantzSymNode.is_constant  s   € Ør   )NN)r)   r   r9   r   r   )r9   r   )ZÚ__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r8   r;   r?   rC   Úpropertyr(   r!   rI   rM   rP   rV   rZ   r\   r^   r`   rc   ri   rk   rm   rp   rr   ru   rz   Úbuiltinsr|   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   r   r
   rì   rï   ró   rö   rú   rý   rÿ   r  r  r  r  r  r  r  r  r!  r&  r*  r-  r/  r1  r4  r6  ro   r   r   r   r   >   sþ  „ ñð ØñN4ð
 �u˜S %¨Ð-Ñ.Ñ/óN4ó`
ð

˜yð 
¨Tó 
ðX˜Só Xð ñ2ó ð2ð ñó ðò&óòòòò"ò$ò#ò
ò
ò
ò
òòòò
$ð˜XŸ\™\ó óóô$óó ó ó ó ó&ó+ó!ó ó*ó(ó)ó#ó#óóóóóóóóó"ó!óóóó$ó$ó1ó3óDóDóAóAóLòò ò)ó(ò%ò`ò%òòòò
ò$òò,&òòór   r   rƒ   r   rŽ   ÚandrÚ   r¼   rÏ   rŠ   r®   rÌ   rÃ   rÒ   c                 ó"   — | j                  «       S r   )rÒ   ©Úxs    r   ú<lambda>rA    s   € ˜AŸL™L›N€ r   rÉ   r²   rÆ   r˜   r•   )rÀ   rÝ   Úorr›   rž   r‡   r¶   r’   r	   r
   r   r   r   r§   rª   >	   r   rÝ   rƒ   rÚ   rÏ   rŠ   r×   r   r	   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó,   •—  t        | d‰› �«      «       S )NÚ_sym_)Úgetattr)r.   Únames    €r   Úfnz_get_sym_node_fn.<locals>.fn>  s   ø€ Ø,Œw�t˜u T F˜^Ó,Ó.Ð.r   ro   ©rG  rH  s   ` r   Ú_get_sym_node_fnrJ  =  s   ø€ ô/ð €Ir   )
ÚsqrtÚcosÚcoshÚsinÚsinhÚtanÚtanhÚasinÚacosÚatanÚsym_Ú_>   rB  r=  r
   r   >   rŽ   r•   r’   >   r‡   r×   rÒ   rB  >   r›   r	   rª   r§   >   rÚ   rÏ   rŠ   rž   >   r¼   rÌ   rÃ   rÉ   rÆ   rÀ   rB  r=  r   rÒ   r  c                 ó    — ddl m}  || |«      S )Nr   )ÚFloatTrueDiv)Útorch.utils._sympy.functionsrX  )Úar)  rX  s      r   Ú_sympy_float_truedivr[  ‰  ó   € Ý9á˜˜1ÓÐr   c                 ó    — ddl m}  || |«      S )Nr   )Ú
IntTrueDiv)rY  r^  )rZ  r)  r^  s      r   Ú_sympy_int_truedivr_  �  s   € Ý7á�a˜ÓÐr   c                 ó    — ddl m}  || |«      S )Nr   )ÚFloorDiv)rY  ra  )rZ  r)  ra  s      r   Ú_sympy_floordivrb  •  ó   € Ý5á�A�q‹>Ðr   c                 óf   — ddl m}m} | j                  r|j                  r	 || |«      S  || |«      S )Nr   ©ÚModÚ	PythonMod)rY  rf  rg  Úis_nonnegative)rZ  r)  rf  rg  s       r   Ú
_sympy_modri  ›  s.   € ß;à×Ò˜A×,Ò,Ù�1�a‹yÐá˜˜A‹Ðr   c                 ó    — ddl m}  || |«      S )Nr   )ÚPowByNatural)rY  rk  )rZ  r)  rk  s      r   Ú_sympy_pow_by_naturalrl  ¤  r\  r   c                 ó    — ddl m}  || |«      S )Nr   )ÚFloatPow)rY  rn  )rZ  r)  rn  s      r   Ú_sympy_float_powro  ª  rc  r   c                 ó.   — dd l }|j                  | |«      S rR   )rS   ÚAnd©rZ  r)  rS   s      r   Ú
_sympy_andrs  °  s   € Ûà�9‰9�Q˜‹?Ðr   c                 ó.   — dd l }|j                  | |«      S rR   )rS   ÚOrrr  s      r   Ú	_sympy_orrv  ¶  ó   € Ûà�8‰8�A�q‹>Ðr   c                 ó    — ddl m}  || |«      S )Nr   )ÚLShift)rY  ry  )rZ  r)  ry  s      r   Ú_sympy_lshiftrz  ¼  ó   € Ý3á�!�Q‹<Ðr   c                 ó    — ddl m}  || |«      S )Nr   )ÚRShift)rY  r}  )rZ  r)  r}  s      r   Ú_sympy_rshiftr~  Â  r{  r   )rŽ   r’   r•   r˜   rž   r›   r=  rB  r§   rª   r®   r²   r¶   c                 ó´  — dd l }t        | |j                  «      rf| j                  }t	        |«      dk(  rLt        |d   |j
                  «      r3|d   j                  r$|j                  |d   «      }|d   |k(  r||d   z  S t        | |j
                  «      r| |j                  | «      k(  st        | |j                  «      r|j                  | «      S  || «      S )Nr   é   r	  )rS   r+   ÚMulÚargsÚlenrT   rÒ   rf   )rZ  rH  rS   ÚaaÚcoefs        r   Ú_floor_ceil_helperr†  Ù  s´   € Ûä�!�U—Y‘YÔØ�V‰VˆÜˆr‹7�aŠ<œJ r¨!¡u¨e¯k©kÔ:¸rÀ!¹u×?OÒ?OØ—=‘=  A¡Ó'ˆDØ�!‰u˜Š}Ø˜b ™e‘|Ð#ä�1�e—k‘kÔ"Ø�—‘˜qÓ!Ò!Ü�a˜Ÿ™Ô'à�}‰}˜QÓÐÙˆa‹5€Lr   c                 ó   — ddl m}  || «      S )Nr   )Ú
FloorToInt)rY  rˆ  )rZ  rˆ  s     r   Ú_sympy_floorr‰  ë  ó   € Ý7á�a‹=Ðr   c                 ó   — ddl m}  || «      S )Nr   )Ú
TruncToInt)rY  rŒ  )rZ  rŒ  s     r   Ú_sympy_truncr�  ó  rŠ  r   c                 ó   — ddl m}  || «      S )Nr   )Ú	CeilToInt)rY  r�  )rZ  r�  s     r   Ú_sympy_ceilr�  ù  s   € Ý6á�Q‹<Ðr   c                 ó.   — dd l }|j                  | |«      S rR   )rS   ÚEqrr  s      r   Ú	_sympy_eqr“  ÿ  rw  r   c                 ó.   — dd l }|j                  | |«      S rR   )rS   ÚNerr  s      r   Ú	_sympy_ner–    rw  r   c                 ó.   — dd l }|j                  | |«      S rR   )rS   ÚGtrr  s      r   Ú	_sympy_gtr™    rw  r   c                 ó.   — dd l }|j                  | |«      S rR   )rS   ÚLtrr  s      r   Ú	_sympy_ltrœ    rw  r   c                 ó.   — dd l }|j                  | |«      S rR   )rS   ÚLerr  s      r   Ú	_sympy_lerŸ    rw  r   c                 ó.   — dd l }|j                  | |«      S rR   )rS   ÚGerr  s      r   Ú	_sympy_ger¢    rw  r   c                 ó    — ddl m}  || |«      S )Nr   )ÚMin)rY  r¤  )rZ  r)  r¤  s      r   Ú
_sympy_minr¥  #  ó   € Ý0áˆq�!‹9Ðr   c                 ó    — ddl m}  || |«      S )Nr   ©ÚMax)rY  r©  )rZ  r)  r©  s      r   Ú
_sympy_maxrª  )  r¦  r   c                 ó6   — dd l }|j                  || f|df«      S )Nr   T)rS   Ú	Piecewise)rZ  r   ÚfrS   s       r   Ú
_sympy_iter®  /  s   € Ûà�?‰?˜A˜q˜6 A t 9Ó-Ð-r   c                 ó   ‡ — ˆ fd„}|S )Nc                 ór   •— dd l } t        |j                  j                  j                  d‰› �«      | «      S )Nr   ÚOpaqueUnaryFn_)rY  rF  ÚutilsÚ_sympyÚ	functions)rZ  ÚtorchrG  s     €r   rH  z_get_sym_math_fn.<locals>.fn9  s1   ø€ Û+àMŒw�u—{‘{×)Ñ)×3Ñ3°~ÀdÀVÐ5LÓMÈaÓPÐPr   ro   rI  s   ` r   Ú_get_sym_math_fnr¶  8  s   ø€ ôQð
 €Ir   Ú_sympy_c                 ó,   — dd l }|j                  | «      S rR   )rS   ÚAbs)rZ  rS   s     r   Ú
_sympy_absrº  J  s   € Ûà�9‰9�Q‹<Ðr   c                 ó8   — ddl m}m} |€ || «      S  || |«      S )Nr   )ÚRoundDecimalÚ
RoundToInt)rY  r¼  r½  )Únumberr†   r¼  r½  s       r   Ú_sympy_roundr¿  P  s"   € ßEà€Ù˜&Ó!Ð!á˜F GÓ,Ð,r   c                 ó   — ddl m}  || «      S ©Nr   )ÚToFloat)rY  rÂ  )rZ  rÂ  s     r   Ú_sympy_sym_floatrÃ  Y  s   € Ý4ñ �1‹:Ðr   c                 ód   — dd l }ddlm} |j                   ||j	                  | «      «      | «      S rÁ  )rS   rY  rÂ  r’  rÏ   )rZ  rS   rÂ  s      r   Ú_sympy_is_integerrÅ  a  s&   € Ûå4à�8‰8‘G˜EŸK™K¨›NÓ+¨QÓ/Ð/r   r   rÀ   r	   rÝ   r   r   r
   )r‡   rÒ   c                 ó`   — t        | «      }t        | |t        t        |dz
  dd«      «      «      S )Nr	  éÿÿÿÿ)rƒ  Úsympy_is_contiguous_genericÚlistÚrange)rê   rë   Údims      r   Úsympy_is_contiguousrÌ  ˆ  s,   € Ü
ˆe‹*€CÜ& u¨g´t¼EÀ#ÈÁ'È2ÈrÓ<RÓ7SÓTÐTr   c                 ó˜  — dd l }t        | «      }t        |«      |k7  r|j                  S |j                  }|j	                  d«      }|D ]G  }||j                  | |   |j	                  d«      «      |j                  ||   |«      z  z  }|| |   z  }ŒI t        |«      D ])  }||j                  | |   |j	                  d«      «      z  }Œ+ |S )Nr   r	  )rS   rƒ  rY   rX   rf   r’  rÊ  )rê   rë   Ú	dim_orderrS   rË  rì   ÚzÚds           r   rÈ  rÈ  �  sÌ   € Ûä
ˆe‹*€Cä
ˆ9ƒ~˜ÒØ�{‰{Ðà—J‘J€MØ�‰�aÓ€Aàò ˆØ˜Ÿ™ %¨¡(¨E¯M©M¸!Ó,<Ó=ÀÇÁÈÐQRÉÐUVÓ@WÑWÑWˆØ	ˆU�1‰X‰‰ðô �3‹Zò >ˆØ˜Ÿ™ %¨¡(¨E¯M©M¸!Ó,<Ó=Ñ=‰ð>àÐr   c                 ó    — t        | |g d¢«      S ©N)r	  é   r€  r   ©rÈ  ©rê   rë   s     r   Ú$sympy_is_channels_last_contiguous_2drÖ  ¥  s   € Ü& u¨g²|ÓDÐDr   c                 ó    — t        | |g d¢«      S ©N)r	  é   rÓ  r€  r   rÔ  rÕ  s     r   Ú$sympy_is_channels_last_contiguous_3drÚ  ©  s   € Ü& u¨g²ÓGÐGr   c                 ó|  — dd l }ddlm} t        | «      }|t        |«      k7  r|j                  S |j                  d«      }|j                  }||j                  |d   d«      z  }|D ]R  }||j                  | |   d«      ||   |k\  z  z  }|dk(  r||j                  ||d   «      z  }||    || |   d«      z  }ŒT |S )Nr   r¨  r	  )rS   rY  r©  rƒ  rY   rf   rX   r•  )	rê   rë   rÎ  rS   r©  rË  Úmr  rÐ  s	            r   Ú&sympy_is_channels_last_strides_genericrÝ  ­  sÒ   € Ûå0ä
ˆe‹*€Cà
Œc�)‹nÒØ�{‰{Ðà�‰�aÓ€AØ�
‰
€Að ˆ�‰�'˜!‘*˜aÓ	 Ñ €Aàò *ˆØ	ˆU�X‰X�e˜A‘h Ó" g¨a¡j°A¡oÑ6Ñ6ˆð �Š6Ø�—‘˜!˜W Q™ZÓ(Ñ(ˆAð �A‰J™˜U 1™X qÓ)Ñ)‰ð'*ð* €Hr   c                 ó    — t        | |g d¢«      S rÒ  ©rÝ  rÕ  s     r   Ú!sympy_is_channels_last_strides_2drà  Õ  s   € Ü1°%¸Â,ÓOÐOr   c                 ó    — t        | |g d¢«      S rØ  rß  rÕ  s     r   Ú!sympy_is_channels_last_strides_3drâ  Ù  s   € Ü1°%¸Â/ÓRÐRr   c                 ó"   — ddl m}  |g | ¢|¢­Ž S )Nr   )Ú!IsNonOverlappingAndDenseIndicator)rY  rä  )rê   rë   rä  s      r   Ú-_sympy_is_non_overlapping_and_dense_indicatorrå  Ý  s   € ÝNá,Ð>¨eÐ>°gÒ>Ð>r   )rì   rï   ró   rö   rú   rý   )r   r   c                 ó  — t        |t        «      r|j                  S t        |«      t        u r| j                  |«      S t        |«      t        u r| j                  |«      S t        |«      t        u r| j                  |«      S t        S r   )r+   r,   rb   r1   r   rm   r   ri   r   rk   ÚNotImplemented)r.   rh   s     r   r
  r
  ô  sn   € Ü�#”xÔ Ø�x‰xˆÜ	ˆc‹”dÑ	Ø�~‰~˜cÓ"Ð"Ü	ˆc‹”cÑ	Ø�}‰}˜SÓ!Ð!Ü	ˆc‹”eÑ	Ø�‰˜sÓ#Ð#ô Ðr   c                 ó  — t        | t        «      r| j                  �| j                  S | j                  «       rt	        | «      S | j                  «       rt        | «      S | j                  «       rt        | «      S t        d| › �«      ‚)Nzunrecognized return type )
r+   r   r4   r\   r   r^   r   r`   r   ÚAssertionErrorr?  s    r   Ú	wrap_noderê    sk   € ä�!”WÔ !§*¡*Ð"8Ø�z‰zÐØ‡x�x„zÜ�a‹yÐØ	
�‰ŒÜ˜‹{ÐØ	
�‰ŒÜ�q‹zÐäÐ8¸¸Ð<Ó=Ð=r   c                 ó   — t         |    S r   )ÚMETHOD_TO_OPERATOR)Úmethods    r   r   r     s   € Ü˜fÑ%Ð%r   c                 óF  ‡ ‡—  t        d«      ‰«      Š‰ t        v r‰ › d�}n‰ }ˆˆ fd„}ˆˆ fd„}‰ t        v rt        t        d|› �|«       y ‰ dk(  rˆˆ fd„}t        t        d|› �|«       y ‰ dk(  rd	ˆˆ fd„	}t        t        d|› �|«       y t        t        d|› �|«       y )
Né   rV  c           
      óÞ  •— ddl m}m} ddlm} t        ‰«      }d }| j                  �)|j                  � || j                  |j                  «      }t        j                  ‰«      }|r'|�%t        |  |t        | «      t        |«      «      «      S  |«       r(t        |  ||t        | «      t        |«      fi «      «      S t        |t        «      sJ ‚	 ‰dk(  rÌddlm}m}	 | j                   }
| j"                  j$                  s(|
j'                  | j"                  «      j(                  dk\  r\|j"                  j$                  s(|
j'                  |j"                  «      j(                  dk\  r || j"                  |j"                  «      }n; |	| j"                  |j"                  «      }n ‰| j"                  |j"                  «      } ||«      }t0        j3                  d‰| j"                  |j"                  |«       ‰t4        v rt6        }nF‰t8        v rt:        }n7| j<                  t6        u s|j<                  t6        u rt6        }n| j<                  }|�|�t        |t>        «      s ||«      }| j                   jA                  || jB                  |jB                  f«      \  }}t        || j                   |||¬«      S # t*        $ r. t,        j/                  d‰| j"                  |j"                  «       ‚ w xY w)	Nr   ©Úget_proxy_modeÚhandle_sym_dispatch©Úsafe_expandr˜   re  úfailed to eval %s(%s, %s)z%s %s %s -> %sr  )"Ú"torch.fx.experimental.proxy_tensorrò  ró  r'   rõ  r   r!   Ú alternate_impl_if_hinted_methodsÚgetr
  rê  r+   r   rY  rf  rg  r)   r(   rh  Úbound_sympyÚlowerr  r  r  Úsym_node_logÚdebugÚalways_float_magic_methodsr   Úalways_bool_magic_methodsr   r-   r,   Ú_create_fx_call_functionr5   )r.   r<   rò  ró  rõ  ÚopÚout_hintÚalternate_implrf  rg  r)   Úoutr-   r5   rV  Úfuncrí  s                  €€r   Úbinary_magic_implz+_make_node_magic.<locals>.binary_magic_impl  sm  ø€ ÷	
õ 	Fä Ó'ˆàˆØ�9‰9Ð  U§Z¡ZÐ%;Ù˜$Ÿ)™) U§Z¡ZÓ0ˆHä9×=Ñ=¸fÓEˆÙ˜hÐ2Ü˜4¡´	¸$³ÄÈ5ÓAQÓ!RÓSÐSáÔÜØÑ)¨"¬y¸«Ä	È%Ó@PÐ.QÐSUÓVóð ô ˜%¤Ô)Ð)Ð)ð	Ø˜ŠßGð !ŸN™N�	à—I‘I×,Ò,Ø ×,Ñ,¨T¯Y©YÓ7×=Ñ=ÀÒBà—J‘J×-Ò-Ø ×,Ñ,¨U¯Z©ZÓ8×>Ñ>À!ÒCá˜dŸi™i¨¯©Ó4‘Cá# D§I¡I¨u¯z©zÓ:‘Cñ ˜4Ÿ9™9 e§j¡jÓ1�ñ ˜#ÓˆÜ×ÑÐ+¨V°T·Y±YÀÇ
Á
ÈCÔPð Ô/Ñ/Ü‰FØÔ0Ñ0Ü‰FØ�[‰[œEÑ! U§\¡\´UÑ%:Ü‰Fà—[‘[ˆFð ÐØÐ$Ü˜x¬Ô2á˜hÓ'ˆHð —^‘^×<Ñ<Ø�—‘˜uŸ}™}Ð-ó
‰
ˆ�ô �s˜DŸN™N¨F°HÀgÔNÐNøôE ò 	Ü�K‰KÐ3°V¸T¿Y¹YÈÏ
É
ÔSØð	ús   ÃC.J5 Ê57K,c           	      ó¸  •— ddl m}m} ddlm} t        ‰«      } |«       rt        |  ||t        | «      fi «      «      S | j                  }‰dk(  s‰dk(  r| j                  j                  |«      }	  ‰|«      }t        j                  d‰||«       d }| j                   � || j                   «      } ||«      }‰t"        v rt$        }n*‰t&        v rt(        }n‰t*        v rt,        }n| j.                  }| j                  j1                  || j2                  f«      \  }	}
t5        || j                  |||	¬«      S # t        $ r t        j                  d‰|«       ‚ w xY w)	Nr   rñ  rô  rÏ   Úceilingzfailed to eval %s(%s)z%s %s -> %sr  )r÷  rò  ró  r'   rõ  r   r
  rê  r(   r)   Ú_simplify_floor_divr  r  r  rü  rý  r!   Úalways_int_magic_methodsr   rÿ  r   rþ  r   r-   r   r5   r   )r.   rò  ró  rõ  r  r(   r  r  r-   r5   rV  r  rí  s              €€r   Úunary_magic_implz*_make_node_magic.<locals>.unary_magic_implk  sA  ø€ ÷	
õ 	Fä Ó'ˆÙÔÜ˜4Ñ!4°R¼)ÀD»/Ð9KÈRÓ!PÓQÐQà�y‰yˆØ�WÒ ¨)Ò 3Ø—>‘>×5Ñ5°dÓ;ˆDð	Ù�t“*ˆCô 	×Ñ˜=¨$°°cÔ:ØˆØ�9‰9Ð Ù˜$Ÿ)™)“}ˆHÙ˜#ÓˆàÔ-Ñ-Ü‰FØÔ0Ñ0Ü‰FØÔ1Ñ1Ü‰Fà—[‘[ˆFà—^‘^×<Ñ<¸RÀ$Ç,Á,ÀÓQ‰
ˆ�Ü�s˜DŸN™N¨F°HÀgÔNÐNøô' ò 	Ü�K‰KÐ/°¸Ô>Øð	ús   Á2D7 Ä7"Er
   c                 óž  •— ddl m}m} ddlm} | j
                  r|j
                  n|j
                  } |«       r6t        |  |t        t        | «      t        |«      t        |«      fi «      «      S 	  ‰
| j                  |j                  |j                  «      } ||«      }| j                  j                  t        | j                  |j                  |j                  f«      \  }}	t!        || j                  |j"                  ||¬«      S # t        $ r9 t        j                  d‰| j                  |j                  |j                  «       ‚ w xY w)Nr   rñ  rô  zfailed to eval %s(%s, %s, %s)r  )r÷  rò  ró  r'   rõ  r!   r
  r
   rê  r(   r  r  r  r)   r   r5   r   r-   )Ú	pred_nodeÚ	then_nodeÚ	else_noderò  ró  rõ  r  r  r5   rV  r  rí  s             €€r   Úsym_ite_implz&_make_node_magic.<locals>.sym_ite_impl•  s,  ø€ ÷õ Jà)2¯ª�y—~’~¸Y¿^¹^ˆHÙÔÜØÙ'Üä% iÓ0Ü% iÓ0Ü% iÓ0ðð
 óóð ð
Ù˜9Ÿ>™>¨9¯>©>¸9¿>¹>ÓJ�ñ ˜cÓ"ˆCØ"×,Ñ,×EÑEÜ˜)×+Ñ+¨Y×->Ñ->À	×@QÑ@QÐRó‰JˆG�Qô Ø�Y×(Ñ(¨)×*:Ñ*:¸HÈgôð øô ò Ü—‘Ø3ØØ—N‘NØ—N‘NØ—N‘Nôð ðús   Á2(D
 Ä
AEr‡   c           	      óD  •— ddl m}m} ddlm} t
        j                  } |«       rt        |  ||t        | «      |fi «      «      S | j                  }	  ‰||«      } ||«      }|€t        }n| j                  }d }	| j                  � || j                  |«      }	| j                   g}
|�|
j#                  |«       | j$                  j'                  |t)        |
«      «      \  }}t+        || j$                  ||	|¬«      S # t        $ r t        j                  d‰||«       ‚ w xY w)Nr   rñ  rô  z!failed to eval %s(%s, ndigits=%s)r  )r÷  rò  ró  r'   rõ  r<  r‡   r
  rê  r(   r  r  r  r   r-   r!   r5   rw   r)   r   Útupler   )r.   r†   rò  ró  rõ  r  r(   r  r-   r  r‚  r5   rV  r  rí  s                €€r   Ú
round_implz$_make_node_magic.<locals>.round_implÂ  s  ø€ ÷õ Jä—‘ˆBÙÔÜØÑ-¨b´9¸T³?ÀGÐ2LÈbÓQóð ð —9‘9ˆDðÙ˜4 Ó)�ñ
 ˜cÓ"ˆCàˆÜ‘àŸ™�àˆHØ�y‰yÐ$Ù˜dŸi™i¨Ó1�ð —L‘L�>ˆDØÐ"Ø—‘˜GÔ$ØŸ™×@Ñ@ÀÄUÈ4Ã[ÓQ‰JˆG�QÜ˜3 §¡°¸È'ÔRÐRøô5 ò Ü—‘Ð?ÀÈÈwÔWØðús   Á	C< Ã<#Dr   )r   Ú2magic_methods_on_operator_with_trailing_underscoreÚunary_methodsÚsetattrr   )rí  r  Úmethod_attrr  r  r  r  s   ``     r   Ú_make_node_magicr    s´   ù€ ØŒ9�S‹>˜$Ó€DàÔCÑCØ˜ �l‰àˆõLOõ\$OðL ”ÑÜ”˜1˜[˜MÐ*Ð,<Õ=Ø	�9Ò	õ(	ôT 	”˜1˜[˜MÐ*¨LÕ9Ø	�7Ò	ö*	SôX 	”˜1˜[˜MÐ*¨JÕ7ä”˜1˜[˜MÐ*Ð,=Õ>r   c                 óÐ   ‡ ‡— ˆˆ fd„}t        t        d‰ › �|«       ˆˆ fd„}t        t        j                  t
           ‰ «      s#t        t        j                  t
           ‰ |«       y y )Nc                 ó"  •— ddl m}m} t        t        j
                  t           ‰«      } |«       rDt        |  |||D �cg c]  }t        |«      ‘Œ c}|D �cg c]  }t        |«      ‘Œ c}fi «      «      S |D �cg c]  }|j                  ‘Œ }}|D �cg c]  }|j                  ‘Œ }}	  ‰||«      }	g }
d }|D ]+  }|j                  € nX|
j                  |j                  «       Œ- g }|D ]+  }|j                  € n&|j                  |j                  «       Œ-  ||
|«      }‰j                  d«      rt         }nt"        }t%        |	| j&                  ||«      S c c}w c c}w c c}w c c}w # t        $ r t        j                  d‰||«       ‚ w xY w)Nr   rñ  rö  Ú
_indicator)r÷  rò  ró  rF  ÚsysÚmodulesr7  r
  rê  r(   r  r  r  r!   rw   Úendswithr   r   r   r)   )r.   rê   rë   rò  ró  r  ÚsÚ
size_exprsÚstride_exprsr  Ú
size_hintsr  Ústride_hintsr-   r  rí  s                 €€r   Úsizes_strides_implz4_make_node_sizes_strides.<locals>.sizes_strides_implö  sŠ  ø€ ÷	
ô
 ”S—[‘[¤Ñ*¨FÓ3ˆÙÔÜØÙ#ØØ,1Ö2 q”i •lÒ2È7Ö4SÀa´Y¸qµ\Ò4SÐTØóóð ð ',Ö, �a—f“fÐ,ˆ
Ð,Ø(/Ö0 1˜Ÿ›Ð0ˆÐ0ð	Ù�z <Ó0ˆCð ˆ
ØˆØò 	8ˆAØ�v‰vˆ~ÙØ×Ñ˜aŸf™fÕ%ð	8ð
 ˆLØò 8�Ø—6‘6�>ÙØ×#Ñ# A§F¡FÕ+ð8ñ
 ˜j¨,Ó7�ð �?‰?˜<Ô(Ü‰FäˆFÜ�s˜DŸN™N¨F°HÓ=Ð=ùòE 3ùÒ4Sùò -ùÚ0øô ò 	Ü�K‰KÐ3°V¸ZÈÔVØð	ús#   ¿EÁEÁ:E!ÂE&Â)	E+ Å+#FrV  c                 ó"  •— dd l }ddlm} t        j                  | |«      D ]~  }t        |t        «      sŒt         t        |j                  ‰«      | D �cg c]  }t        |j                  |«      ‘Œ c}|D �cg c]  }t        |j                  |«      ‘Œ c}«      «      c S  ‰dk(  r	 || |«      S t         ‰| D �cg c]  }|j                  |«      ‘Œ c}|D �cg c]  }|j                  |«      ‘Œ c}«      «      S c c}w c c}w c c}w c c}w )Nr   )Ú!eval_is_non_overlapping_and_denserý   )rS   r'   r&  Ú	itertoolsÚchainr+   r   rê  rF  rb   r
  r   Úsympify)rê   rë   rS   r&  rZ  r)  r  rí  s         €€r   Úsizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_user+  sò   ø€ Ûõ	
ô —‘ ¨Ó0ò 	ˆAÜ˜!œVÕ$Ü Ø+”G˜AŸF™F FÓ+Ø5:Ö;°œ §¡¨Õ+Ò;Ø5<Ö=°œ §¡¨Õ+Ò=óóò ð	ð Ð=Ò=Ù4°U¸GÓDÐDô ÙØ/4Ö5¨!�U—]‘] 1Õ%Ò5Ø/6Ö7¨!�U—]‘] 1Õ%Ò7óóð ùò <ùÚ=ùò 6ùÚ7s   ÁC=Á8DÂ<DÃD)r  r   Úhasattrr  r  r7  )rí  r  r$  r*  s   ``  r   Ú_make_node_sizes_stridesr,  ó  sS   ù€ õ.>ô` ŒG�q˜˜�\Ð#5Ô6õ
ô6 ”3—;‘;œxÑ(¨&Ô1Ü”—‘œHÑ% vÐ/AÕBð 2r   c                 óH  ‡ ‡‡	‡
‡‡— ‰ t         v rd‰ › �Š
n‰ Š
dt        t        t        t        t
        t        t        f   fd„Šd„ Š	‰ t        v rd„ Šnd„ Šˆ fd„Šˆˆ	ˆ ˆ
ˆfd„}ˆˆ	ˆ ˆ
ˆˆfd	„}ˆˆ	ˆ ˆ
ˆˆfd
„}‰ t        v rt        |d‰ › d�|«       y ‰ t        v r$t        |‰ «      }t        |‰ t        ||«      «       y ‰ dk(  rˆˆ
fd„}t        |d‰ › d�|«       y ‰ dk(  rdˆˆ	ˆ fd„	}t        |d‰ › d�|«       y t        |d‰ › d�|«       ‰ t        v rt        |d‰ › d�|«       y y )NrU  r@  c                 óª   — t        | t        t        t        f«      r| S t        | t        «      r| j
                  j                  dd«      S t        d«      ‚)Nr  r   z*expect to be called with constant SymBools)r+   r   r   r   r   rb   r!  ré  r?  s    r   Úget_constantz&_make_user_magic.<locals>.get_constantZ  sE   € Ü�aœ#œu¤dÐ+Ô,ØˆHÜ�aœÔ!Ø—6‘6×$Ñ$ R¨Ó+Ð+ÜÐIÓJÐJr   c                 ó¦   — t        | t        t        t        f«      ryt        | t        t
        t        f«      r| j                  j                  «       S y)NTF)	r+   r   r   r   r   r   r   rb   r6  r?  s    r   r6  z%_make_user_magic.<locals>.is_constanta  s=   € Ü�aœ#œu¤dÐ+Ô,ØÜ�aœ&¤(¬GÐ4Ô5Ø—6‘6×%Ñ%Ó'Ð'Ør   c                 ó€   — t        | t        «      r-t        | j                  j	                  t        | «      «      «      S | S )z;Implements True+True=2, which works in python but not sympy)r+   r   r   rb   ri   r   r?  s    r   Úpromotez!_make_user_magic.<locals>.promote„  s-   € ä˜!œWÔ%Ü˜aŸf™fŸo™o¬c°!«fÓ5Ó6Ð6ØˆHr   c                 ó   — | S r   ro   r?  s    r   r2  z!_make_user_magic.<locals>.promoteŒ  s   € ØˆHr   c                 ó   •— ‰dvr| |fS t        | t        t        j                  f«      }t        |t        t        j                  f«      }|s|r.|st        j                  | «      } |st        j                  |«      }| |fS )N)rŽ   r’   r•   r˜   r›   r§   r®   r   r   r¼   rÀ   rÃ   rÆ   rÉ   rÌ   )r+   r   rµ  r   r	   )r.   r<   Úf_selfÚf_otherrí  s       €r   Úpromote2z"_make_user_magic.<locals>.promote2�  sy   ø€ ð ð 
ñ 
ð$ ˜�;ÐÜ˜D¤5¬%¯.©.Ð"9Ó:ˆÜ˜U¤U¬E¯N©NÐ$;Ó<ˆÙ‘WÙÜ—‘ tÓ,�ÙÜŸ™¨Ó.�Ø�Uˆ{Ðr   c                 óš   •—  ‰| «      }  ‰| «      r t        ‰«       ‰| «      «      S t         t        | j                  ‰«      «       «      S r   )r   rê  rF  rb   )r.   r/  r6  rí  r  r2  s    €€€€€r   r  z*_make_user_magic.<locals>.unary_magic_impl¹  sH   ø€ Ù�t‹}ˆÙ�tÔØ.Ô& vÓ.±¸TÓ0BÓCÐCÜÐ8œ §¡¨KÓ8Ó:Ó;Ð;r   c           	      óâ  •— t        |t        t        t        t        t
        t        f«      st        S t        j                  d‰| |«        ‰| «      }  ‰|«      } ‰	| |«      \  } } ‰| «      r t        ‰«       ‰| «      |«      S  ‰|«      r ‰|«      }t        | j                  |«      }|t        u rt        S t         t        | j                  ‰«      |«      «      } ‰|«      r ‰|«      S |S )NzMAGIC %s %s %s)r+   r   r   r   r   r   r   rç  rü  rý  r   r
  rb   rê  rF  ©
r.   r<   Ú
other_nodeÚretr/  r6  rí  r  r2  r7  s
       €€€€€€r   r  z+_make_user_magic.<locals>.binary_magic_impl¿  sÝ   ø€ Ü˜%¤#¤u¬d´F¼HÄgÐ!NÔOÜ!Ð!Ü×ÑÐ+¨V°T¸5ÔAÙ�t‹}ˆÙ˜“ˆÙ˜t UÓ+‰ˆˆeÙ�tÔØ.Ô& vÓ.±¸TÓ0BÀEÓJÐJÙ�uÔÙ  Ó'ˆEÜ˜TŸY™Y¨Ó.ˆ
ØœÑ'Ü!Ð!ÜÐ7œ §	¡	¨;Ó7¸
ÓCÓDˆÙ$/°Ô$4‰|˜CÓ Ð=¸#Ð=r   c           	      ó²  •— t        |t        t        t        t        t
        t        f«      st        S  ‰| «      }  ‰|«      } ‰	| |«      \  } } ‰| «      r t        ‰«       ‰| «      |«      S  ‰|«      r ‰|«      }t        | j                  |«      }|t        u rt        S t         t        |‰«      | j                  «      «      } ‰|«      r ‰|«      S |S r   )r+   r   r   r   r   r   r   rç  r   r
  rb   rê  rF  r:  s
       €€€€€€r   Úrbinary_magic_implz,_make_user_magic.<locals>.rbinary_magic_implÐ  sÈ   ø€ Ü˜%¤#¤u¬d´F¼HÄgÐ!NÔOÜ!Ð!Ù�t‹}ˆÙ˜“ˆÙ˜t UÓ+‰ˆˆeÙ�tÔØ.Ô& vÓ.±¸TÓ0BÀEÓJÐJÙ�uÔÙ  Ó'ˆEÜ˜TŸY™Y¨Ó.ˆ
ØœÑ'Ü!Ð!ÜÐ8œ 
¨KÓ8¸¿¹ÓCÓDˆÙ$/°Ô$4‰|˜CÓ Ð=¸#Ð=r   Ú__r
   c                 ó‚  •— | j                   }t        ||«      }t        ||«      }|t        u s|t        u rt        S t        |t        «      r)t        |t        «      r|j
                  |j
                  k(  sJ ‚t         t        | j                   ‰«      ||«      «      }|j                   j                  «       r ‰|«      S |S r   )	rb   r
  rç  r+   r   r-   rê  rF  r6  )	Úpredrå   ræ   r  r  r  r<  r/  r  s	          €€r   Úsym_ite_magic_implz,_make_user_magic.<locals>.sym_ite_magic_implç  s«   ø€ ØŸ	™	ˆIÜ 	¨8Ó4ˆIÜ 	¨8Ó4ˆIØœNÑ*¨i¼>Ñ.IÜ%Ð%ä˜9¤gÔ.Ü˜y¬'Ô2Ø×$Ñ$¨	×(8Ñ(8Ò8ðð9ô Ð;œG D§I¡I¨{Ó;¸IÀyÓQÓRˆCØ(+¯©×(<Ñ(<Ô(>‘< Ó$ÐGÀCÐGr   r‡   c                 ó–   •—  ‰| «      rt        j                   ‰| «      |«      S t         t        | j                  ‰«      |«      «      S r   )r<  r‡   rê  rF  rb   )r.   r†   r/  r6  rí  s     €€€r   Úround_magic_implz*_make_user_magic.<locals>.round_magic_implø  s?   ø€ Ù˜4Ô Ü—~‘~¡l°4Ó&8¸'ÓBÐBäÐ7œW T§Y¡Y°Ó7¸Ó@ÓAÐAr   Ú__rr   )r  r   r   r   r   r   r   r   Úbool_becomes_int_magic_methodsÚunary_magic_methodsr  Úunary_nonmagic_methodsrF  r   Úreflectable_magic_methods)rí  Ú	user_typer  r  r>  ÚorigrB  rD  r/  r6  r  r2  r7  s   `       @@@@@r   Ú_make_user_magicrL  Q  sI  ý€ ð ÔCÑCØ˜V˜H�o‰àˆðKœœf¤c¬8´U¼GÄTÐIÑJó KòðB Ô/Ñ/ó	ò	ô!÷T<ð <÷>ñ >÷">ñ >ð  Ô$Ñ$Ü�	˜R ˜x r˜?Ð,<Õ=Ø	Ô)Ñ	)Ü�y &Ó)ˆÜ�	˜6¤>Ð2BÀDÓ#IÕJØ	�9Ò	õ	Hô 	�	˜R ˜x r˜?Ð,>Õ?Ø	�7Ò	÷	Bô 	�	˜R ˜x r˜?Ð,<Õ=ä�	˜R ˜x r˜?Ð,=Ô>ØÔ.Ñ.Ü�I  V H¨BÐ/Ð1CÕDð /r   r   )Œr:  r<  r'  ÚloggingÚmathÚoperatorr  Ú	functoolsr   r   Útypingr   r   r   r   rµ  r	   r
   r   r   r   r   r   r   r'   r   Ú	getLoggerr7  r  Ú_loggingÚgetArtifactLoggerrü  Ú__all__Útorch.typesr   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ì  rG  rJ  Úmath_op_namesrG  Úsym_nameÚpriv_sym_namer  rF  rw   rH  r  Úonly_bool_magic_methodsrF  Úalso_bool_magic_methodsÚbool_magic_methodsÚonly_float_magic_methodsr  rþ  r
  rÿ  r[  r_  rb  ri  rl  ro  rs  rv  rz  r~  rI  r†  r‰  r�  r�  r“  r–  r™  rœ  rŸ  r¢  r¥  rª  r®  r  Úcurrent_moduler¶  Úpriv_sympy_namerH  r9  rº  r¿  rÃ  rÅ  Úinvertr   rÌ  rÈ  rÖ  rÚ  rÝ  rà  râ  rå  Úsizes_strides_methodsÚminÚmaxrø  r
  rê  r   r  r,  Úitemsrí  r  rL  ro   r   r   ú<module>re     s·  ðñó Û Û Û Û Û 
ß /ß 7Ó 7ã ÷	÷ 	ó 	ñ Ý>à€g×Ñ˜Ó!€Ø�~‰~×/Ñ/°¸*ÓE€ò =€õ 1ò÷Jñ Jð\!Ø	ˆ8�<‰<ð!à	ˆ8�<‰<ð!ð 
ˆ8�<‰<ð!ð 
ˆ8�=‰=ð	!ð
 ˆD�I‰Ið!ð 	ˆ(�+‰+ð!ð ˆT�Z‰Zð!ð ˆT�Z‰Zð!ð �H×%Ñ%ð!ð 	ˆ(�+‰+ð!ð 	ˆ(�+‰+ð!ð Ñ*ð!ð 	ˆ(�+‰+ð!ð ˆh�o‰oð!ð 	ˆ(�+‰+ð!ð  
ˆ8�<‰<ð!!ð" 
ˆ8�<‰<ð#!ð$ �+‰+Ø�<‰<Ø
�,‰,Ø—‘Ø—l‘lØ�^‰^Ø�o‰oØ�<‰<ØØØØØØ×%Ñ%Ø×#Ñ#òA!Ð òF
Ð òð€ð ò €DØ�d�Vˆ}€HØ˜�z�N€MÙˆG�XÑ/°Ó5Ô6Ù#*¨5°-Ó#@Ð�xÑ Ø×Ñ˜HÔ%Ø‡N�N�8Õðð ðÐ ð $Ð&<Ñ<€ò >Ð â!6Ð à˜&Ð Ø,Ð/FÑFÐ ò >Ð ð 7<¸T°]Ð 2ò XÐ àò -€DØ�d�Vˆ}€HØ×"Ñ" 8Õ,ð-ò
 HÐ òÐ ò"òòòòòòòòòð �<‰<Ø�<‰<Ø�<‰<ØØ+Ø!ØØ
Ø)Ø%Ø#ØØñÐ ò"ò$òòòòòòòòòòò.ð —‘˜XÑ&€òð ò 1€DØ ˜vÐ&€OÙ	˜$Ó	€BØ$3Ð3€B„O�b”kÙˆN˜O¨RÕ0ð	1ð ˆˆoòó-òò0ðØñàˆx�‰ðð 
ˆ8�<‰<ðð 	ˆ)ð	ð
 	ˆ)ðð 	ˆ)ðð 	ˆ)ðð 	ˆ)ðð 	ˆ)ðð ˆ\ðð ˆ\ðð Ð!ðð ˆKðð 
ˆ8�<‰<ðð ˆzðð  ˆzð!ð" ˆzð#ð$ 
ˆ:ñ%ð& Ø#ò)€ð0 ò H€DØ�d�Vˆ}€HÙ% n¸À¸vÐ6FÓG€M�(ÒðHð 	ˆ(�M >òUò
ò0EòHò%òPPòSò?ð )Ø&JØ&JØ#DØ#DØ.[ñ	Ð ð �|Š|Ø�|Š|ñ$Ð  òò>ò&ò[?ò|TCðn "×'Ò'Ó)ò #�L€FˆDÙ�V˜TÕ"ð#ð *×/Ò/Ó1ò +�L€FˆDÙ˜V TÕ*ð+òqEðh "×'Ò'Ó)ò 
'�L€FˆDØÐ(Ñ(Ù˜ Ô)ØØÐ)Ñ)Ù˜ Ô*ØØÐ(Ñ(¨FÐ6TÑ,TÙ˜ Ô)Ù�V˜VÔ$Ù�V˜XÕ&ð
'ð Ùr   