
    	i@                    
   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Zd dl	Z	d dlm
Z
mZ d dlmZmZmZ d dlZd dlmc mZ d dlmZmZmZmZmZmZmZmZ d dlmZ erd dlmZ  ej@                  e!      Z"ej$                  jG                  e!d      Z$ e%       Z&d	e'd
<   e(e)z  e*z  dz  Z+g dZ,d dl-m.Z/ d Z0 G d d      Z1 G d d      Z2 G d de2e*      Z3i dejh                  dejj                  dejl                  dejn                  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 d! d"ej~                  d#ej                  d$ej                  d%ej                  i d&ej                  d'ej                  d(ej                  d)ej                  d*ej                  d+ej                  d,ej                  d-ej                  d.ej                  d/ej                  d0ej                  d1ed2ed3ed4ed5ed6ej                  d7ej                  iZMh d8ZNd9 ZOd:ZPePD ]J  ZQd;eQ ZRd<eR ZS eTe1eR eOeQ              eUeeS      eMeR<   eNjm                  eR       e,j                  eR       L d hZWeNeWz  ZXh d=ZYh d>ZZdhZ[eYe[z  Z\h d?Z]dd)hZ^dd)d@dAZ_h dBZ`ePD ]  ZQd;eQ ZRe`jm                  eR        h dCZah dDZbdE ZcdF ZddG ZedH ZfdI ZgdJ ZhdK ZidL ZjdM ZkdN ZldO Zm	 dwdPZndQ ZodR ZpdS Zqi dejl                  d0ej                  d&ej                  d%efd-egd,ehdeideod)ejd*epd+eqd6ecd7eddeed#ekd/elZrdT ZsdU ZtdV ZudW ZvdX ZwdY ZxdZ Zyd[ Zzd\ Z{d] Z|d^ Z}d_ Z~d` Ze	j                   e!   Zda ZePD ]'  ZQdbeQ Z eeQ      Zexe_        e_!         eTeee       ) [[Q[dc ZdxddZde Zdf Zi eri d5ej                  dejh                  dewd'exdeyd$ezd"e{de|detdeud1edevd(ej                  d4e}d3e~d2edeeedgZePD ]  ZQd;eQ ZR eUedbeQ       eeR<    [Q[R[P[dh Zdi Zdj Zdk Zdl Zdm Zdn Zdo ZeeeeeedpZdq Zdr Zds Zdt Zdu Zej5                         D ]  \  ZZ eee        ej5                         D ]  \  ZZ eee        dv ZeD ]F  ZeeYv r
 eee       ee]v r
 eee       ee[v seeZv r	 eee        eee       ee_vs> eee       H [[y)y    )annotationsN)	lru_cacheupdate_wrapper)OptionalTYPE_CHECKINGUnion)	sym_floatsym_itesym_maxsym_minsym_notSymBoolSymFloatSymInt)dtrace_structured)ShapeEnvsym_nodeobject_NO_HINT)SymNodemethod_to_operatormagic_methods
DynamicInt)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    o/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/torch/fx/experimental/sym_node.py_to_symtyper"   A   s+    DyCxEzH    c                     e Zd ZU dZdZded<   	 	 	 d\	 d]dZd^dZd_dZd`d	Z	e
d
        Ze
d        Zd Zdad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dbdZdcdZdcdZdadcdZ dcd Z!dcd!Z"dcd"Z#dcd#Z$dcd$Z%dcd%Z&dcd&Z'dcd'Z(dcd(Z)dcd)Z*dcd*Z+dcd+Z,dcd,Z-dcd-Z.dcd.Z/dcd/Z0dcd0Z1dcd1Z2dcd2Z3dcd3Z4dcd4Z5dcd5Z6dcd6Z7dcd7Z8dcd8Z9dcd9Z:dcd:Z;dcd;Z<dcd<Z=dcd=Z>dcd>Z?dcd?Z@dcd@ZAdcdAZBdcdBZCdcdCZDdD ZEdE ZFdF ZGdG ZHdH ZIdI ZJdcdJZKdK ZLdL ZMdM ZNdcdNZOdddOZPdP ZQdQ ZRdR ZSdS ZTdT ZUdU ZVdV ZWdW ZXdX ZYdY ZZdZ Z[d[ Z\y)er   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.
    Fr   _optimized_summationNc                    | _         | _        | _        | _         fd}|t        u rd }n|t        |      |u s0t        |      t        |      u st        d| dt        |              j                  rG j                  j                  r1 |       }	||	k7  r%t        | 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   )has_free_unbacked_symbolsT)compute_hint)%torch.fx.experimental.symbolic_shapesr(   expr	shape_env_maybe_evaluate_static
isinstanceSymTypespytype)r(   hintselfs     r!   r)   z&SymNode.__init__.<locals>.compute_hint   sZ    W )3>>88QU8VD0:40Jt{{4(PTKr#   zCannot create SymNode of type z  with incompatible hint of type z != z (for ))_exprr,   r0   r%   r   typer"   AssertionError_translation_validation_enabledr+   _hintconstantfx_node)r2   r+   r,   r0   r1   r9   r:   optimized_summationr)   computed_hinttx_validation_ens   `          r!   __init__zSymNode.__init__]   s    
"$7!:	 8DJ&(DJ+f:M,M$4h>tDzlL  ~~$.."P"P !-=((D6m_F499+UV)WXX>D
;C NNMt~~MM 	 (3Gr#   c                    t        | j                  || j                  | j                  | j                  | j
                        S r   )r   r4   r0   r8   r9   r:   )r2   r,   s     r!   with_shape_envzSymNode.with_shape_env   s0    JJ	4;;

DMM4<<
 	
r#   c                   | 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   )r4   r0   r8   r9   r:   r2   others     r!   	_value_eqzSymNode._value_eq   sq     JJ%++% .u||+.

ekk). /. -	
r#   c                    t        | j                  | j                  | j                  | j                  | j
                  f      S r   )hashr4   r0   r8   r9   r:   r2   s    r!   _value_hashzSymNode._value_hash   s,    TZZdjj$--VWWr#   c                L    | j                   j                  | j                        S r   )r,   replacer4   rG   s    r!   r+   zSymNode.expr   s    ~~%%djj11r#   c                    | j                   S r   r8   rG   s    r!   r1   zSymNode.hint   s    zzr#   c                    | j                   d uS r   rL   rG   s    r!   has_hintzSymNode.has_hint   s    zz%%r#   c                   ddl m} | j                  |w || j                        }| j                  j                  D ci c]"  }|||v r|n| j
                  j                  |   $ }}t        | j                  j                  |            S | j
                  j                  | j                        S | j                  S c c}w )Nr   free_unbacked_symbols)
