
    N j@                    
   % S SK Jr   S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SKJ
r
Jr  S SKJrJrJr  S SKrS SKJs  Jr  S SKJrJrJrJrJrJrJrJr  S SKJr  \(       a  S SKJr  \R@                  " \!5      r"\R$                  RG                  \!S5      r$\%" 5       r&S	\'S
'   \(\)-  \*-  S-  r+/ SQr,S SK-J.r/  S r0 " S S5      r1 " S S5      r2 " S S\2\*5      r30 S\Rh                  _S\Rj                  _S\Rl                  _S\Rn                  _S\Rn                  _S\Rp                  _S\Rr                  _S\Rt                  _S\Rv                  _S\Rx                  _S\Rz                  _S\R|                  _S S! _S"\R~                  _S#\R                  _S$\R                  _S%\R                  _0 S&\R                  _S'\R                  _S(\R                  _S)\R                  _S*\R                  _S+\R                  _S,\R                  _S-\R                  _S.\R                  _S/\R                  _S0\R                  _S1\_S2\_S3\_S4\_S5\_S6\R                  _ES7\R                  0ErM1 S8krNS9 rOS:rP\P HK  rQS;\Q 3rRS<\R 3rS\T" \1\R\O" \Q5      5        \U" \\S5      \M\R'   \NRm                  \R5        \,R                  \R5        MM     S 1rW\N\W-  rX1 S=krY1 S>krZS1r[\Y\[-  r\1 S?kr]SS)1r^SS)S@SA.r_1 SBkr`\P H  rQS;\Q 3rR\`Rm                  \R5        M     1 SCkra1 SDkrbSE rcSF rdSG reSH rfSI rgSJ rhSK riSL rjSM rkSN rlSO rm SwSP jrnSQ roSR rpSS rq0 S\Rl                  _S0\R                  _S&\R                  _S%\f_S-\g_S,\h_S\i_S\o_S)\j_S*\p_S+\q_S6\c_S7\d_S\e_S#\k_S/\l_rrST rsSU rtSV ruSW rvSX rwSY rxSZ ryS[ rzS\ r{S] r|S^ r}S_ r~S` r\	GR                   \!   rSa r\P H(  rQSb\Q 3r\" \Q5      r\=\l        \l!        \T" \\\5        M*     CCQCSc rSxSd jrSe rSf r0 \rE0 S5\GR                  _S\Rh                  _S\w_S'\x_S\y_S$\z_S"\{_S\|_S\t_S\u_S1\_S\v_S(\R                  _S4\}_S3\~_S2\_S\_E\\Sg.Er\P H  rQS;\Q 3rR\U" \Sb\Q 35      \\R'   M     CQCRCPCSh rSi rSj rSk rSl rSm rSn rSo r\\\\\\Sp.rSq rSr rSs rSt rSu r\GR5                  5        H  u  rr\" \\5        M     \GR5                  5        H  u  rr\" \\5        M     Sv r\ HT  r\\Y;   a  \" \\5        M  \\];   a  \" \\5        M%  \\[;   d  \\Z;   a	  \" \\5        \" \\5        \\_;  d  MK  \" \\5        MV     CCg)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                `    U [         L a  [        $ U [        L a  [        $ U [        L a  [
        $ U $ N)boolr   intr   floatr   )ts    o/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/torch/fx/experimental/sym_node.py_to_symtyper"   A   s+    DyCxEzH    c                     \ rS rSr% SrSrS\S'      S^ S_S jjrS`S jrSaS	 jr	SbS
 jr