r*   rQ   r8   r+   free_symbolsr,   backed_var_to_valr   xreplace	size_hint)r2   fallbackrQ   unbacked_symbolssreplacementss         r!   require_hintzSymNode.require_hint   s    O::# $9#C 
 "YY33	   ,,  99!<=    499--l;<<>>++DII66zz s   'B=c                Z    | j                   j                  rt        | j                         S y r   )r+   	is_numberr   rG   s    r!   maybe_as_intzSymNode.maybe_as_int   s     99tyy>!r#   c                v    dd l }t        | j                  |j                        rt	        | j                        S y Nr   )sympyr.   r+   Floatr   r2   r`   s     r!   maybe_as_floatzSymNode.maybe_as_float   s)    dii-##r#   c                p    dd l }| j                  |j                  u ry| j                  |j                  u ryy )Nr   TF)r`   r+   truefalserb   s     r!   maybe_as_boolzSymNode.maybe_as_bool   s.    99

"YY%++%r#   c                &    | j                   t        u S r   )r0   r   rG   s    r!   is_intzSymNode.is_int  s    {{c!!r#   c                &    | j                   t        u S r   )r0   r   rG   s    r!   is_floatzSymNode.is_float  s    {{e##r#   c                &    | j                   t        u S r   )r0   r   rG   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   )r8   r.   r   nodeis_nested_intrG   s    r!   rp   zSymNode.is_nested_int  sA     JJd" 04::v.0

--/	
r#   c                    t        |      t        urt        dt        |             dd l}t	        |j                  |      | j                  t        |||      S )NExpected int, got r   r9   r:   )r5   r   r6   r`   r   Integerr,   r2   numr`   s      r!   wrap_intzSymNode.wrap_int  sP    9C #5d3i[!ABBMM#S3PS
 	
r#   c                    t        |      t        urt        dt        |             dd l}t	        |j                  |      | j                  t        |||      S )NzExpected float, got r   rs   )r5   r   r6   r`   r   ra   r,   ru   s      r!   
wrap_floatzSymNode.wrap_float  sP    9E! #7S	{!CDDKKdnneS3PS
 	
r#   c                    t        |      t        urt        dt        |             dd l}t	        |r|j
                  n|j                  | j                  t        |||      S )NzExpected bool, got r   rs   )r5   r   r6   r`   r   re   rf   r,   ru   s      r!   	wrap_boolzSymNode.wrap_bool&  sW    9D  #6tCyk!BCCEJJ5;;NN
 	
r#   c                    | S r    rG   s    r!   clonezSymNode.clone4  s    r#   c                    | j                    S r   )r+   rG   s    r!   strzSymNode.str7  s    ))r#   c                "    | j                         S r   r   rG   s    r!   __str__zSymNode.__str__:  s    xxz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, r3   )r4   r,   r0   r8   appendr9   r:   join)r2   reps     r!   __repr__zSymNode.__repr__=  s    tzzl,t~~.>i}U
 ::!JJtzzl+,==$JJ4==/23<<#JJ$,,01yy~##r#   c                "    | j                         S r   r   rG   s    r!   _graph_reprzSymNode._graph_reprI  s    xxzr#   c                "    | j                         S r   )_absrG   s    r!   abszSymNode.absO      yy{r#   c                "    | j                         S r   )_posrG   s    r!   poszSymNode.posR  r   r#   c                $    | j                  |      S r   )_round)r2   ndigitss     r!   roundzSymNode.roundU  s    {{7##r#   c                "    | j                         S r   )_truncrG   s    r!   trunczSymNode.truncX      {{}r#   c                $    | j                  |      S r   )_addrB   s     r!   addzSymNode.add[      yyr#   c                $    | j                  |      S r   )_subrB   s     r!   subzSymNode.sub^  r   r#   c                $    | j                  |      S r   )_mulrB   s     r!   mulzSymNode.mula  r   r#   c                $    | j                  |      S r   )_modrB   s     r!   modzSymNode.modd  r   r#   c                $    | j                  |      S r   )
_float_powrB   s     r!   	float_powzSymNode.float_powg  s    u%%r#   c                $    | j                  |      S r   )_pow_by_naturalrB   s     r!   pow_by_naturalzSymNode.pow_by_naturalj  s    ##E**r#   c                $    | j                  |      S r   )_and_rB   s     r!   and_zSymNode.and_m  s    zz%  r#   c                $    | j                  |      S r   )_or_rB   s     r!   or_zSymNode.or_p  r   r#   c                $    | j                  |      S r   )_float_truedivrB   s     r!   float_truedivzSymNode.float_truedivs  s    ""5))r#   c                $    | j                  |      S r   )_int_truedivrB   s     r!   int_truedivzSymNode.int_truedivv        ''r#   c                $    | j                  |      S r   )_int_floordivrB   s     r!   int_floordivzSymNode.int_floordivy      !!%((r#   c                $    | j                  |      S r   )_lshiftrB   s     r!   lshiftzSymNode.lshift|      ||E""r#   c                $    | j                  |      S r   )_rshiftrB   s     r!   rshiftzSymNode.rshift  r   r#   c                "    | j                         S r   )_sym_notrG   s    r!   r   zSymNode.sym_not      }}r#   c                $    | j                  |      S r   )_eqrB   s     r!   eqz
SymNode.eq      xxr#   c                $    | j                  |      S r   )_nerB   s     r!   nez
SymNode.ne  r   r#   c                $    | j                  |      S r   )_gtrB   s     r!   gtz
SymNode.gt  r   r#   c                $    | j                  |      S r   )_ltrB   s     r!   ltz
SymNode.lt  r   r#   c                $    | j                  |      S r   )_lerB   s     r!   lez
SymNode.le  r   r#   c                $    | j                  |      S r   )_gerB   s     r!   gez
SymNode.ge  r   r#   c                "    | j                         S r   )_floorrG   s    r!   floorzSymNode.floor  r   r#   c                "    | j                         S r   )_is_integerrG   s    r!   
is_integerzSymNode.is_integer  s    !!r#   c                "    | j                         S r   )
_sym_floatrG   s    r!   r	   zSymNode.sym_float  s      r#   c                "    | j                         S r   )_sym_intrG   s    r!   sym_intzSymNode.sym_int  r   r#   c                "    | j                         S r   )_ceilrG   s    r!   ceilzSymNode.ceil  s    zz|r#   c                "    | j                         S r   )_negrG   s    r!   negzSymNode.neg  r   r#   c                $    | j                  |      S r   )_sym_minrB   s     r!   r   zSymNode.sym_min      }}U##r#   c                $    | j                  |      S r   )_sym_maxrB   s     r!   r   zSymNode.sym_max  r   r#   c                &    | j                  ||      S r   )_sym_ite)r2   then_valelse_vals      r!   r
   zSymNode.sym_ite  s    }}Xx00r#   c                &    | j                  ||      S r   )_is_contiguousr2   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3E7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    ;;E7KKr#   c                $    | j                  |      S r   )r   rB   s     r!   sym_orzSymNode.sym_or  r   r#   c                $    | j                  |      S r   )r   rB   s     r!   sym_andzSymNode.sym_and  r   r#   c                $    | j                  |      S r   )_bitwise_andrB   s     r!   bitwise_andzSymNode.bitwise_and  r   r#   c                $    | j                  |      S r   )_bitwise_orrB   s     r!   
bitwise_orzSymNode.bitwise_or  s    &&r#   c                $    | j                  |      S r   )_bitwise_xorrB   s     r!   bitwise_xorzSymNode.bitwise_xor  r   r#   c                $    | j                  |      S r   )r   rB   s     r!   truedivzSymNode.truediv  r   r#   c                $    | j                  |      S r   )r   rB   s     r!   floordivzSymNode.floordiv  r   r#   c                $    | j                  |      S r   )r   rB   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D!
 	
r#   c                &    | j                  dd      S N r   )	guard_intrG   s    r!   int_zSymNode.int_  s    ~~b!$$r#   c           
        dd l }ddlm}m}  |       r3t	        |  |t
        j                  t        d |D              fi             S |D cg c]  }|j                   }} |j                  | }g }d }	|D ]+  }|j                   n(|j                  |j                         - t        |      }	| j                  j                  t
        j                  t        d |D              f      \  }
}t        || j                  t         |	|
      S c c}w )Nr   get_proxy_modehandle_sym_dispatchc              3  2   K   | ]  }t        |        y wr   )	wrap_node.0as     r!   	<genexpr>z"SymNode.sym_sum.<locals>.<genexpr>  s     6A9Q<6s   c              3  4   K   | ]  }|j                     y wr   r:   r.  s     r!   r1  z"SymNode.sym_sum.<locals>.<genexpr>  s     !:!))!:s   r3  )r`   "torch.fx.experimental.proxy_tensorr*  r+  r!  torchsym_sumtupler+   Addr1   r   sumr,   _create_fx_call_functionr   r   )r2   argsr`   r*  r+  r0  exprsout
size_hintsout_hintr:   _s               r!   r6  zSymNode.sym_sum  s    	

 #MM6668  "&&A&&eii
 	'Avv~aff%	'
 :H^^<<MME!:T!::<


 sDNNC7KK# 's   D
c                :    | j                   j                  | |      S r   )r,   evaluate_sym_node)r2   size_obliviouss     r!   evaluatezSymNode.evaluate  s    ~~//nEEr#   c                    | j                         }	 t        |      S # t        $ r t        j	                  d|        w xY w)NzFailed to convert to int: %s)rD  r   	Exceptionlogwarningr2   fileliners       r!   r&  zSymNode.guard_int  s>     MMO	q6M 	KK6:	   
 !>c                    | j                         }	 t        |      S # t        $ r t        j	                  d|        w xY w)NzFailed to convert to float: %s)rD  r   rF  rG  rH  rI  s       r!   guard_floatzSymNode.guard_float  s>     MMO	8O 	KK8!<	rM  c                    | j                         }	 t        |      S # t        $ r t        j	                  d|        w xY w)NFailed to convert to bool: %srD  r   rF  rG  rH  rI  s       r!   
guard_boolzSymNode.guard_bool)  s>     MMO	7N 	KK7;	rM  c                   ddl m} | j                         r: || j                        s(| j                  j
                  s| j                  ||      S | j                  j                  | j                  | d| | j                        S )Nr   rP   :r3  )	r*   rQ   rN   r+   r,   +prefer_deferred_runtime_asserts_over_guardsrS  guard_or_defer_runtime_assertr:   )r2   rJ  rK  rQ   s       r!   expect_truezSymNode.expect_true3  st    O MMO)$))4NNNN ??4..
 ~~;;II$q' < 
 	