\S 5       r\S 5       rS rScS jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rSdS jrSeS jrSeS jr ScSeS  jjr!SeS! jr"SeS" jr#SeS# jr$SeS$ jr%SeS% jr&SeS& jr'SeS' jr(SeS( jr)SeS) jr*SeS* jr+SeS+ jr,SeS, jr-SeS- jr.SeS. jr/SeS/ jr0SeS0 jr1SeS1 jr2SeS2 jr3SeS3 jr4SeS4 jr5SeS5 jr6SeS6 jr7SeS7 jr8SeS8 jr9SeS9 jr:SeS: jr;SeS; jr<SeS< jr=SeS= jr>SeS> jr?SeS? jr@SeS@ jrASeSA jrBSeSB jrCSeSC jrDSeSD jrESE rFSF rGSG rHSH rISI rJSJ rKSeSK jrLSL rMSM rNSN rOSeSO jrPSfSP jrQSQ rRSR rSSS rTST rUSU rVSV rWSW rXSX rYSY rZSZ r[S[ r\S\ r]S]r^g)gr   N   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                0  ^  UT l         UT l        UT l        UT l        U 4S jnU[        L a  S nOUb  [        U5      UL d1  [        U5      [        U5      L d  [        SU S[        U5       35      eT R                  (       aE  T R                  R                  (       a*  U" 5       n	XI:w  a  [        U SU	 ST R                   S35      eOU" 5       nUT l
        UT l        T R                  =(       a    T R                  R                  n
U
=(       a    UT l        g )Nc                    > SSK Jn   U " TR                  5      (       a  g TR                  R	                  TR                  SS9nUb(  [        U[        5      (       d  TR                  U5      OUnU$ )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*   &SymNode.__init__.<locals>.compute_hint   s`    W )33>>88QU8VD0:40J0Jt{{4(PTKr#   zCannot create SymNode of type z  with incompatible hint of type z != z (for ))_exprr-   r1   r&   r   typer"   AssertionError_translation_validation_enabledr,   _hintconstantfx_node)r3   r,   r-   r1   r2   r;   r<   optimized_summationr*   computed_hinttx_validation_ens   `          r!   __init__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                    [        U R                  XR                  U R                  U R                  U R
                  5      $ r   )r   r6   r1   r:   r;   r<   )r3   r-   s     r!   with_shape_envSymNode.with_shape_env   s.    JJ	;;

DMM4<<
 	
r#   c                4   U R                   UR                   :H  =(       ay    U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )r6   r1   r:   r;   r<   r3   others     r!   	_value_eqSymNode._value_eq   sq     JJ%++% .u||+.

ekk). /. -	
r#   c                    [        U R                  U R                  U R                  U R                  U R
                  45      $ r   )hashr6   r1   r:   r;   r<   r3   s    r!   _value_hashSymNode._value_hash   s,    TZZdjj$--VWWr#   c                L    U R                   R                  U R                  5      $ r   )r-   replacer6   rL   s    r!   r,   SymNode.expr   s    ~~%%djj11r#   c                    U R                   $ r   r:   rL   s    r!   r2   SymNode.hint   s    zzr#   c                    U R                   S L$ r   rS   rL   s    r!   has_hintSymNode.has_hint   s    zz%%r#   c                   SSK Jn  U R                  c  Ub{  U" U R                  5      nU R                  R                   Vs0 s H$  nUXC;   a  UOU R
                  R                  U   _M&     nn[        U R                  R                  U5      5      $ U R
                  R                  U R                  5      $ U R                  $ s  snf )Nr   free_unbacked_symbols)
r+   rZ   r:   r,   free_symbolsr-   backed_var_to_valr   xreplace	size_hint)r3   fallbackrZ   unbacked_symbolssreplacementss         r!   require_hintSymNode.require_hint   s    O::# $9#C 
 "YY33	  4 ,  99!<= 4	    499--l;<<>>++DII66zz s   +Cc                d    U R                   R                  (       a  [        U R                   5      $ g r   )r,   	is_numberr   rL   s    r!   maybe_as_intSymNode.maybe_as_int   s     99tyy>!r#   c                    SS K n[        U R                  UR                  5      (       a  [	        U R                  5      $ g Nr   )sympyr/   r,   Floatr   r3   rk   s     r!   maybe_as_floatSymNode.maybe_as_float   s,    dii--##r#   c                t    SS K nU R                  UR                  L a  gU R                  UR                  L a  gg )Nr   TF)rk   r,   truefalserm   s     r!   maybe_as_boolSymNode.maybe_as_bool   s.    99

"YY%++%r#   c                &    U R                   [        L $ r   )r1   r   rL   s    r!   is_intSymNode.is_int  s    {{c!!r#   c                &    U R                   [        L $ r   )r1   r   rL   s    r!   is_floatSymNode.is_float  s    {{e##r#   c                &    U R                   [        L $ r   )r1   r   rL   s    r!   is_boolSymNode.is_bool	  s    {{d""r#   c                    U R                   S L=(       aE    [        U R                   [        5      =(       a$    U R                   R                  R	                  5       $ r   )r:   r/   r   nodeis_nested_intrL   s    r!   r   SymNode.is_nested_int  sA     JJd" 04::v.0

--/	
r#   c           	         [        U5      [        La  [        S[        U5       35      eSS Kn[	        UR                  U5      U R                  [        XUS9$ )NExpected int, got r   r;   r<   )r7   r   r8   rk   r   Integerr-   r3   numrk   s      r!   wrap_intSymNode.wrap_int  sN    9C #5d3i[!ABBMM#SPS
 	
r#   c           	         [        U5      [        La  [        S[        U5       35      eSS Kn[	        UR                  U5      U R                  [        XUS9$ )NzExpected float, got r   r   )r7   r   r8   rk   r   rl   r-   r   s      r!   
wrap_floatSymNode.wrap_float  sN    9E! #7S	{!CDDKKdnneSPS
 	
r#   c           	         [        U5      [        La  [        S[        U5       35      eSS Kn[	        U(       a  UR
                  OUR                  U R                  [        UUUS9$ )NzExpected bool, got r   r   )r7   r   r8   rk   r   rq   rr   r-   r   s      r!   	wrap_boolSymNode.wrap_bool&  sW    9D  #6tCyk!BCCEJJ5;;NN
 	
r#   c                    U $ r    rL   s    r!   cloneSymNode.clone4  s    r#   c                    U R                    $ r   )r,   rL   s    r!   strSymNode.str7  s    ))r#   c                "    U R                  5       $ r   r   rL   s    r!   __str__SymNode.__str__:  s    xxzr#   c                   SU R                    SU R                   SU R                   3/nU R                  b  UR	                  SU R                   35        U R
                  b  UR	                  SU R
                   35        U R                  b  UR	                  SU R                   35        SR                  U5      S-   $ )	NzSymNode(z, shape_env=z	, pytype=zhint=z	constant=zfx_node=z, r5   )r6   r-   r1   r:   appendr;   r<   join)r3   reps     r!   __repr__SymNode.__repr__=  s    tzzl,t~~.>i}U
 ::!JJtzzl+,==$JJ4==/23<<#JJ$,,01yy~##r#   c                "    U R                  5       $ r   r   rL   s    r!   _graph_reprSymNode._graph_reprI  s    xxzr#   c                "    U R                  5       $ r   )_absrL   s    r!   absSymNode.absO      yy{r#   c                "    U R                  5       $ r   )_posrL   s    r!   posSymNode.posR  r   r#   c                $    U R                  U5      $ r   )_round)r3   ndigitss     r!   roundSymNode.roundU  s    {{7##r#   c                "    U R                  5       $ r   )_truncrL   s    r!   truncSymNode.truncX      {{}r#   c                $    U R                  U5      $ r   )_addrF   s     r!   addSymNode.add[      yyr#   c                $    U R                  U5      $ r   )_subrF   s     r!   subSymNode.sub^  r   r#   c                $    U R                  U5      $ r   )_mulrF   s     r!   mulSymNode.mula  r   r#   c                $    U R                  U5      $ r   )_modrF   s     r!   modSymNode.modd  r   r#   c                $    U R                  U5      $ r   )
_float_powrF   s     r!   	float_powSymNode.float_powg  s    u%%r#   c                $    U R                  U5      $ r   )_pow_by_naturalrF   s     r!   pow_by_naturalSymNode.pow_by_naturalj  s    ##E**r#   c                $    U R                  U5      $ r   )_and_rF   s     r!   and_SymNode.and_m  s    zz%  r#   c                $    U R                  U5      $ r   )_or_rF   s     r!   or_SymNode.or_p  r   r#   c                $    U R                  U5      $ r   )_float_truedivrF   s     r!   float_truedivSymNode.float_truedivs  s    ""5))r#   c                $    U R                  U5      $ r   )_int_truedivrF   s     r!   int_truedivSymNode.int_truedivv        ''r#   c                $    U R                  U5      $ r   )_int_floordivrF   s     r!   int_floordivSymNode.int_floordivy      !!%((r#   c                $    U R                  U5      $ r   )_lshiftrF   s     r!   lshiftSymNode.lshift|      ||E""r#   c                $    U R                  U5      $ r   )_rshiftrF   s     r!   rshiftSymNode.rshift  r   r#   c                "    U R                  5       $ r   )_sym_notrL   s    r!   r   SymNode.sym_not      }}r#   c                $    U R                  U5      $ r   )_eqrF   s     r!   eq
SymNode.eq      xxr#   c                $    U R                  U5      $ r   )_nerF   s     r!   ne
SymNode.ne  r   r#   c                $    U R                  U5      $ r   )_gtrF   s     r!   gt
SymNode.gt  r   r#   c                $    U R                  U5      $ r   )_ltrF   s     r!   lt
SymNode.lt  r   r#   c                $    U R                  U5      $ r   )_lerF   s     r!   le
SymNode.le  r   r#   c                $    U R                  U5      $ r   )_gerF   s     r!   ge
SymNode.ge  r   r#   c                "    U R                  5       $ r   )_floorrL   s    r!   floorSymNode.floor  r   r#   c                "    U R                  5       $ r   )_is_integerrL   s    r!   
is_integerSymNode.is_integer  s    !!r#   c                "    U R                  5       $ r   )
_sym_floatrL   s    r!   r	   SymNode.sym_float  s      r#   c                "    U R                  5       $ r   )_sym_intrL   s    r!   sym_intSymNode.sym_int  r   r#   c                "    U R                  5       $ r   )_ceilrL   s    r!   ceilSymNode.ceil  s    zz|r#   c                "    U R                  5       $ r   )_negrL   s    r!   negSymNode.neg  r   r#   c                $    U R                  U5      $ r   )_sym_minrF   s     r!   r   SymNode.sym_min      }}U##r#   c                $    U R                  U5      $ r   )_sym_maxrF   s     r!   r   SymNode.sym_max  r&  r#   c                $    U R                  X5      $ r   )_sym_ite)r3   then_valelse_vals      r!   r
   SymNode.sym_ite  s    }}X00r#   c                $    U R                  X5      $ r   )_is_contiguousr3   sizesstridess      r!   is_contiguousSymNode.is_contiguous  s    ""522r#   c                $    U R                  X5      $ r   )_is_channels_last_contiguous_2dr1  s      r!   is_channels_last_contiguous_2d&SymNode.is_channels_last_contiguous_2d      33ECCr#   c                $    U R                  X5      $ r   )_is_channels_last_contiguous_3dr1  s      r!   is_channels_last_contiguous_3d&SymNode.is_channels_last_contiguous_3d  r:  r#   c                $    U R                  X5      $ r   )_is_channels_last_strides_2dr1  s      r!   is_channels_last_strides_2d#SymNode.is_channels_last_strides_2d      00@@r#   c                $    U R                  X5      $ r   )_is_channels_last_strides_3dr1  s      r!   is_channels_last_strides_3d#SymNode.is_channels_last_strides_3d  rC  r#   c                $    U R                  X5      $ r   )'_is_non_overlapping_and_dense_indicatorr1  s      r!   &is_non_overlapping_and_dense_indicator.SymNode.is_non_overlapping_and_dense_indicator  s    ;;EKKr#   c                $    U R                  U5      $ r   )r   rF   s     r!   sym_orSymNode.sym_or  r   r#   c                $    U R                  U5      $ r   )r   rF   s     r!   sym_andSymNode.sym_and  r   r#   c                $    U R                  U5      $ r   )_bitwise_andrF   s     r!   bitwise_andSymNode.bitwise_and  r   r#   c                $    U R                  U5      $ r   )_bitwise_orrF   s     r!   
bitwise_orSymNode.bitwise_or  s    &&r#   c                $    U R                  U5      $ r   )_bitwise_xorrF   s     r!   bitwise_xorSymNode.bitwise_xor  r   r#   c                $    U R                  U5      $ r   )r   rF   s     r!   truedivSymNode.truediv  r   r#   c                $    U R                  U5      $ r   )r   rF   s     r!   floordivSymNode.floordiv  r   r#   c                $    U R                  U5      $ r   )r   rF   s     r!   powSymNode.pow  s    ~~e$$r#   c                V    U R                  X5      R                  [        U S5      5      $ )N   )rJ  r   to_noder1  s      r!   is_non_overlapping_and_dense$SymNode.is_non_overlapping_and_dense  s*    ::5JMMD!
 	
r#   c                &    U R                  SS5      $ N r   )	guard_intrL   s    r!   int_SymNode.int_  s    ~~b!$$r#   c           
     &   SS K nSSKJnJn  U" 5       (       a3  [	        U U" [
        R                  [        S U 5       5      40 5      5      $ U Vs/ s H  oUR                  PM     nnUR                  " U6 n/ nS n	U H-  nUR                  c    O*UR                  UR                  5        M/     [        U5      n	U R                  R                  [
        R                  [        S U 5       5      45      u  p[        XpR                  [         XS9$ s  snf )Nr   get_proxy_modehandle_sym_dispatchc              3  8   #    U  H  n[        U5      v   M     g 7fr   )	wrap_node.0as     r!   	<genexpr>"SymNode.sym_sum.<locals>.<genexpr>  s     6A9Q<<   c              3  8   #    U  H  oR                   v   M     g 7fr   r<   rx  s     r!   r{  r|    s     !:T))Tr}  r  )rk   "torch.fx.experimental.proxy_tensorrt  ru  ri  torchsym_sumtupler,   Addr2   r   sumr-   _create_fx_call_functionr   r   )r3   argsrk   rt  ru  rz  exprsout
size_hintsout_hintr<   _s               r!   r  SymNode.sym_sum  s    	

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


 sNNCKK# 's   Dc                8    U R                   R                  X5      $ r   )r-   evaluate_sym_node)r3   size_obliviouss     r!   evaluateSymNode.evaluate  s    ~~//EEr#   c                    U R                  5       n [        U5      $ ! [         a    [        R	                  SU5        e f = f)NzFailed to convert to int: %s)r  r   	Exceptionlogwarningr3   fileliners       r!   ro  SymNode.guard_int  s>     MMO	q6M 	KK6:	   
 "?c                    U R                  5       n [        U5      $ ! [         a    [        R	                  SU5        e f = f)NzFailed to convert to float: %s)r  r   r  r  r  r  s       r!   guard_floatSymNode.guard_float  s>     MMO	8O 	KK8!<	r  c                    U R                  5       n [        U5      $ ! [         a    [        R	                  SU5        e f = f)NFailed to convert to bool: %sr  r   r  r  r  r  s       r!   
guard_boolSymNode.guard_bool)  s>     MMO	7N 	KK7;	r  c                &   SSK Jn  U R                  5       (       aC  U" U R                  5      (       d,  U R                  R
                  (       d  U R                  X5      $ U R                  R                  U R                  U SU 3U R                  S9$ )Nr   rY   :r  )	r+   rZ   rV   r,   r-   +prefer_deferred_runtime_asserts_over_guardsr  guard_or_defer_runtime_assertr<   )r3   r  r  rZ   s       r!   expect_trueSymNode.expect_true3  sw    O MMOO)$))44NNNN ??4..
 ~~;;II$q' < 
 	
r#   c                p    SSK Jn  U R                  5       (       d  [        S5      eU" [	        U 5      5      $ )Nr   )statically_known_trueExpected bool type)r+   r  r|   r8   r   )r3   r  r  r  s       r!   r  SymNode.statically_known_trueE  s+    O||~~ !566$WT]33r#   c                    U R                  SS9n [        U5      $ ! [         a    [        R	                  SU5        e f = f)a  
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)r  r  r  r  s       r!   guard_size_obliviousSymNode.guard_size_obliviousL  sC     MMM.	7N 	KK7;	s   
 ">c                p    SSK Jn  U R                  5       (       d  [        S5      eU" [	        U 5      5      $ )Nr   )guard_or_falser  )r+   r  r|   r8   r   )r3   r  r  r  s       r!   r  SymNode.guard_or_false`  s+    H||~~ !566gdm,,r#   c                p    SSK Jn  U R                  5       (       d  [        S5      eU" [	        U 5      5      $ )Nr   )guard_or_truer  )r+   r  r|   r8   r   )r3   r  r  r  s       r!   r  SymNode.guard_or_trueg  s+    G||~~ !566WT]++r#   c                &    U R                  SS5      $ rm  )r  rL   s    r!   bool_SymNode.bool_n  s    r1%%r#   c                    g)NTr   rL   s    r!   is_symbolicSymNode.is_symbolicq      r#   c                    g r   r   rL   s    r!   