r#   c                f    ddl m} | j                         st        d       |t	        |             S )Nr   )statically_known_trueExpected bool type)r*   rZ  rm   r6   r   )r2   rJ  rK  rZ  s       r!   rZ  zSymNode.statically_known_trueE  s)    O||~ !566$WT]33r#   c                    | 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)rC  rQ  rR  rI  s       r!   guard_size_obliviouszSymNode.guard_size_obliviousL  sC     MMM.	7N 	KK7;	s	   
 !A c                f    ddl m} | j                         st        d       |t	        |             S )Nr   )guard_or_falser[  )r*   r_  rm   r6   r   )r2   rJ  rK  r_  s       r!   r_  zSymNode.guard_or_false`  s)    H||~ !566gdm,,r#   c                f    ddl m} | j                         st        d       |t	        |             S )Nr   )guard_or_truer[  )r*   ra  rm   r6   r   )r2   rJ  rK  ra  s       r!   ra  zSymNode.guard_or_trueg  s)    G||~ !566WT]++r#   c                &    | j                  dd      S r$  )rS  rG   s    r!   bool_zSymNode.bool_n  s    r1%%r#   c                     y)NTr}   rG   s    r!   is_symboliczSymNode.is_symbolicq      r#   c                     y r   r}   rG   s    r!   
nested_intzSymNode.nested_intt  rf  r#   c                     y)NFr}   rG   s    r!   is_constantzSymNode.is_constantw  s    r#   )NNF)r1   z!Optional[Union[int, float, bool]])r,   r   returnr   )rC   r   rk  r   )rk  r   r   )rk  zbuiltins.str)rk  r   )F)]__name__
__module____qualname____doc__r%   __annotations__r>   r@   rD   rH   propertyr+   r1   rN   rZ   r]   rc   rg   ri   rk   rm   rp   rw   ry   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  r"  r'  r6  rD  r&  rO  rS  rX  rZ  r]  r_  ra  rc  re  rh  rj  r}   r#   r!   r   r   N   s    "'$& !S4
 0S4j


X 2 2  &4"$#




$$    &+! *()##"!$$13DDAAL ('()(%

%#LJF
$4(-,&r#   r   c                       e Zd Z fdZ xZS )_DynamicScalarc                J    | t         u rt        d      t        |   | g| S )Nz9_DynamicScalar is an abstract base class, use DynamicInt.)rs  	TypeErrorsuper__new__)clsr;  	__class__s     r!   rw  z_DynamicScalar.__new__|  s+    . WXXws*T**r#   )rl  rm  rn  rw  __classcell__ry  s   @r!   rs  rs  {  s    + +r#   rs  c                  4     e Zd ZdZ fdZd Zd Zd Z xZS )r   a  
    User API for marking dynamic integers in `torch.compile`.
    Intended to be compatible with both compile and eager mode.

    Example usage::

        fn = torch.compile(f)
        x = DynamicInt(4)
        fn(x)  # compiles x as a dynamic integer input; returns f(4)
    c                    t        |t              st        dt        |             t        |   | t        |            }|S )Nrr   )r.   r   r6   r5   rv  rw  )rx  valobjry  s      r!   rw  zDynamicInt.__new__  s=    #s# #5d3i[!ABBgoc3s8,
r#   c                "    d| j                    dS )NzDynamicInt(r3   )realrG   s    r!   r   zDynamicInt.__repr__  s    TYYKq))r#   c                2    t        | j                  |z        S r   r   r  rB   s     r!   __floordiv__zDynamicInt.__floordiv__  s    $))u,--r#   c                2    t        || j                  z        S r   r  rB   s     r!   __rfloordiv__zDynamicInt.__rfloordiv__  s    %499,--r#   )	rl  rm  rn  ro  rw  r   r  r  rz  r{  s   @r!   r   r     s    	*..r#   r   r   r   r   andr  r   r   r   r   r   r   r   r   c                "    | j                         S r   )r   xs    r!   <lambda>r    s    ALLN 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   r   r	   c                      fd}|S )Nc                ,     t        | d              S )N_sym_)getattr)r2   names    r!   fnz_get_sym_node_fn.<locals>.fn  s    ,wtuTF^,..r#   r}   r  r  s   ` r!   _get_sym_node_fnr    s    / Ir#   )sqrtcoscoshsinsinhtantanhasinacosatanlog2sym_r@  >   r  r  r
   r   >   r   r   r   >   r   r   sym_log2r   xor)r  r  r  >   r   r	   r   r   >   r   r   r   r   >   r   r   r   r   r   r   r  r  r   r   r"  c                     ddl m}  || |      S )Nr   )FloatTrueDiv)torch.utils._sympy.functionsr  )r0  br  s      r!   _sympy_float_truedivr  "      91r#   c                     ddl m}  || |      S )Nr   )
IntTrueDiv)r  r  )r0  r  r  s      r!   _sympy_int_truedivr  (  s    7ar#   c                     ddl m}  || |      S )Nr   )FloorDiv)r  r  )r0  r  r  s      r!   _sympy_floordivr  .      5Aq>r#   c                f    ddl m}m} | j                  r|j                  r	 || |      S  || |      S )Nr   Mod	PythonMod)r  r  r  is_nonnegative)r0  r  r  r  s       r!   
_sympy_modr  4  s.    ;A,,1ayAr#   c                     ddl m}  || |      S )Nr   )PowByNatural)r  r  )r0  r  r  s      r!   _sympy_pow_by_naturalr  =  r  r#   c                     ddl m}  || |      S )Nr   )FloatPow)r  r  )r0  r  r  s      r!   _sympy_float_powr  C  r  r#   c                .    dd l }|j                  | |      S r_   )r`   Andr0  r  r`   s      r!   
_sympy_andr  I  s    99Q?r#   c                .    dd l }|j                  | |      S r_   )r`   Orr  s      r!   	_sympy_orr  O      88Aq>r#   c                     ddl m}  || |      S )Nr   )LShift)r  r  )r0  r  r  s      r!   _sympy_lshiftr  U      3!Q<r#   c                     ddl m}  || |      S )Nr   )RShift)r  r  )r0  r  r  s      r!   _sympy_rshiftr  [  r  r#   c                `   t        |       dk(  r|gS ddlm}m}  || d          ||      k  r| |gz   S  || d          ||      kD  r|g| z   S dt        |       dz
  }}||k  r9||z   dz  }|j	                  | |   |      }|dk(  ry|dk  r|dz   }n|dz
  }||k  r9| j                  ||       | S )zs
    If new_arg is found in ordered_args None is returned, else the new
    ordered_args with new_arg inserted
    r   )_args_sortkeyBasicr      N)lensympy.core.basicr  r  compareinsert)ordered_argsnew_argsort_keyr  lowhighmidcompare_results           r!   _binary_search_insert_argr  a  s    
 <AyA R !HW$55wi'' Q 8G#44y<''3|$q(C
+Tza|C'8'BQa'C7D + W%r#   c                  
 ddl 
ddlm} 
fd}ddlm} | ||       z  }| ||      z  }|r|r || j
                  d          ||j
                  d         k  r || j
                  |j
                  z         S  || j
                  d          ||j
                  d         kD  r ||j
                  | j
                  z         S t        | j
                        dk  rXt        |j
                        dk  r@t        | j
                        }|j
                  D ]  }t        ||      }| n | ||      S |r5|j                  r)t        t        | j
                        |      }| ||      S |r5| j                  r)t        t        |j
                        |       }| ||      S 
j                  | |      }	 ||	      |	fS )a  
    Custom optimization for Add used to optimize incremental binary summations of certain properties. The idea
    is when we know the expression is a summation of unique symbols all we need to know is the correct order of symbols,
    and no other optimizations are needed. We pass evaluate=false, with the correct order of args and save the following.
    1. Avoid running other optimizations when the Add is constructed.
    2. Manually figure out the order of the args for the new expression in log(n) comparisons instead of nLog(n)
    (comparing terms is expensive and shows in the profiles).
    The function returns a tuple of (1) a boolean that indicates whether the output is a summation of unique symbols,
    (2) the result sympy expression.
    r   N)r  c                `    | t        d      j                  j                  | d      }d|fS )Nzordered_args is NoneT)is_commutative)r6   r8  
_from_args)r  resultr`   s     r!   make_optimizedz&_optimized_add.<locals>.make_optimized  s:     !788
 %%l4%Hf~r#   )_is_symbols_binary_summationr  r  )r`   r  r  r  r  _argsr  listr  	is_symbolr8  )lhsrhslhs_is_optimized_summationrhs_is_optimized_summationsortkeyr  r  new_argsr0  r  r`   s             @r!   _optimized_addr    s    9 J">s"CC">s"CC!&@399R=!GCIIaL$99!#))cii"788399Q< 7399R=#99!#))cii"788 syy>Q3syy>Q#6CIIHYY 4XqA#
 #%h// "cmm,T#))_cB!(++ "cmm,T#))_cB!(++YYsC F(0&99r#   c                     ddl m}  || |      S )Nr   )BitwiseFn_bitwise_and)r  r  )r0  r  r  s      r!   r  r        B A&&r#   c                     ddl m}  || |      S )Nr   )BitwiseFn_bitwise_or)r  r  )r0  r  r  s      r!   r  r    s    A1%%r#   c                     ddl m}  || |      S )Nr   )BitwiseFn_bitwise_xor)r  r  )r0  r  r  s      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  r   )r`   r.   Mulr;  r  ra   r   rt   )r0  r  r`   aacoefs        r!   _floor_ceil_helperr    s    !UYYVVr7a<Jr!uekk:r!u?O?O==A'D!u}be|#1ekk"q!!a'}}Qa5Lr#   c                    ddl m}  ||       S )Nr   )
FloorToInt)r  r  )r0  r  s     r!   _sympy_floorr        7a=r#   c                    ddl m}  ||       S )Nr   )
TruncToInt)r  r  )r0  r  s     r!   _sympy_truncr    r  r#   c                    ddl m}  ||       S )Nr   )	CeilToInt)r  r  )r0  r  s     r!   _sympy_ceilr    s    6Q<r#   c                .    dd l }|j                  | |      S r_   )r`   Eqr  s      r!   	_sympy_eqr    r  r#   c                .    dd l }|j                  | |      S r_   )r`   Ner  s      r!   	_sympy_ner    r  r#   c                .    dd l }|j                  | |      S r_   )r`   Gtr  s      r!   	_sympy_gtr    r  r#   c                .    dd l }|j                  | |      S r_   )r`   Ltr  s      r!   	_sympy_ltr  %  r  r#   c                .    dd l }|j                  | |      S r_   )r`   Ler  s      r!   	_sympy_ler  +  r  r#   c                .    dd l }|j                  | |      S r_   )r`   Ger  s      r!   	_sympy_ger  1  r  r#   c                     ddl m}  || |      S )Nr   )Min)r  r  )r0  r  r  s      r!   
_sympy_minr  7      0q!9r#   c                     ddl m}  || |      S )Nr   Max)r  r  )r0  r  r  s      r!   
_sympy_maxr  =  r  r#   c                6    dd l }|j                  || f|df      S )Nr   T)r`   	Piecewise)r0  r    fr`   s       r!   
_sympy_iter   C  s    ??Aq6At9--r#   c                      fd}|S )Nc                r    dd l } t        |j                  j                  j                  d       |       S )Nr   OpaqueUnaryFn_)r  r  utils_sympy	functions)r0  r5  r  s     r!   r  z_get_sym_math_fn.<locals>.fnM  s1    +Mwu{{))33~dV5LMaPPr#   r}   r  s   ` r!   _get_sym_math_fnr'  L  s    Q
 Ir#   _sympy_c                ,    dd l }|j                  |       S r_   )r`   Abs)r0  r`   s     r!   
_sympy_absr+  ^  s    99Q<r#   c                8    ddl m}m} | ||       S  || |      S )Nr   )RoundDecimal
RoundToInt)r  r-  r.  )numberr   r-  r.  s       r!   _sympy_roundr0  d  s"    E&!!FG,,r#   c                    ddl m}  ||       S Nr   )ToFloat)r  r3  )r0  r3  s     r!   _sympy_sym_floatr4  m  s    4 1:r#   c                d    dd l }ddlm} |j                   ||j	                  |             |       S r2  )r`   r  r3  r  r   )r0  r`   r3  s      r!   _sympy_is_integerr6  u  s&    488GEKKN+Q//r#   )r   r   c                `    t        |       }t        | |t        t        |dz
  dd                  S )Nr   r  )r  sympy_is_contiguous_genericr  range)r   r   dims      r!   sympy_is_contiguousr;    s,    