nested_intSymNode.nested_intt  r  r#   c                    g)NFr   rL   s    r!   is_constantSymNode.is_constantw  s    r#   )r6   r:   r&   r;   r<   r1   r-   )NNF)r2   z!Optional[Union[int, float, bool]])r-   r   returnr   )rG   r   r  r   )r  r   r   )r  zbuiltins.str)r  r   )F)___name__
__module____qualname____firstlineno____doc__r&   __annotations__r@   rC   rH   rM   propertyr,   r2   rV   rc   rg   rn   rs   rv   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
   r4  r8  r=  rA  rF  rJ  rM  rP  rT  rX  r\  r_  rb  re  rj  rp  r  r  ro  r  r  r  r  r  r  r  r  r  r  r  __static_attributes__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                  (   ^  \ rS rSrU 4S jrSrU =r$ )_DynamicScalari{  c                N   > U [         L a  [        S5      e[        TU ]  " U /UQ76 $ )Nz9_DynamicScalar is an abstract base class, use DynamicInt.)r  	TypeErrorsuper__new__)clsr  	__class__s     r!   r  _DynamicScalar.__new__|  s+    . WXXws*T**r#   r   )r  r  r  r  r  r  __classcell__r  s   @r!   r  r  {  s    + +r#   r  c                  >   ^  \ rS rSrSrU 4S jrS rS rS rSr	U =r
$ )r   i  z
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                   > [        U[        5      (       d  [        S[        U5       35      e[        TU ]  U [        U5      5      nU$ )Nr   )r/   r   r8   r7   r  r  )r  valobjr  s      r!   r  DynamicInt.__new__  s@    #s## #5d3i[!ABBgoc3s8,
r#   c                "    SU R                    S3$ )NzDynamicInt(r5   )realrL   s    r!   r   DynamicInt.__repr__  s    TYYKq))r#   c                2    [        U R                  U-  5      $ r   r   r  rF   s     r!   __floordiv__DynamicInt.__floordiv__  s    $))u,--r#   c                0    [        XR                  -  5      $ r   r  rF   s     r!   __rfloordiv__DynamicInt.__rfloordiv__  s    %99,--r#   r   )r  r  r  r  r  r  r   r  r  r  r  r  s   @r!   r   r     s!    	*.. .r#   r   r   r   r   andrT  r  r   r  r   r   r
  r   r  c                "    U R                  5       $ r   )r  xs    r!   <lambda>r    s
    ALLNr#   r  r   r  r   r   r   r!  orrX  r\  r   r   r   r   r   r	   r
   r   r   r   r   r   >	   r   r!  r   r  r  r   r  r   r	   c                   ^  U 4S jnU$ )Nc                ,   > [        U ST 35      " 5       $ )N_sym_)getattr)r3   names    r!   fn_get_sym_node_fn.<locals>.fn  s    tuTF^,..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)rT  rX  r\  >   r   r	   r   r   >   r  r  r   r   >   r   r
  r   r  r  r   r  r  r   r  rj  c                    SSK Jn  U" X5      $ )Nr   )FloatTrueDiv)torch.utils._sympy.functionsr  )rz  br  s      r!   _sympy_float_truedivr	  "      9r#   c                    SSK Jn  U" X5      $ )Nr   )
IntTrueDiv)r  r  )rz  r  r  s      r!   _sympy_int_truedivr  (  s    7ar#   c                    SSK Jn  U" X5      $ )Nr   )FloorDiv)r  r  )rz  r  r  s      r!   _sympy_floordivr  .      5A>r#   c                v    SSK JnJn  U R                  (       a  UR                  (       a  U" X5      $ U" X5      $ )Nr   Mod	PythonMod)r  r  r  is_nonnegative)rz  r  r  r  s       r!   
_sympy_modr  4  s*    ;A,,1yr#   c                    SSK Jn  U" X5      $ )Nr   )PowByNatural)r  r  )rz  r  r  s      r!   _sympy_pow_by_naturalr  =  r
  r#   c                    SSK Jn  U" X5      $ )Nr   )FloatPow)r  r  )rz  r  r  s      r!   _sympy_float_powr  C  r  r#   c                ,    SS K nUR                  X5      $ rj   )rk   Andrz  r  rk   s      r!   
_sympy_andr!  I  s    99Q?r#   c                ,    SS K nUR                  X5      $ rj   )rk   Orr   s      r!   	_sympy_orr$  O      88A>r#   c                    SSK Jn  U" X5      $ )Nr   )LShift)r  r'  )rz  r  r'  s      r!   _sympy_lshiftr(  U      3!<r#   c                    SSK Jn  U" X5      $ )Nr   )RShift)r  r+  )rz  r  r+  s      r!   _sympy_rshiftr,  [  r)  r#   c                b   [        U 5      S:X  a  U/$ SSKJnJn  U" U S   5      U" U5      :  a  X/-   $ U" U S   5      U" U5      :  a  U/U -   $ S[        U 5      S-
  pTXE::  a:  XE-   S-  nUR	                  X   U5      nUS:X  a  gUS:  a  US-   nOUS-
  nXE::  a  M:  U R                  XA5        U $ )zg
If new_arg is found in ordered_args None is returned, else the new
ordered_args with new_arg inserted
r   )_args_sortkeyBasicrh     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i'' Q 8G#44y<''3|$q(
+za|'8'BQa'C7D + %r#   c                  ^
 SSK m
SSKJn  U
4S jnSSKJn  X&" U 5      -  nX6" U5      -  nU(       Ga  U(       Ga  U" U R
                  S   5      U" UR
                  S   5      :  a  U" U R
                  UR
                  -   5      $ U" U R
                  S   5      U" UR
                  S   5      :  a  U" UR
                  U R
                  -   5      $ [        U R
                  5      S::  a\  [        UR
                  5      S::  aC  [        U R
                  5      nUR
                   H  n[        Xx5      nUb  M    O   Ub  U" U5      $ U(       a;  UR                  (       a*  [        [        U R
                  5      U5      nUb  U" U5      $ U(       a;  U R                  (       a*  [        [        UR
                  5      U 5      nUb  U" U5      $ T
R                  X5      n	U" U	5      U	4$ )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                \   > U c  [        S5      eTR                  R                  U SS9nSU4$ )Nzordered_args is NoneT)is_commutative)r8   r  
_from_args)r6  resultrk   s     r!   make_optimized&_optimized_add.<locals>.make_optimized  s:     !788
 %%l4%Hf~r#   )_is_symbols_binary_summationr0  r1  )rk   r3  r.  r  rE  _argsr2  listr=  	is_symbolr  )lhsrhslhs_is_optimized_summationrhs_is_optimized_summationsortkeyrC  rE  new_argsrz  rB  rk   s             @r!   _optimized_addrO    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4XA# 
 #%h// "cmm,T#))_cB!(++ "cmm,T#))_cB!(++YYs F(0&99r#   c                    SSK Jn  U" X5      $ )Nr   )BitwiseFn_bitwise_and)r  rQ  )rz  r  rQ  s      r!   rS  rS        B &&r#   c                    SSK Jn  U" X5      $ )Nr   )BitwiseFn_bitwise_or)r  rT  )rz  r  rT  s      r!   rW  rW    s    A%%r#   c                    SSK Jn  U" X5      $ )Nr   )BitwiseFn_bitwise_xor)r  rV  )rz  r  rV  s      r!   r[  r[    rR  r#   c                   SS K n[        XR                  5      (       aq  U R                  n[	        U5      S:X  aV  [        US   UR
                  5      (       a8  US   R                  (       a$  UR                  US   5      nUS   U:X  a  XCS   -  $ [        XR
                  5      (       a  XR                  U 5      :X  d  [        XR                  5      (       a  UR                  U 5      $ U" U 5      $ )Nr   r1  rh  )rk   r/   Mulr  r2  rl   r  r   )rz  r  rk   aacoefs        r!   _floor_ceil_helperr[    s    !YYVVr7a<Jr!uekk::r!u?O?O==A'D!u}e|#1kk""q!!a''}}Qa5Lr#   c                    SSK Jn  U" U 5      $ )Nr   )
FloorToInt)r  r]  )rz  r]  s     r!   _sympy_floorr^        7a=r#   c                    SSK Jn  U" U 5      $ )Nr   )
TruncToInt)r  ra  )rz  ra  s     r!   _sympy_truncrb    r_  r#   c                    SSK Jn  U" U 5      $ )Nr   )	CeilToInt)r  rd  )rz  rd  s     r!   _sympy_ceilre    s    6Q<r#   c                ,    SS K nUR                  X5      $ rj   )rk   Eqr   s      r!   	_sympy_eqrh    r%  r#   c                ,    SS K nUR                  X5      $ rj   )rk   Ner   s      r!   	_sympy_nerk    r%  r#   c                ,    SS K nUR                  X5      $ rj   )rk   Gtr   s      r!   	_sympy_gtrn    r%  r#   c                ,    SS K nUR                  X5      $ rj   )rk   Ltr   s      r!   	_sympy_ltrq  %  r%  r#   c                ,    SS K nUR                  X5      $ rj   )rk   Ler   s      r!   	_sympy_lert  +  r%  r#   c                ,    SS K nUR                  X5      $ rj   )rk   Ger   s      r!   	_sympy_gerw  1  r%  r#   c                    SSK Jn  U" X5      $ )Nr   )Min)r  ry  )rz  r  ry  s      r!   
_sympy_minrz  7      0q9r#   c                    SSK Jn  U" X5      $ )Nr   Max)r  r~  )rz  r  r~  s      r!   
_sympy_maxr  =  r{  r#   c                4    SS K nUR                  X4US45      $ )Nr   T)rk   	Piecewise)rz  r    frk   s       r!   
_sympy_iter  C  s    ??A6At9--r#   c                   ^  U 4S jnU$ )Nc                r   > SS K n[        UR                  R                  R                  ST 35      " U 5      $ )Nr   OpaqueUnaryFn_)r  r  utils_sympy	functions)rz  r  r  s     r!   r  _get_sym_math_fn.<locals>.fnM  s/    +u{{))33~dV5LMaPPr#   r   r  s   ` r!   _get_sym_math_fnr  L  s    Q
 Ir#   _sympy_c                ,    SS K nUR                  U 5      $ rj   )rk   Abs)rz  rk   s     r!   
_sympy_absr  ^  s    99Q<r#   c                8    SSK JnJn  Uc  U" U 5      $ U" X5      $ )Nr   )RoundDecimal
RoundToInt)r  r  r  )numberr   r  r  s       r!   _sympy_roundr  d  s     E&!!F,,r#   c                    SSK Jn  U" U 5      $ Nr   )ToFloat)r  r  )rz  r  s     r!   _sympy_sym_floatr  m  s    4 1:r#   c                d    SS K nSSKJn  UR                  U" UR	                  U 5      5      U 5      $ r  )rk   r  r  rg  r  )rz  rk   r  s      r!   _sympy_is_integerr  u  s&    488GEKKN+Q//r#   )r   r  c                ^    [        U 5      n[        X[        [        US-
  SS5      5      5      $ )Nrh  r0  )r2  sympy_is_contiguous_genericrG  range)r2  r3  dims      r!   sympy_is_contiguousr    s*    
e*C&utE#'2r<R7STTr#   c                   SS K n[        U 5      n[        U5      U:w  a  UR                  $ UR                  nUR                  R
                  nU HI  nXSR                  X   UR                  R
                  5      UR                  X   U5      -  -  nX`U   -  nMK     [        U5       H-  nXSR                  X   UR                  R                  5      -  nM/     U$ rj   )	rk   r2  rr   rq   SOnerg  r  Zero)r2  r3  	dim_orderrk   r  r4  zds           r!   r  r    s    
e*C
9~{{JJMA%(EGGKK8588GJPQ;RRR	1X  3Z%(EGGLL99 r#   c                    [        X/ SQ5      $ N)rh     r1  r   r  r2  r3  s     r!   $sympy_is_channels_last_contiguous_2dr    s    &u|DDr#   c                    [        X/ SQ5      $ N)rh     r  r1  r   r  r  s     r!   $sympy_is_channels_last_contiguous_3dr    s    &uGGr#   c                ~   SS K nSSKJn  [        U 5      nU[        U5      :w  a  UR                  $ UR
                  R                  nUR                  nXsR                  US   S5      -  nU HM  nXsR                  X   S5      X   U:  -  -  nUS:X  a  XsR                  XaS   5      -  nX   U" X   S5      -  nMO     U$ )Nr   r}  rh  )	rk   r  r~  r2  rr   r  r  rq   rj  )	r2  r3  r  rk   r~  r  mr  r  s	            r!   &sympy_is_channels_last_strides_genericr    s    0
e*C
c)n{{A

A '!*a	  A	XXeh"gjAo66 6!QZ((A JUXq))' * Hr#   c                    [        X/ SQ5      $ r  r  r  s     r!   !sympy_is_channels_last_strides_2dr    s    1%,OOr#   c                    [        X/ SQ5      $ r  r  r  s     r!   !sympy_is_channels_last_strides_3dr    s    1%/RRr#   c                "    SSK Jn  U" / U QUQ76 $ )Nr   )!IsNonOverlappingAndDenseIndicator)r  r  )r2  r3  r  s      r!   -_sympy_is_non_overlapping_and_dense_indicatorr    s    N,>e>g>>r#   )r4  r8  r=  rA  rF  rJ  c                "   [        U[        5      (       a  UR                  $ [        U5      [        L a  U R                  U5      $ [        U5      [        L a  U R                  U5      $ [        U5      [        L a  U R                  U5      $ [        $ r   )r/   r0   r   r7   r   r   r   r   r   r   NotImplemented)r3   r   s     r!   ri  ri    sq    #x  xx	cd	~~c""	cc	}}S!!	ce	s## r#   c                :   [        U [        5      (       a  U R                  b  U R                  $ U R                  5       (       a  [	        U 5      $ U R                  5       (       a  [        U 5      $ U R                  5       (       a  [        U 5      $ [        SU  35      e)Nzunrecognized return type )
r/   r   r;   rv   r   ry   r   r|   r   r8   r  s    r!   rw  rw    st    !W!**"8zzxxzzay	
{	
qz8<==r#   c                    [         U    $ r   )METHOD_TO_OPERATOR)methods    r!   r   r      s    f%%r#   c                  ^ ^ [        S5      " T5      mT [        ;   a  T  S3nOT nSS jnU 4S jnUUU 4S j5       nUUU 4S j5       nT [        ;   a  [        [        SU 3U5        g T S:X  a  UU 4S jn[        [        SU 3U5        g T S	:X  a  SUU 4S
 jjn[        [        SU 3U5        g [        [        SU 3U5        g )N   r  c                 T   SS K n U R                  R                  U R                  R                  U R                  R
                  R                  U /nSS Kn U Vs1 s H  n[        R                  " U5      iM     snU R                  R                  R                  5       -  S1-  $ s  snf )Nr   z<string>)r  _dynamo
eval_framer  fxexperimentalr   torch._dynamo.guardsinspectgetfileguardsuninteresting_files)r  modsr  s      r!   r  -_make_node_magic.<locals>.uninteresting_files,  s     MM$$MMHH!!**	
 	$ *..AW__Q.mm""6689l	
.s    B%c                N   >^  [         R                  " T 5      SU U4S jj5       nU$ )Nc                   >^^^ Uc	  T" U 5      mOT" X5      m[         R                  R                  R                  (       a#  Ub  X/mOU /mSU4S jjm[	        SUUUU4S jS9  T$ )Nc                "  > SS K nU R                  b  g [        U 5      [        T5      :X  a  g [        U R                  UR
                  UR                  45      (       a  g U R                  UR                  UR                  4;   a  g [        U 5      $ rj   )	rk   r;   idr/   r,   r   rl   rq   rr   )r   rk   rB  s     r!   get_idM_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.get_idJ  so     ((4#HF3##HMMEMM5;;3OPP#!5::u{{*CC#h<'r#   expression_createdc            
       > T[        T5      [        T5      T V s/ s H  n [        U 5      PM     sn T Vs/ s H  nT" U5      c  M  T" U5      PM     sn[        R                  " S5      [        R                  " S5      S.$ s  sn f s  snf )Nr  )r  rB  	result_id	argumentsargument_ids
user_stackstack)r   r  
structuredget_user_stackget_framework_stack)rz  ir  r  r  rB  s     r!   r  O_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>Z  s{    "("%f+%'Z6?%@ic!fi%@/8)/8!F1IIF1Iy) '1&?&?&B!+!?!?!B
) &A)s   B
BB)metadata_fn)r  zOptional[int])r  _logging	_internalGET_DTRACE_STRUCTUREDr   )r3   rG   r  r  rB  r  r  s     @@@r!   wrapper=_make_node_magic.<locals>.capture_provenance.<locals>.wrapper>  s_    }DD~~''==$!%I!%I( "(
! Mr#   r   )	functoolswraps)r  r  r  s   ` r!   capture_provenance,_make_node_magic.<locals>.capture_provenance=  s&    		(	 
(	T r#   c           
       > SSK JnJn  [        T5      n[        nU R
                  b*  UR
                  b  U" U R
                  UR
                  5      nU" 5       (       a'  [        X" U[        U 5      [        U5      40 5      5      $ [        U[        5      (       d  [        S[        U5       35      eSn TS:X  a  SSKJnJn  U R                  n	U R                   R"                  (       d)  U	R%                  U R                   5      R&                  S:  ac  UR                   R"                  (       d)  U	R%                  UR                   5      R&                  S:  a  U" U R                   UR                   5      n
GOU" U R                   UR                   5      n
GOTS:X  a:  [)        U R                   UR                   U R*                  UR*                  5      u  pjGOlTS;   GaG  SS KnSS	KJnJn  U R                   R4                  =(       a    U" U R                   UR6                  5      nUR                   R4                  =(       a    U" UR                   UR6                  5      nU(       a  UR                   R8                  (       d"  U(       a  U R                   R8                  (       ae  UR:                  UR<                  UR>                  UR@                  URB                  URD                  S.T   nU" U R                   UR                   SS
9n
O<T" U R                   UR                   5      n
OT" U R                   UR                   5      n
 [L        RO                  STU R                   UR                   U
5        T[P        ;   a  [R        nOJT[T        ;   a  [V        nO9U RX                  [R        L d  URX                  [R        L a  [R        nOU RX                  nUb)  U[        La   Ub  [        U[Z        5      (       d  U" U5      nU R                  R]                  X@R^                  UR^                  45      u  nn[        U
U R                  UUUUS9nU$ ! [F         a.    [H        RK                  STU R                   UR                   5        e f = f)Nr   rs  zExpected SymNode, got Fr   r  r   )r   r   r
  r   r  r  )symbol_is_typeSymT)r  failed to eval %s(%s, %s)z%s %s %s -> %s)r<   r=   )0r  rt  ru  r   r   r2   ri  rw  r/   r   r8   r7   r  r  r  r-   r,   r  bound_sympylowerrO  r&   rk   torch.utils._sympy.symbolr  r  rH  UNBACKED_INTrf   rg  rj  rv  rm  rs  rp  r  r  r  sym_node_logdebugalways_float_magic_methodsr   always_bool_magic_methodsr   r1   r0   r  r<   )r3   rG   rt  ru  opr  r=   r  r  r-   r  rk   r  r  lhs_is_unbackedrhs_is_unbacked	rel_classr1   r<   r  rB  funcr  s                        r!   binary_magic_impl+_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2h'H ^^<<u}}-

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

S	s,   4B?Q 5Q >Q D/Q Q "Q 8Q:c           	       > SSK JnJn  [        T5      nU" 5       (       a  [	        X" U[        U 5      40 5      5      $ U R                  nTS:X  d  TS:X  a  U R                  R                  U5      n T
" U5      n[        R                  ST
XE5        [        nU R                  b  U" U R                  5      nT[         ;   a  ["        nO.T[$        ;   a  [&        nOT[(        ;   a  [*        nOU R,                  nU R                  R/                  X0R0                  45      u  p[3        XPR                  XvUS9$ ! [         a    [        R                  STU5        e f = f)Nr   rs  r  ceilingzfailed to eval %s(%s)z%s %s -> %sr  )r  rt  ru  r   ri  rw  r,   r-   _simplify_floor_divr  r  r  r  r  r   r2   always_int_magic_methodsr   r  r   r  r   r1   r  r<   r   )r3   rt  ru  r  r,   r  r  r1   r<   r  r  r  s             r!   unary_magic_impl*_make_node_magic.<locals>.unary_magic_impl  s,   	

  '4!4R)D/9KR!PQQyyW) 3>>55d;D	t*C 	=$:#99 $))}H--F00F11F[[F^^<<R,,Q
sNNFgNN%  	KK/>	s   2D2 2#Er
   c                  > SSK JnJn  U R                  (       a  UR                  OUR                  nU" 5       (       a6  [	        U U" [
        [        U 5      [        U5      [        U5      40 5      5      $  T	" U R                  UR                  UR                  5      nU R                  R                  [
        U R                  UR                  UR                  45      u  px[        X`R                  UR                  XWS9$ ! [         a9    [        R                  ST
U R                  UR                  UR                  5        e f = f)Nr   rs  zfailed to eval %s(%s, %s, %s)r  )r  rt  ru  r2   ri  r
   rw  r,   r  r  r  r-   r  r<   r   r1   )	pred_node	then_node	else_nodert  ru  r  r  r<   r  r  r  s            r!   sym_ite_impl&_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JG (()*:*:H   3NNNNNN s   6(D   AEr   c           	     (  > SSK JnJn  [        R                  nU" 5       (       a  [        X" U[        U 5      U40 5      5      $ U R                  n T" XQ5      nUc  [        nOU R                  nS nU R                  b  U" U R                  U5      nU R                  /n	Ub  U	R                  U5        U R                   R#                  U[%        U	5      5      u  p['        X`R                   XxU
S9$ ! [         a    [        R                  STXQ5        e f = f)Nr   rs  z!failed to eval %s(%s, ndigits=%s)r  )r  rt  ru  builtinsr   ri  rw  r,   r  r  r  r   r1   r2   r<   r   r-   r  r  r   )r3   r   rt  ru  r  r,   r  r1   r  r  r<   r  r  r  s               r!   
round_impl$_make_node_magic.<locals>.round_impl;  s   
 B-b9T?G2LbQ  99D4)
 Hyy$dii1 LL>D"G$@@U4[QJG3'RR1  ?Ws   C. .#D)r  zset[str]r   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )	r  r  method_attrr  r  r  r  r	  r  s	   ``       r!   _make_node_magicr  $  s    S>$DCCl
",\ y yv "O "OH 1[M*,<=	9	&	P 	1[M*L9	7	'	S '	SR 	1[M*J71[M*,=>r#   c                   ^ ^ UU 4S jn[        [        ST  3U5        UU 4S jn[        [        R                  [
           T 5      (       d#  [        [        R                  [
           T U5        g g )Nc                N  > SSK JnJn  [        [        R
                  [           T5      nU" 5       (       aJ  [        U U" UU Vs/ s H  n[        U5      PM     snU Vs/ s H  n[        U5      PM     sn40 5      5      $ U Vs/ s H  ofR                  PM     nnU Vs/ s H  ofR                  PM     nn T" Xx5      n	/ n
S nU H-  nUR                  c    O\U
R                  UR                  5        M/     / nU H-  nUR                  c    O'UR                  UR                  5        M/     U" X5      nTR                  S5      (       a  [         nO["        n[%        XR&                  X5      $ s  snf s  snf s  snf s  snf ! [         a    [        R                  STXx5        e f = f)Nr   rs  r  
_indicator)r  rt  ru  r  sysmodulesr  ri  rw  r,   r  r  r  r2   r   endswithr   r   r   r-   )r3   r2  r3  rt  ru  r  ra   
size_exprsstride_exprsr  r  r  stride_hintsr1   r  r  s                 r!   sizes_strides_impl4_make_node_sizes_strides.<locals>.sizes_strides_impll  s   	

 S[[*F3#,12EqilE274S7aYq\74ST  ',,effe
,(/010	z0C 
Avv~aff% 
 L66>##AFF+ 
 j7 ??<((FFsNNF==E 34S -0  	KK3VZV	s$   E-E2E7 E<8F #F$r  c                D  > SS K nSSKJn  [        R                  " X5       H  n[        U[        5      (       d  M  [        [        UR                  T5      " U  Vs/ s H  n[        UR                  U5      PM     snU Vs/ s H  n[        UR                  U5      PM     sn5      5      s  $    TS:X  a  U" X5      $ [        T" U  Vs/ s H  oBR                  U5      PM     snU Vs/ s H  oBR                  U5      PM     sn5      5      $ s  snf s  snf s  snf s  snf )Nr   )!eval_is_non_overlapping_and_denserJ  )rk   r+   r   	itertoolschainr/   r   rw  r  r   ri  r   sympify)r2  r3  rk   r   rz  r  r  r  s         r!   sizes_strides_user4_make_node_sizes_strides.<locals>.sizes_strides_user  s    	
 0A!V$$ AFFF+5:;U+U;5<=W+W=  1 ==4UDD /45u!]]1%u5/67w!]]1%w7  <= 67s    D D	D)D)r  r   hasattrr  r  r  )r  r  r  r$  s   ``  r!   _make_node_sizes_stridesr'  i  sV    .>` Gq\#56
6 3;;x(&11H%v/AB 2r#   c                ,  ^ ^
^^^^ T [         ;   a  ST  3mOT mSS jm
S mT [        ;   a  S mOS mU 4S jmU
UU UU4S jnU
UU UUU4S jnU
UU UUU4S	 jnS
 nT [        ;   a  U" UST  S3U5        g T [        ;   a   [	        UT 5      nU" UT [        X&5      5        g T S:X  a  U
U4S jnU" UST  S3U5        g T S:X  a  SU
UU 4S jjnU" UST  S3U5        g T n	T [        ;   a	  [        T    n	U" USU	 S3U5        T [        ;   a  U" USU	 S3U5        g g )Nr  c                    [        U [        [        [        45      (       a  U $ [        U [        5      (       a  U R
                  R                  SS5      $ [        U [        5      (       a  U R
                  R                  SS5      $ [        S5      e)Nrn  r   z*expect to be called with constant SymBools)
r/   r   r   r   r   r   ro  r   r  r8   r  s    r!   get_constant&_make_user_magic.<locals>.get_constant  so    a#ud+,,Ha  66##B**a!!66$$R++IJJr#   c                    [        U [        [        [        45      (       a  g[        U [        [
        [        45      (       a  U R                  R                  5       $ g)NTF)	r/   r   r   r   r   r   r   r   r  r  s    r!   r  %_make_user_magic.<locals>.is_constant  sC    a#ud+,,a&(G45566%%''r#   c                    [        U [        5      (       a-  [        U R                  R	                  [        U 5      5      5      $ U $ )z;Implements True+True=2, which works in python but not sympy)r/   r   r   r   r   r   r  s    r!   promote!_make_user_magic.<locals>.promote  s0    !W%%affooc!f566Hr#   c                    U $ r   r   r  s    r!   r/  r0    s    Hr#   c                ,  > TS;  a  X4$ [        U [        [        R                  45      n[        U[        [        R                  45      nU(       d  U(       a:  U(       d  [        R                  " U 5      n U(       d  [        R                  " U5      nX4$ )N)r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  )r/   r   r  r   r	   )r3   rG   f_selff_otherr  s       r!   promote2"_make_user_magic.<locals>.promote2  su      
 
$ ;D5%.."9:UUENN$;<Wt,.{r#   c                   > T" U 5      n T" U 5      (       a  [        T5      " T" U 5      5      $ [        [        U R                  T5      " 5       5      $ r   )r   rw  r  r   )r3   r*  r  r  r  r/  s    r!   r  *_make_user_magic.<locals>.unary_magic_impl0  sE    t}t&v.T0BCCK8:;;r#   c           	       > [        U[        [        [        [        [
        [        45      (       d  [        $ [        R                  STX5        T" U 5      n T" U5      nT	" X5      u  pT" U 5      (       a  [        T5      " T" U 5      U5      $ T" U5      (       a  T" U5      n[        U R                  U5      nU[        L a  [        $ [        [        U R                  T5      " U5      5      nT" U5      (       a  T" U5      $ U$ )NzMAGIC %s %s %s)r/   r   r   r   r   r   r   r  r  r  r   ri  r   rw  r  
r3   rG   
other_noderetr*  r  r  r  r/  r5  s
       r!   r  +_make_user_magic.<locals>.binary_magic_impl6  s    %#udFHg!NOO!!+VTAt}t+t&v.T0BEJJu 'ETYY.
'!!		;7
CD$/$4$4|C =#=r#   c           	       > [        U[        [        [        [        [
        [        45      (       d  [        $ T" U 5      n T" U5      nT	" X5      u  pT" U 5      (       a  [        T5      " UT" U 5      5      $ T" U5      (       a  T" U5      n[        U R                  U5      nU[        L a  [        $ [        [        UT5      " U R                  5      5      nT" U5      (       a  T" U5      $ U$ r   )r/   r   r   r   r   r   r   r  r   ri  r   rw  r  r:  s
       r!   rbinary_magic_impl,_make_user_magic.<locals>.rbinary_magic_implG  s    %#udFHg!NOO!!t}t+t&v.|D7IJJu 'ETYY.
'!!
K8CD$/$4$4|C =#=r#   c                b   ^ [        U TU5        U4S jnU [        L a  [        [        TU5        gg)z
Registers the SymNode magic method on SymInt/Float/Bool,
and optionally registers a corresponding wrapped method on DynamicInt.
c                   > U  Vs/ s H&  n[        U[        5      (       a  UR                  OUPM(     n n[        [        T5      " U 6 n[        U[        5      (       a   [        U[
        5      (       d  [        U5      $ U$ s  snf r   )r/   r   r  r  r   r   )r  r  r  attrs      r!   dynamic_int_impl<_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impla  sk    HLM1jJ77AFFQ>DM#t$d+C#s##JsD,A,A!#&J	 Ns   -A?N)r  r   r   )	user_typerC  symnode_implrD  s    `  r!   setattrs"_make_user_magic.<locals>.setattrsW  s2     		4.	 J&67 r#   __r
   c                  > U R                   n[        X15      n[        X25      nU[        L d	  U[        L a  [        $ [        U[        5      (       a/  [        U[        5      (       a  UR
                  UR
                  :X  d  [        S5      e[        [        U R                   T5      " XE5      5      nUR                   R                  5       (       a  T" U5      $ U$ )Nz9then_node and else_node must be SymNodes with same pytype)
r   ri  r  r/   r   r1   r8   rw  r  r  )	predr,  r-  r  r  r  r<  r*  r  s	          r!   sym_ite_magic_impl,_make_user_magic.<locals>.sym_ite_magic_implr  s    		I	4I	4IN*i>.I%%9g..y'22$$	(8(88$O  GDII{;IQRC(+(<(<(>(><$GCGr#   r   c                   > T" U 5      (       a  [         R                  " T" U 5      U5      $ [        [        U R                  T5      " U5      5      $ r   )r  r   rw  r  r   )r3   r   r*  r  r  s     r!   round_magic_impl*_make_user_magic.<locals>.round_magic_impl  s?    4  ~~l4&8'BBWTYY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  rF  r  r  r?  rH  origrM  rP  method_namer*  r  r  r/  r5  s   `         @@@@@r!   _make_user_magicrZ    sP    CCVHoKB //		!T< <> >"> > 8( $$bO-=>	)	)y&)FN3C$JK	9		H" 	bO-?@	7		B 	B 	bO-=>[ %f-KbR02CD..Y#k]" 57IJ /r#   )FFr   )
__future__r   r  r  r  r!  loggingmathoperatorr  r   r   typingr   r   r   r  torch._logging.structuredr  r  r	   r
   r   r   r   r   r   r   torch._loggingr   r+   r   	getLoggerr  r  getArtifactLoggerr  r   r   r  r   r   r   HintType__all__torch.typesr   r0   r"   r   r  r   r   r   r   r   r  r   r  r   rb  r
  r   r  r   r  r   r   r   r!  r   r  re  r   r   r   r_  r  rT  r  math_op_namesr  sym_namepriv_sym_namer  r  r   rU  r  only_bool_magic_methodsrS  also_bool_magic_methodsbool_magic_methodsonly_float_magic_methodsr  rV  r  r  r  r	  r  r  r  r  r  r!  r$  r(  r,  r=  rO  rS  rW  r[  rW  r[  r^  rb  re  rh  rk  rn  rq  rt  rw  rz  r  r  r  current_moduler  priv_sympy_namer  r  r  r  r  r  invertr   r  r  r  r  r  r  r  r  sizes_strides_methodsri  rw  r   r  r'  itemsr  r  rZ  r   r#   r!   <module>rs     sA   #        
 / 1 1  . .	 	 	 - >!~~//*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& Dv&O	$	B$33BObkNOR0	  o-0x 
8<< 	)	
 	) 	) 	) 	) 	) \ \ ! K 
8<< z  z!" z#$ 
:%& #)0 DdV}H%nv6FGM(  	(M>U
0EH%PPS? )&J&J#D#D.[	 >&B?J
TCn "'')LFDVT" * *//1LFDVT* 2LK^ F(()))*((F6T,T)VV$[ *  r#   