e*C&ugtE#'2r<R7STTr#   c                   dd l }t        |       }t        |      |k7  r|j                  S |j                  }|j                  j
                  }|D ]L  }||j                  | |   |j                  j
                        |j                  ||   |      z  z  }|| |   z  }N t        |      D ].  }||j                  | |   |j                  j                        z  }0 |S r_   )	r`   r  rf   re   SOner  r9  Zero)r   r   	dim_orderr`   r:  r   zds           r!   r8  r8    s    
e*C
9~{{JJMA %(EGGKK8588GAJPQ;RRR	U1X 3Z :%(EGGLL99:r#   c                     t        | |g d      S N)r      r  r   r8  r   r   s     r!   $sympy_is_channels_last_contiguous_2drH    s    &ug|DDr#   c                     t        | |g d      S N)r      rE  r  r   rF  rG  s     r!   $sympy_is_channels_last_contiguous_3drL    s    &ugGGr#   c                   dd l }ddlm} t        |       }|t        |      k7  r|j                  S |j
                  j                  }|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   )	r`   r  r  r  rf   r=  r?  re   r  )	r   r   r@  r`   r  r:  mrL  rB  s	            r!   &sympy_is_channels_last_strides_genericrO    s    0
e*C
c)n{{A

A '!*a	  A *	UXXeAh"gajAo66 6!WQZ((A AJU1Xq))'** Hr#   c                     t        | |g d      S rD  rO  rG  s     r!   !sympy_is_channels_last_strides_2drR    s    1%,OOr#   c                     t        | |g d      S rJ  rQ  rG  s     r!   !sympy_is_channels_last_strides_3drT    s    1%/RRr#   c                "    ddl m}  |g | | S )Nr   )!IsNonOverlappingAndDenseIndicator)r  rV  )r   r   rV  s      r!   -_sympy_is_non_overlapping_and_dense_indicatorrW    s    N,>e>g>>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/   ro   r5   r   r{   r   rw   r   ry   NotImplemented)r2   rv   s     r!   r!  r!    sn    #x xx	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   r9   ri   r   rk   r   rm   r   r6   r  s    r!   r-  r-    sk    !W!**"8zzxxzay	
{	
qz8<==r#   c                    t         |    S r   )METHOD_TO_OPERATOR)methods    r!   r   r      s    f%%r#   c                l     t        d             t        v r  d}n }dd} fd}| 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   r@  c                 L   dd l } | j                  j                  | j                  j                  | j                  j
                  j                  | g}dd l} |D ch c]  }t        j                  |       c}| j                  j                  j                         z  dhz  S c c}w )Nr   z<string>)r5  _dynamo
eval_framer$  fxexperimentalr   torch._dynamo.guardsinspectgetfileguardsuninteresting_files)r5  modsrN  s      r!   ri  z-_make_node_magic.<locals>.uninteresting_files,  s     MM$$MMHH!!**	
 	$ *..AW__Q.mm""6689l	
.s   B!c                H     t        j                         d fd	       }|S )Nc                    |	 |       n	 | |      t         j                  j                  j                  r#|| |gn| gdfdt	        dfd       S )Nc                   dd l }| j                  y t        |       t              k(  ry t        | j                  |j
                  |j                  f      ry | j                  |j                  |j                  fv ry t        |       S r_   )	r`   r9   idr.   r+   rt   ra   re   rf   )r   r`   r  s     r!   get_idzM_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.get_idJ  sl     ((4#HF3##HMMEMM5;;3OP#!5::u{{*CC#h<'r#   expression_createdc            
        t              t              D  cg c]  } t        |        c} D cg c]  } |       |       c}t        j                  d      t        j                  d      dS c c} w c c}w )NrE  )r]  r  	result_id	argumentsargument_ids
user_stackstack)r   rn  
structuredget_user_stackget_framework_stack)r0  irs  ro  r]  r  s     r!   r  zO_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>Z  sv    "("%f+%'Z6?%@c!f%@/8)*+F1I<QF1I) '1&?&?&B!+!?!?!B
)  &A)s   A8
A=
A=)metadata_fn)rk  zOptional[int])r5  _logging	_internalGET_DTRACE_STRUCTUREDr   )r2   rC   rs  ro  r  r  r]  s     @@@r!   wrapperz=_make_node_magic.<locals>.capture_provenance.<locals>.wrapper>  sc    }DD%~~''==$!%uI!%I( "(
! Mr#   r   )	functoolswraps)r  r  r]  s   ` r!   capture_provenancez,_make_node_magic.<locals>.capture_provenance=  s&    		(	 
(	T r#   c           
     x   ddl m}m} t              }t        }| j
                  )|j
                   || j
                  |j
                        } |       r(t        |  ||t        |       t        |      fi             S t        |t              st        dt        |             d}	 dk(  rd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dk(  r;t)        | j                   |j                   | j*                  |j*                        \  }}
nNdv r,dd l}dd	lm}m} | j                   j4                  xr  || j                   |j6                        }|j                   j4                  xr  ||j                   |j6                        }|r|j                   j8                  s|r~| j                   j8                  rh|j:                  |j<                  |j>                  |j@                  |jB                  |jD                  d   } || j                   |j                   d
      }
n; | j                   |j                         }
n | j                   |j                         }
tL        jO                  d| j                   |j                   |
       tP        v rtR        }nFtT        v rtV        }n7| jX                  tR        u s|jX                  tR        u rtR        }n| jX                  }|"|t        ur|t        |tZ              s ||      }| j                  j]                  || j^                  |j^                  f      \  }}t        |
| j                  ||||      }|S # tF        $ r. tH        jK                  d| j                   |j                           w xY w)Nr   r)  zExpected SymNode, got Fr   r  r   )r   r   r   r   r   r   )symbol_is_typeSymT)rD  failed to eval %s(%s, %s)z%s %s %s -> %s)r:   r;   )0r4  r*  r+  r   r   r1   r!  r-  r.   r   r6   r5   r  r  r  r,   r+   r  bound_sympylowerr  r%   r`   torch.utils._sympy.symbolr  r  r  UNBACKED_INTr\   r  r  r  r
  r  r  rF  rG  rH  sym_node_logdebugalways_float_magic_methodsr   always_bool_magic_methodsr   r0   r/   r:  r:   )r2   rC   r*  r+  opr?  r;   r  r  r,   r=  r`   r  r  lhs_is_unbackedrhs_is_unbacked	rel_classr0   r:   r@  r  funcr]  s                        r!   binary_magic_implz+_make_node_magic.<locals>.binary_magic_implk  s   	

  '#99 UZZ%;$))UZZ0H)"y	%@P.QSUV  %) #9$u+!GHH#=	G !NN	II,, ,,TYY7==BJJ-- ,,UZZ8>>!Cdii4C#DIIuzz:C5-;IIJJ--..	.*$c ??J #'))"5"5 #.IIt00; #(**"6"6 #>JJ 1 1< $

(<(<#		(;(; $hh#hh#hh#hh#hh#hh! !I $DIIuzzEJCtyy%**5C 499ejj1 	+VTYY

CP //F00F[[E!U\\U%:F[[F ($x2h'H ^^<<u}}-

 NN 3
 W  	KK3VTYY

S	s   )I!P 7P9c           	        ddl m}m} t              } |       rt	        |  ||t        |       fi             S | j                  }dk(  sdk(  r| j                  j                  |      }	  
|      }t        j                  d
||       t        }| j                   || j                        }t         v rt"        }n*t$        v rt&        }nt(        v rt*        }n| j,                  }| j                  j/                  || j0                  f      \  }}	t3        || j                  |||      S # t        $ r t        j                  d|        w xY w)Nr   r)  r   ceilingzfailed to eval %s(%s)z%s %s -> %sr3  )r4  r*  r+  r   r!  r-  r+   r,   _simplify_floor_divrF  rG  rH  r  r  r   r1   always_int_magic_methodsr   r  r   r  r   r0   r:  r:   r   )r2   r*  r+  r  r+   r=  r?  r0   r:   r@  r  r]  s             r!   unary_magic_implz*_make_node_magic.<locals>.unary_magic_impl  s3   	

  '4!4R)D/9KR!PQQyyW) 3>>55d;D	t*C 	=$c:#99 $))}H--F00F11F[[F^^<<R$,,Q
sDNNFHgNN%  	KK/>	s   ,D- -"Er
   c                   ddl m}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)  zfailed to eval %s(%s, %s, %s)r3  )r4  r*  r+  r1   r!  r
   r-  r+   rF  rG  rH  r,   r:  r:   r   r0   )	pred_node	then_node	else_noder*  r+  r?  r=  r:   r@  r  r]  s            r!   sym_ite_implz&_make_node_magic.<locals>.sym_ite_impl  s   
 *3y~~Y^^H'%i0%i0%i0
  
9>>9>>9>>J #,,EE)++Y->->	@Q@QRJGQ Y(()*:*:Hg   3NNNNNN s   ,(C< <AD>r   c           	     (   ddl m}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)  z!failed to eval %s(%s, ndigits=%s)r3  )r4  r*  r+  builtinsr   r!  r-  r+   rF  rG  rH  r   r0   r1   r:   r   r,   r:  r7  r   )r2   r   r*  r+  r  r+   r=  r0   r?  r;  r:   r@  r  r]  s               r!   
round_implz$_make_node_magic.<locals>.round_impl;  s	   
 B-b9T?G2LbQ  99D4)
 Hyy$dii1 LL>D"G$@@U4[QJGQ3'RR1  ?wWs   	C. .#D)rk  zset[str]r   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )	r]  r  method_attrri  r  r  r  r  r  s	   ``       r!   _make_node_magicr  $  s    9S>$DCCl
",\ y yv "O "OH 1[M*,<=	9	&	P 	1[M*L9	7	'	SR 	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)r4  r*  r+  r  sysmodulesrl  r!  r-  r+   rF  rG  rH  r1   r   endswithr   r   r   r,   )r2   r   r   r*  r+  r  rX   
size_exprsstride_exprsr=  r>  r?  stride_hintsr0   r  r]  s                 r!   sizes_strides_implz4_make_node_sizes_strides.<locals>.sizes_strides_impll  s   	

 S[[*F3#,12qil274SaYq\4ST  ',,aff,
,(/0100	z<0C 
 	8Avv~aff%	8
 L 866>##AFF+8
 j,7 ??<(FFsDNNFH==E 34S -0  	KK3VZV	s#   EE:E!E&)	E+ +#Fr@  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  )r`   r*   r  	itertoolschainr.   r   r-  r  ro   r!  r   sympify)r   r   r`   r  r0  r  r  r]  s         r!   sizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_user  s    	
 0 	A!V$ +GAFFF+5:;+;5<=+= 	 ==4UGDD /45!U]]1%5/67!U]]1%7  <= 67s   C=8D<DD)r  r   hasattrr  r  rl  )r]  r  r  r  s   ``  r!   _make_node_sizes_stridesr  i  sS    .>` Gq\#56
6 3;;x(&1H%v/AB 2r#   c                   
  t         v rd  n dd
d  t        v rd nd  fd
 fd}
 fd}
 fd	}d
 } t        v r ||d  d|       y  t        v r!t	        |       } || t        ||             y  dk(  r
fd} ||d  d|       y  dk(  rd
 fd	} ||d  d|       y  }	 t        v r	t            }	 ||d|	 d|        t        v r ||d|	 d|       y y )Nr  c                   t        | t        t        t        f      r| S t        | t              r| j
                  j                  dd      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   ro   r&  r   rS  r6   r  s    r!   get_constantz&_make_user_magic.<locals>.get_constant  sf    a#ud+,Ha 66##B**a!66$$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   ro   rj  r  s    r!   rj  z%_make_user_magic.<locals>.is_constant  s=    a#ud+,a&(G4566%%''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   ro   rw   r   r  s    r!   promotez!_make_user_magic.<locals>.promote  s-    !W%affooc!f566Hr#   c                    | S r   r}   r  s    r!   r  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   r5  r   r	   )r2   rC   f_selff_otherr]  s       r!   promote2z"_make_user_magic.<locals>.promote2  sy      
 
$ ;D5%.."9:UUENN$;<Wt,.U{r#   c                     |       }  |       r t               |             S t         t        | j                                     S r   )r   r-  r  ro   )r2   r  rj  r]  r  r  s    r!   r  z*_make_user_magic.<locals>.unary_magic_impl0  sH    t}t.&v.T0B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   rY  r  r  r   r!  ro   r-  r  
r2   rC   
other_noderetr  rj  r]  r  r  r  s
       r!   r  z+_make_user_magic.<locals>.binary_magic_impl6  s    %#udFHg!NO!!+VT5At}tU+et.&v.T0BEJJu 'ETYY.
'!!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   rY  r   r!  ro   r-  r  r  s
       r!   rbinary_magic_implz,_make_user_magic.<locals>.rbinary_magic_implG  s    %#udFHg!NO!!t}tU+et.&v.|D7IJJu 'ETYY.
'!!8
K8CD$/$4|C =#=r#   c                ^    t        | |       fd}| t        u rt        t        |       yy)z
        Registers the SymNode magic method on SymInt/Float/Bool,
        and optionally registers a corresponding wrapped method on DynamicInt.
        c                     | D cg c]   }t        |t              r|j                  n|" } } t        t              |  }t        |t              rt        |t
              st        |      S |S c c}w r   )r.   r   r  r  r   r   )r;  r  r=  attrs      r!   dynamic_int_implz<_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impla  sc    HLM1jJ7AFFQ>MDM$'#t$d+C#s#JsD,A!#&J	 Ns   %A-N)r  r   r   )	user_typer  symnode_implr  s    `  r!   setattrsz"_make_user_magic.<locals>.setattrsW  s2     		4.	 J&67 r#   __r
   c                   | j                   }t        ||      }t        ||      }|t        u s|t        u rt        S t        |t              r)t        |t              r|j
                  |j
                  k(  st        d      t         t        | j                         ||            }|j                   j                         r |      S |S )Nz9then_node and else_node must be SymNodes with same pytype)
ro   r!  rY  r.   r   r0   r6   r-  r  rj  )	predr   r   r  r  r  r  r  r  s	          r!   sym_ite_magic_implz,_make_user_magic.<locals>.sym_ite_magic_implr  s    		I	84I	84IN*i>.I%%9g.y'2$$	(8(88$O  ;GDII{;IyQRC(+(<(<(><$GCGr#   r   c                     |       rt        j                   |       |      S t         t        | j                        |            S r   )r  r   r-  r  ro   )r2   r   r  rj  r]  s     r!   round_magic_implz*_make_user_magic.<locals>.round_magic_impl  s?    4 ~~l4&8'BB7WTYY7@AAr#   __r)r  z2Union[SymInt, int, SymFloat, float, SymBool, bool]r   )r  bool_becomes_int_magic_methodsunary_magic_methodsunary_nonmagic_methodsr  r   bitwise_opsreflectable_magic_methods)r]  r  r  r  r  r  origr  r  method_namer  rj  r  r  r  s   `         @@@@@r!   _make_user_magicr    sL    CCVHoKB //		!T< <> >"> > 8( $$bO-=>	)	)y&)FN3CT$JK	9		H" 	bO-?@	7		B 	bO-=>[ %f-KbR02CD..Y#k]" 57IJ /r#   )FFr   )
__future__r   r  r  rf  r  loggingmathoperatorr  r   r   typingr   r   r   r5  torch._logging.structuredr|  rw  r	   r
   r   r   r   r   r   r   torch._loggingr   r*   r   	getLoggerrl  rG  getArtifactLoggerr  r   r   rp  r   r   r   HintType__all__torch.typesr   r/   r"   r   rs  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  math_op_namesr  sym_namepriv_sym_namer  r  r   r  r  only_bool_magic_methodsr  also_bool_magic_methodsbool_magic_methodsonly_float_magic_methodsr  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  current_moduler'  priv_sympy_namer  rn  r+  r0  r4  r6  invertr   r;  r8  rH  rL  rO  rR  rT  rW  sizes_strides_methodsr!  r-  r   r  r  itemsr]  r  r  r}   r#   r!   <module>r     sh   #        
 / 1 1  . .	 	 	 - >g!~~//*E
 8& %<#$ K 1j jZ+ +. .:$	8<<$	8<<$ 
8<<$ 
8==	$
 8==$ DII$ 	(++$ TZZ$ TZZ$ H%%$ 	(++$ 	(++$ *$ 	(++$ hoo$  	(++!$" 
8<<#$$ 
8<<%$& 	(++'$( 
8<<)$* 	(,,+$, (,,-$. 8<</$0 1$2 hll3$4 X^^5$6 hoo7$8 
8<<9$: ;$< w=$> w?$@ wA$B wC$D X%%E$F 8##G$ L
   DdV}HzNMGX/56#*5-#@x H%NN8   $&<< > !6 & ,/FF  J  7<T] 2#4N X  -DdV}H""8,-
 H  "F LQA:H'&'	8<<	8<< 
8<< 
:	
 + ! 
: < 	) + < ) % O m  m! ($. X&  1Dv&O	$	B$33BObkNOR0	1 o-0x 
8<< 	)	
 	) 	) 	) 	) 	) \ \ ! K 
8<< z  z!" z#$ 
:%& #)0  HDdV}H%nv6FGM(H 	(M>U
0EH%PPS? )&J&J#D#D.[	 >&B?J
TCn "'') #LFDVT"# *//1 +LFDVT*+LK^  +F(()))*((F6T,T)VV$[ *+ r#   