
    9j"                      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 d dlm Z  d dl!Z!d d	l"m#Z#  ejH                  e%      Z&ej$                  jO                  e%d
      Z( e)       Z*de+d<   e,e-z  e.z  dz  Z/g dZ0d dl1m2Z3 ed}d       Z4ed~d       Z4edd       Z4edd       Z4ddZ4 G d d      Z5 G d d      Z6 G d de6e.      Z7i dejp                  dejr                  dejt                  dejv                  dejv                  dejx                  d ejz                  d!ej|                  d"ej~                  d#ej                  d$ej                  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                  d0ej                  d1ej                  d2ej                  d3ej                  d4ej                  d5ej                  d6ej                  d7ed8ed9ed:ed;ed<ej                  d=ej                  iZQh d>ZRdd?ZSd@ZTeTD ]J  ZUdAeU ZVdBeV ZW eXe5eV eSeU              eYeeW      eQeV<   eRju                  eV       e0j                  eV       L d&hZ[eRe[z  Z\h dCZ]h dDZ^d hZ_e]e_z  Z`h dEZadd/hZbdd/dFdGZch dHZdeTD ]  ZUdAeU ZVedju                  eV        h dIZeh dJZfddKZgddLZhddMZiddNZjddOZkddPZlddQZmddRZnddSZoddTZp	 	 	 	 	 	 ddUZq	 	 d	 	 	 	 	 	 	 	 	 ddVZrddWZsddXZtddYZui dejt                  d6ej                  d,ej                  d+ejd3ekd2eldemdesd/end0etd1eud<egd=ehd#eid)eod5epZvddZZwdd[Zxdd\Zydd]Zzdd^Z{dd_Z|dd`Z}ddaZ~ddbZddcZdddZddeZddfZe	j                  e%   ZddgZeTD ]'  ZUdheU Z eeU      Zexe_        e_%         eXeee       ) [[U[ddiZ	 d	 	 	 	 	 ddjZddkZddlZi evi d;ej                  dejp                  d e{d-e|d%e}d*e~d(ed$ed!exd"eyd7edezd.ej                  d:ed9ed8edeeedmZeTD ]  ZUdAeU ZV eYedheU       eeV<    [U[V[T[	 	 	 	 	 	 ddnZ	 	 	 	 	 	 	 	 ddoZ	 	 	 	 	 	 ddpZ	 	 	 	 	 	 ddqZ	 	 	 	 	 	 	 	 ddrZ	 	 	 	 	 	 ddsZ	 	 	 	 	 	 ddtZ	 	 	 	 	 	 dduZeeeeeedvZddwZddxZddyZddzZdd{Zej=                         D ]  \  ZZ eee        ej=                         D ]  \  ZZ eee        dd|ZeD ]F  Zee]v r
 eee       eeav r
 eee       ee_v see^v r	 eee        eee       eecvs> eee       H [[y)    )annotationsN)	lru_cacheupdate_wrapper)AnyoverloadTYPE_CHECKING)	sym_floatsym_itesym_maxsym_minsym_notSymBoolSymFloatSymInt)dtrace_structured)Callable)Self)ShapeEnvsym_nodeobject_NO_HINT)SymNodemethod_to_operatormagic_methods
DynamicInt)py_sym_typesc                     y N ts    ^/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/fx/experimental/sym_node.py_to_symtyper#   D   s    14    c                     y r   r   r    s    r"   r#   r#   F   s    /2r$   c                     y r   r   r    s    r"   r#   r#   H   s    36r$   c                     y r   r   r    s    r"   r#   r#   J   s    "%r$   c                Z    | t         u rt        S | t        u rt        S | t        u rt
        S | S r   )boolr   intr   floatr   r    s    r"   r#   r#   L   s+    DyCxEzHr$   c                  N   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`d
       Ze
dad       ZdbdZdcdZdddZdedZdbdZdbdZdbdZdbdZdfdZdgdZdhdZdidZdjdZdjdZdjdZdjdZdidZdidZdkdldZdidZ dmd Z!dmd!Z"dmd"Z#dmd#Z$dmd$Z%dmd%Z&dmd&Z'dmd'Z(dmd(Z)dmd)Z*dmd*Z+dmd+Z,dmd,Z-did-Z.dmd.Z/dmd/Z0dmd0Z1dmd1Z2dmd2Z3dmd3Z4did4Z5did5Z6did6Z7did7Z8did8Z9did9Z:dmd:Z;dmd;Z<dnd<Z=dod=Z>	 	 	 	 	 	 dod>Z?	 	 	 	 	 	 dod?Z@	 	 	 	 	 	 dod@ZA	 	 	 	 	 	 dodAZB	 	 	 	 	 	 dodBZCdmdCZDdmdDZEdmdEZFdmdFZGdmdGZHdmdHZIdmdIZJdmdJZK	 	 	 	 	 	 dodKZLd_dLZMdpdMZNdqdrdNZOdsdOZPdtdPZQdudQZRdudRZSdudSZTdudTZUdudUZVdudVZWdbdWZXdbdXZYdvdYZZdbdZZ[y)wr   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                    | _         | _        | _        | _        d _        d  _        d 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                  t	        d      j                  j                  j                  d      }|#t        |t              sj                  |      n|}|S )Nr   )has_free_unbacked_symbolsz%shape_env is required to compute hintT)compute_hint)	%torch.fx.experimental.symbolic_shapesr1   expr	shape_envRuntimeError_maybe_evaluate_static
isinstanceSymTypespytype)r1   hintselfs     r"   r2   z&SymNode.__init__.<locals>.compute_hint   sp    W )3~~%"#JKK>>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 )returnz&HintType | SymInt | SymFloat | SymBool)_exprr5   r:   r-   	_expr_ver_expr_cacher   typer#   AssertionError_translation_validation_enabledr4   _hintconstantfx_node)r<   r4   r5   r:   r;   rG   rH   optimized_summationr2   computed_hinttx_validation_ens   `          r"   __init__zSymNode.__init__h   s    
"$7!:	" 8DJ&(DJ+f:M,M$4h>tDzlL  ~~$.."P"P !-=((D6m_F499+UV)WXX>D
3; NNMt~~MM 	 (3Gr$   c                    t        | j                  || j                  | j                  | j                  | j
                        S r   )r   r@   r:   rF   rG   rH   )r<   r5   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   )r@   r:   rF   rG   rH   r<   others     r"   	_value_eqzSymNode._value_eq   sq     JJ%++% .u||+.

ekk). /. -	
r$   c                    t        | j                  | j                  | j                  | j                  | j
                  f      S r   )hashr@   r:   rF   rG   rH   r<   s    r"   _value_hashzSymNode._value_hash   s,    TZZdjj$--VWWr$   c                   t        | j                  t              s| j                  j                  r| j                  S | j                  t        d      | j                  j                  }|dk(  r| j                  S | j                  || j                  k(  r| j                  S | j                  j                  | j                        }|| _        || _        |S )Nz$shape_env is required to access exprr   )
r8   r@   r*   	is_numberr5   rD   _replacements_version_counterrB   rA   replace)r<   verresults      r"   r4   zSymNode.expr   s     tzz3'zz##::>>! !GHHnn::!8::'C4>>,A###''

3!r$   c                    | j                   S r   rF   rU   s    r"   r;   zSymNode.hint   s    zzr$   c                    | j                   d uS r   r^   rU   s    r"   has_hintzSymNode.has_hint   s    zz%%r$   c                Z    | j                   j                  rt        | j                         S y r   )r4   rX   r*   rU   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   )sympyr8   r4   Floatr+   r<   re   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)re   r4   truefalserg   s     r"   maybe_as_boolzSymNode.maybe_as_bool   s.    99

"YY%++%r$   c                &    | j                   t        u S r   )r:   r*   rU   s    r"   is_intzSymNode.is_int  s    {{c!!r$   c                &    | j                   t        u S r   )r:   r+   rU   s    r"   is_floatzSymNode.is_float
  s    {{e##r$   c                &    | j                   t        u S r   )r:   r)   rU   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   )rF   r8   r   nodeis_nested_intrU   s    r"   ru   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   rG   rH   )rC   r*   rD   re   r   Integerr5   r<   numre   s      r"   wrap_intzSymNode.wrap_int  sR    9C #5d3i[!ABBEMM#S3PS
 	
r$   c                    t        |      t        urt        dt        |             dd l}t	         |j
                  |      | j                  t        |||      S )NzExpected float, got r   rx   )rC   r+   rD   re   r   rf   r5   rz   s      r"   
wrap_floatzSymNode.wrap_float!  sR    9E! #7S	{!CDDEKK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   rx   )rC   r)   rD   re   r   rj   rk   r5   rz   s      r"   	wrap_boolzSymNode.wrap_bool*  sW    9D  #6tCyk!BCCEJJ5;;NN
 	
r$   c                    | S r   r   rU   s    r"   clonezSymNode.clone8  s    r$   c                    | j                    S r   )r4   rU   s    r"   strzSymNode.str;  s    ))r$   c                "    | j                         S r   r   rU   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, r=   )r@   r5   r:   rF   appendrG   rH   join)r<   reps     r"   __repr__zSymNode.__repr__A  s    tzzl,t~~.>i}U
 ::!JJtzzl+,==$JJ4==/23<<#JJ$,,01yy~##r$   c                "    | j                         S r   r   rU   s    r"   _graph_reprzSymNode._graph_reprM  s    xxzr$   c                "    | j                         S r   )_absrU   s    r"   abszSymNode.absS      yy{r$   c                "    | j                         S r   )_posrU   s    r"   poszSymNode.posV  r   r$   c                $    | j                  |      S r   )_round)r<   ndigitss     r"   roundzSymNode.roundY  s    {{7##r$   c                "    | j                         S r   )_truncrU   s    r"   trunczSymNode.trunc\      {{}r$   c                $    | j                  |      S r   )_addrP   s     r"   addzSymNode.add_      yyr$   c                $    | j                  |      S r   )_subrP   s     r"   subzSymNode.subb  r   r$   c                $    | j                  |      S r   )_mulrP   s     r"   mulzSymNode.mule  r   r$   c                $    | j                  |      S r   )_modrP   s     r"   modzSymNode.modh  r   r$   c                $    | j                  |      S r   )
_float_powrP   s     r"   	float_powzSymNode.float_powk  s    u%%r$   c                $    | j                  |      S r   )_pow_by_naturalrP   s     r"   pow_by_naturalzSymNode.pow_by_naturaln  s    ##E**r$   c                $    | j                  |      S r   )_and_rP   s     r"   and_zSymNode.and_q  s    zz%  r$   c                $    | j                  |      S r   )_or_rP   s     r"   or_zSymNode.or_t  r   r$   c                $    | j                  |      S r   )_float_truedivrP   s     r"   float_truedivzSymNode.float_truedivw  s    ""5))r$   c                $    | j                  |      S r   )_int_truedivrP   s     r"   int_truedivzSymNode.int_truedivz        ''r$   c                $    | j                  |      S r   )_int_floordivrP   s     r"   int_floordivzSymNode.int_floordiv}      !!%((r$   c                $    | j                  |      S r   )_lshiftrP   s     r"   lshiftzSymNode.lshift      ||E""r$   c                $    | j                  |      S r   )_rshiftrP   s     r"   rshiftzSymNode.rshift  r   r$   c                "    | j                         S r   )_sym_notrU   s    r"   r   zSymNode.sym_not      }}r$   c                $    | j                  |      S r   )_eqrP   s     r"   eqz
SymNode.eq      xxr$   c                $    | j                  |      S r   )_nerP   s     r"   nez
SymNode.ne  r   r$   c                $    | j                  |      S r   )_gtrP   s     r"   gtz
SymNode.gt  r   r$   c                $    | j                  |      S r   )_ltrP   s     r"   ltz
SymNode.lt  r   r$   c                $    | j                  |      S r   )_lerP   s     r"   lez
SymNode.le  r   r$   c                $    | j                  |      S r   )_gerP   s     r"   gez
SymNode.ge  r   r$   c                "    | j                         S r   )_floorrU   s    r"   floorzSymNode.floor  r   r$   c                "    | j                         S r   )_is_integerrU   s    r"   
is_integerzSymNode.is_integer  s    !!r$   c                "    | j                         S r   )
_sym_floatrU   s    r"   r	   zSymNode.sym_float  s      r$   c                "    | j                         S r   )_sym_intrU   s    r"   sym_intzSymNode.sym_int  r   r$   c                "    | j                         S r   )_ceilrU   s    r"   ceilzSymNode.ceil  s    zz|r$   c                "    | j                         S r   )_negrU   s    r"   negzSymNode.neg  r   r$   c                $    | j                  |      S r   )_sym_minrP   s     r"   r   zSymNode.sym_min      }}U##r$   c                $    | j                  |      S r   )_sym_maxrP   s     r"   r   zSymNode.sym_max  r   r$   c                &    | j                  ||      S r   )_sym_ite)r<   then_valelse_vals      r"   r
   zSymNode.sym_ite  s    }}Xx00r$   c                &    | j                  ||      S r   )_is_contiguousr<   sizesstridess      r"   is_contiguouszSymNode.is_contiguous  s    ""5'22r$   c                &    | j                  ||      S r   )_is_channels_last_contiguous_2dr   s      r"   is_channels_last_contiguous_2dz&SymNode.is_channels_last_contiguous_2d       3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   rP   s     r"   sym_orzSymNode.sym_or  r   r$   c                $    | j                  |      S r   )r   rP   s     r"   sym_andzSymNode.sym_and  r   r$   c                $    | j                  |      S r   )_bitwise_andrP   s     r"   bitwise_andzSymNode.bitwise_and  r   r$   c                $    | j                  |      S r   )_bitwise_orrP   s     r"   
bitwise_orzSymNode.bitwise_or  s    &&r$   c                $    | j                  |      S r   )_bitwise_xorrP   s     r"   bitwise_xorzSymNode.bitwise_xor  r   r$   c                $    | j                  |      S r   )r   rP   s     r"   truedivzSymNode.truediv  r   r$   c                $    | j                  |      S r   )r   rP   s     r"   floordivzSymNode.floordiv  r   r$   c                $    | j                  |      S r   )r   rP   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_intrU   s    r"   int_zSymNode.int_  s    ~~b!$$r$   c           
     T   dd l }ddlm}m}  |       r3t	        |  |t
        j                  t        d |D              fi             S |D cg c]  }|j                   }} |j                  | }g }t        }	|D ]+  }|j                   n(|j                  |j                         - t        |      }	| j                  t        d      | 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   z!shape_env is required for sym_sumc              3  4   K   | ]  }|j                     y wr   rH   r2  s     r"   r5  z"SymNode.sym_sum.<locals>.<genexpr>  s     !:!))!:s   r7  )re   "torch.fx.experimental.proxy_tensorr.  r/  r%  torchsym_sumtupler4   Addr   r;   r   sumr5   r6   _create_fx_call_functionr   r*   )r<   argsre   r.  r/  r4  exprsout
size_hintsout_hintrH   _s               r"   r:  zSymNode.sym_sum  s   	

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


 sDNNC7KK' 's   D%c                h    | j                   t        d      | j                   j                  | |      S )Nz!shape_env is required to evaluate)r5   r6   evaluate_sym_node)r<   size_obliviouss     r"   evaluatezSymNode.evaluate#  s/    >>!BCC~~//nEEr$   c                    | j                         }	 t        |      S # t        $ r t        j	                  d|        w xY w)NzFailed to convert to int: %s)rH  r*   	Exceptionlogwarningr<   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)rH  r+   rJ  rK  rL  rM  s       r"   guard_floatzSymNode.guard_float3  s>     MMO	8O 	KK8!<	rQ  c                    | j                         }	 t        |      S # t        $ r t        j	                  d|        w xY w)NFailed to convert to bool: %srH  r)   rJ  rK  rL  rM  s       r"   
guard_boolzSymNode.guard_bool=  s>     MMO	7N 	KK7;	rQ  c                >   ddl m} | j                  t        d      | j	                         r: || j
                        s(| j                  j                  s| j                  ||      S | j                  j                  | j
                  | d| | j                        S )Nr   )free_unbacked_symbolsz%shape_env is required for expect_true:r7  )
r3   rY  r5   r6   r`   r4   +prefer_deferred_runtime_asserts_over_guardsrW  guard_or_defer_runtime_assertrH   )r<   rN  rO  rY  s       r"   expect_truezSymNode.expect_trueG  s    O>>!FGG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)r3   r_  rr   rD   r   )r<   rN  rO  r_  s       r"   r_  zSymNode.statically_known_true[  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)rG  rU  rV  rM  s       r"   guard_size_obliviouszSymNode.guard_size_obliviousb  sC     MMM.	7N 	KK7;	s	   
 !A c                f    ddl m} | j                         st        d       |t	        |             S )Nr   )guard_or_falser`  )r3   rd  rr   rD   r   )r<   rN  rO  rd  s       r"   rd  zSymNode.guard_or_falsev  s)    H||~ !566gdm,,r$   c                f    ddl m} | j                         st        d       |t	        |             S )Nr   )guard_or_truer`  )r3   rf  rr   rD   r   )r<   rN  rO  rf  s       r"   rf  zSymNode.guard_or_true}  s)    G||~ !566WT]++r$   c                &    | j                  dd      S r(  )rW  rU   s    r"   bool_zSymNode.bool_  s    r1%%r$   c                     y)NTr   rU   s    r"   is_symboliczSymNode.is_symbolic      r$   c                     y r   r   rU   s    r"   
nested_intzSymNode.nested_int  rk  r$   c                     y)NFr   rU   s    r"   is_constantzSymNode.is_constant  s    r$   )NNF)r4   r   r5   zShapeEnv | Noner:   rC   r;   zHintType | objectrG   zint | float | bool | NonerH   r   rI   r)   r?   None)r5   r   r?   r   )rQ   r   r?   r)   )r?   r*   )r?   sympy.Basicr>   )r?   r)   )r?   
int | None)r?   zfloat | None)r?   zbool | None)r{   r*   r?   r   )r{   r+   r?   r   )r{   r)   r?   r   )r?   r   )r?   builtins.strr   )r   rr  r?   r   )rQ   r   r?   r   )r   r   r   r   r?   r   )r   list[SymNode]r   rt  r?   r   )r?  rt  r?   r   )F)rG  r)   r?   zbool | int | float)rN  rs  rO  r*   r?   r*   )rN  rs  rO  r*   r?   r+   )rN  rs  rO  r*   r?   r)   )r?   rp  )\__name__
__module____qualname____doc__r-   __annotations__rL   rN   rR   rV   propertyr4   r;   r`   rb   rh   rl   rn   rp   rr   ru   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"  r&  r+  r:  rH  r*  rS  rW  r]  r_  rb  rd  rf  rh  rj  rm  ro  r   r$   r"   r   r   Y   s    "'$& /3$)W4W4 #W4 	W4
  W4 ,W4 W4 "W4 
W4r


X  $  &"$#




$$    &+! *()##"!$$13D"D-:D	D
D"D-:D	D
A"A-:A	A
A"A-:A	A
L"L-:L	L ('()(%
"
-:
	
%%LNF
(4(-,&r$   r   c                        e Zd Zd 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.)r|  	TypeErrorsuper__new__)clsr?  	__class__s     r"   r  z_DynamicScalar.__new__  s+    . WXXws*T**r$   )r?  r   r?   r   )ru  rv  rw  r  __classcell__r  s   @r"   r|  r|    s    + +r$   r|  c                  T     e Zd ZdZd fdZd	dZ	 	 	 	 d
dZd
dZddZd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 )Nrw   )r8   r*   rD   rC   r  r  )r  valobjr  s      r"   r  zDynamicInt.__new__  s=    #s# #5d3i[!ABBgoc3s8,
r$   c                "    d| j                    dS )NzDynamicInt(r=   )realrU   s    r"   r   zDynamicInt.__repr__  s    TYYKq))r$   c                2    t        | j                  |z        S r   r   r  rP   s     r"   __floordiv__zDynamicInt.__floordiv__  s     $))u,--r$   c                2    t        || j                  z        S r   r  rP   s     r"   __rfloordiv__zDynamicInt.__rfloordiv__  s    %499,--r$   c                    |t        | j                  ||      }n| j                  |z  }t        |t              rt	        |      S |S r   r"  r  r8   r*   r   r<   rQ   modulor\   s       r"   __pow__zDynamicInt.__pow__  sD    E62FYY%F fc"f%%r$   c                    |t        || j                  |      }n|| j                  z  }t        |t              rt	        |      S |S r   r  r  s       r"   __rpow__zDynamicInt.__rpow__  sB    		62FDII%Ffc"f%%r$   )r  r*   r?   r   )r?   r   )rQ   r*   r?   r   r   )ru  rv  rw  rx  r  r   r  r  r  r  r  r  s   @r"   r   r     s6    	*..	.
.	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                     d fd}|S )Nc                ,     t        | d              S )N_sym_)getattr)r<   names    r"   fnz_get_sym_node_fn.<locals>.fn  s    ,wtuTF^,..r$   r<   r   r?   r   r   r  r  s   ` r"   _get_sym_node_fnr     s    / Ir$   )sqrtcoscoshsinsinhtantanhasinacosatanlog2sym_rD  >   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  )r4  br  s      r"   _sympy_float_truedivr  P      91r$   c                     ddl m}  || |      S )Nr   )
IntTrueDiv)r  r  )r4  r  r  s      r"   _sympy_int_truedivr  V  s    7ar$   c                     ddl m}  || |      S )Nr   )FloorDiv)r  r  )r4  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)r4  r  r  r  s       r"   
_sympy_modr  b  s.    ;A,,1ayAr$   c                     ddl m}  || |      S )Nr   )PowByNatural)r  r  )r4  r  r  s      r"   _sympy_pow_by_naturalr  k  r  r$   c                     ddl m}  || |      S )Nr   )FloatPow)r  r  )r4  r  r  s      r"   _sympy_float_powr  q  r  r$   c                0    dd l } |j                  | |      S rd   )re   Andr4  r  re   s      r"   
_sympy_andr  w  s    599Q?r$   c                0    dd l } |j                  | |      S rd   )re   Orr  s      r"   	_sympy_orr  }      588Aq>r$   c                     ddl m}  || |      S )Nr   )LShift)r  r  )r4  r  r  s      r"   _sympy_lshiftr        3!Q<r$   c                     ddl m}  || |      S )Nr   )RShift)r  r  )r4  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/   r$     N)lensympy.core.basicr  r  compareinsert)ordered_argsnew_argsort_keyr  lowhighmidcompare_results           r"   _binary_search_insert_argr    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} d
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)rD   r<  
_from_args)r  r\   re   s     r"   make_optimizedz&_optimized_add.<locals>.make_optimized  s:     !788
 %%l4%Hf~r$   )_is_symbols_binary_summationr/   r  )r  list[sympy.Basic]r?   tuple[bool, sympy.Basic])re   r  r  r  r  _argsr  listr  	is_symbolr<  )lhsrhslhs_is_optimized_summationrhs_is_optimized_summationsortkeyr  r  new_argsr4  r\   re   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!(++UYYsC F(0&99r$   c                     ddl m}  || |      S )Nr   )BitwiseFn_bitwise_and)r  r  )r4  r  r  s      r"   r  r        B A&&r$   c                     ddl m}  || |      S )Nr   )BitwiseFn_bitwise_or)r  r  )r4  r  r  s      r"   r  r     s    A1%%r$   c                     ddl m}  || |      S )Nr   )BitwiseFn_bitwise_xor)r  r  )r4  r  r  s      r"   r  r    r   r$   c                   dd l }t        | |j                        rg| j                  }t	        |      dk(  rMt        |d   |j
                        r4|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$  )re   r8   Mulr?  r  rf   r   ry   )r4  r  re   aacoefs        r"   _floor_ceil_helperr	     s    !UYYVVr7a<Jr!uekk:r!u?O?O 5==A'D!u}be|#1ekk"q!!a'u}}Qa5Lr$   c                    ddl m}  ||       S )Nr   )
FloorToInt)r  r  )r4  r  s     r"   _sympy_floorr  2      7a=r$   c                    ddl m}  ||       S )Nr   )
TruncToInt)r  r  )r4  r  s     r"   _sympy_truncr  :  r  r$   c                    ddl m}  ||       S )Nr   )	CeilToInt)r  r  )r4  r  s     r"   _sympy_ceilr  @  s    6Q<r$   c                0    dd l } |j                  | |      S rd   )re   Eqr  s      r"   	_sympy_eqr  F  r  r$   c                0    dd l } |j                  | |      S rd   )re   Ner  s      r"   	_sympy_ner  L  r  r$   c                0    dd l } |j                  | |      S rd   )re   Gtr  s      r"   	_sympy_gtr  R  r  r$   c                0    dd l } |j                  | |      S rd   )re   Ltr  s      r"   	_sympy_ltr  X  r  r$   c                0    dd l } |j                  | |      S rd   )re   Ler  s      r"   	_sympy_ler"  ^  r  r$   c                0    dd l } |j                  | |      S rd   )re   Ger  s      r"   	_sympy_ger%  d  r  r$   c                     ddl m}  || |      S )Nr   )Min)r  r'  )r4  r  r'  s      r"   
_sympy_minr(  j      0q!9r$   c                     ddl m}  || |      S )Nr   Max)r  r,  )r4  r  r,  s      r"   
_sympy_maxr-  p  r)  r$   c                8    dd l } |j                  || f|df      S )Nr   T)re   	Piecewise)r4  r!   fre   s       r"   
_sympy_iter1  v  s     5??Aq6At9--r$   c                     d fd}|S )Nc                r    dd l } t        |j                  j                  j                  d       |       S )Nr   OpaqueUnaryFn_)r  r  utils_sympy	functions)r4  r9  r  s     r"   r  z_get_sym_math_fn.<locals>.fn  s1    +Mwu{{))33~dV5LMaPPr$   r4  rq  r?   rq  r   r  s   ` r"   _get_sym_math_fnr9    s    Q
 Ir$   _sympy_c                .    dd l } |j                  |       S rd   )re   Abs)r4  re   s     r"   
_sympy_absr=    s    599Q<r$   c                8    ddl m}m} | ||       S  || |      S )Nr   )RoundDecimal
RoundToInt)r  r?  r@  )numberr   r?  r@  s       r"   _sympy_roundrB    s%     F&!!FG,,r$   c                    ddl m}  ||       S Nr   )ToFloat)r  rE  )r4  rE  s     r"   _sympy_sym_floatrF    s    4 1:r$   c                h    dd l }ddlm}  |j                   | |j                  |             |       S rD  )re   r  rE  r  r   )r4  re   rE  s      r"   _sympy_is_integerrH    s*    4588GKEKK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_contiguousrM    s.     e*C&ugtE#'2r<R7STTr$   c                   dd l }t        |       }t        |      |k7  r|j                  S |j                  }|j                  j
                  }|D ]N  }| |j                  | |   |j                  j
                         |j                  ||   |      z  z  }|| |   z  }P t        |      D ]/  }| |j                  | |   |j                  j                        z  }1 |S rd   )	re   r  rk   rj   SOner  rK  Zero)r   r   	dim_orderre   rL  r   zds           r"   rJ  rJ    s     
e*C
9~{{JJMA %(EGGKK88588GAJPQ;RRR	U1X 3Z :%(EGGLL99:r$   c                     t        | |g d      S N)r$     r  r   rJ  r   r   s     r"   $sympy_is_channels_last_contiguous_2drZ    s     'ug|DDr$   c                     t        | |g d      S N)r$     rW  r  r   rX  rY  s     r"   $sympy_is_channels_last_contiguous_3dr^    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 ]T  }| |j                  | |   d      ||   |k\  z  z  }|dk(  r| |j                  ||d         z  }||    || |   d      z  }V |S )Nr   r+  r$  )	re   r  r,  r  rk   rO  rQ  rj   r  )	r   r   rR  re   r,  rL  mrP  rT  s	            r"   &sympy_is_channels_last_strides_genericra    s     0
e*C
c)n{{A

A '!*a	  A *	XUXXeAh"gajAo66 6!WQZ((A AJU1Xq))'** Hr$   c                     t        | |g d      S rV  ra  rY  s     r"   !sympy_is_channels_last_strides_2drd  (  s     2%,OOr$   c                     t        | |g d      S r\  rc  rY  s     r"   !sympy_is_channels_last_strides_3drf  .  s     2%/RRr$   c                "    ddl m}  |g | | S )Nr   )!IsNonOverlappingAndDenseIndicator)r  rh  )r   r   rh  s      r"   -_sympy_is_non_overlapping_and_dense_indicatorri  4  s     O,>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   )r8   r9   rt   rC   r)   r   r*   r|   r+   r~   NotImplemented)r<   r{   s     r"   r%  r%  H  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 )
r8   r   rG   rn   r   rp   r   rr   r   rD   r  s    r"   r1  r1  W  sk    !W!**"8zzxxzay	
{	
qz8<==r$   c                    t         |    S r   )METHOD_TO_OPERATOR)methods    r"   r   r   e  s    f%%r$   c                     t        d             t        v r  d}n }dd}d fd}|d fd       }|d fd       } t        v rt        t        d| |       y  dk(  r$	 	 	 	 	 	 	 	 d fd}t        t        d| |       y  d	k(  rdd fd
}t        t        d| |       y t        t        d| |       y )N   rD  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>)r9  _dynamo
eval_framer5  fxexperimentalr   torch._dynamo.guardsinspectgetfileguardsuninteresting_files)r9  modsr`  s      r"   r{  z-_make_node_magic.<locals>.uninteresting_filesq  s     MM$$MMHH!!**	
 	$ *..AW__Q.mm""6689l	
.s   B!c                J     t        j                         d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 rd   )	re   rG   idr8   r4   ry   rf   rj   rk   )r   re   r\   s     r"   get_idzM_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.get_id  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 )NrW  )ro  r\   	result_id	argumentsargument_ids
user_stackstack)r   r  
structuredget_user_stackget_framework_stack)r4  ir  r  ro  r\   s     r"   r  zO_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>  sv    "("%f+%'Z6?%@c!f%@/8)*+F1I<QF1I) '1&?&?&B!+!?!?!B
)  &A)s   A8
A=
A=)metadata_fn)r   r   r?   rr  )r9  _logging	_internalGET_DTRACE_STRUCTUREDr   )r<   rQ   r  r  r\   r  ro  s     @@@r"   wrapperz=_make_node_magic.<locals>.capture_provenance.<locals>.wrapper  sc    }DD%~~''==$!%uI!%I( "(
! Mr$   r   )r<   r   rQ   zSymNode | Noner?   r   )	functoolswraps)r  r  ro  s   ` r"   capture_provenancez,_make_node_magic.<locals>.capture_provenance  s&    		(	 
(	T r$   c           
        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                  }	|	t        d      | 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                  t]        d      | 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  zshape_env is required for modr   )r   r   r   r   r   r   )symbol_is_typeSymT)rH  failed to eval %s(%s, %s)z%s %s %s -> %sz#shape_env is required for binary op)rH   rI   )1r8  r.  r/  r   r   r;   r%  r1  r8   r   rD   rC   r  r  r  r5   r4   r  bound_sympylowerr  r-   re   torch.utils._sympy.symbolr  r  r  UNBACKED_INTrX   r  r  r$  r  r!  r  rJ  rK  rL  sym_node_logdebugalways_float_magic_methodsr+   always_bool_magic_methodsr)   r:   r9   r6   r>  rH   )r<   rQ   r.  r/  oprC  rI   r  r  r5   rA  re   r  r  lhs_is_unbackedrhs_is_unbacked	rel_classr:   rH   rD  r\   funcro  s                        r"   binary_magic_implz+_make_node_magic.<locals>.binary_magic_impl  s   	

  '#99 UZZ%;$))UZZ0H)"y	%@P.QSUV  %) #9$u+!GHH#?	G !NN	$()HII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 >>!DEE^^<<u}}-

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

S	s   )I.P& &7Qc           	        ddl m}m} t              } |       rt	        |  ||t        |       fi             S | j                  }| j                  t        d      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                  j1                  || j2                  f      \  }}	t5        || j                  |||      S # t        $ r t        j                  d|        w xY w)	Nr   r-  z"shape_env is required for unary opr   ceilingzfailed to eval %s(%s)z%s %s -> %sr7  )r8  r.  r/  r   r%  r1  r4   r5   r6   _simplify_floor_divrJ  rK  rL  r  r  r   r;   always_int_magic_methodsr*   r  r)   r  r+   r:   r>  rH   r   )r<   r.  r/  r  r4   rA  rC  r:   rH   rD  r  ro  s             r"   unary_magic_implz*_make_node_magic.<locals>.unary_magic_impl0  sI   	

  '4!4R)D/9KR!PQQyy>>!CDD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   E "E&r
   c                   ddl m}m} | j                  d }n%| j                  r|j                  }n|j                  } |       r6t	        |  |t
        t        |       t        |      t        |      fi             S 	  	| j                  |j                  |j                        }| j                  t        d      | 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)z!shape_env is required for sym_iter7  )r8  r.  r/  r;   r%  r
   r1  r4   rJ  rK  rL  r5   r6   r>  rH   r   r:   )	pred_node	then_node	else_noder.  r/  rC  rA  rH   rD  r  ro  s            r"   sym_ite_implz&_make_node_magic.<locals>.sym_ite_impl[  sI   
 ~~%$>>$>>'%i0%i0%i0
  
9>>9>>9>>J ""*"#FGG",,EE)++Y->->	@Q@QRJGQ Y(()*:*:Hg   3NNNNNN s   <(D# #AE%r   c           	     V   ddl m}m} t        j                  } |       rt        |  ||t        |       |fi             S | j                  }	  ||      }|t        }n| j                  }d }| j                   || j                  |      }| j                  g}	||	j                  |       | j                   t#        d      | 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)zshape_env is required for roundr7  )r8  r.  r/  builtinsr   r%  r1  r4   rJ  rK  rL  r*   r:   r;   rH   r   r5   r6   r>  r;  r   )r<   r   r.  r/  r  r4   rA  r:   rC  r?  rH   rD  r  ro  s               r"   
round_implz$_make_node_magic.<locals>.round_impl  s"   
 B-b9T?G2LbQ  99D4)
 Hyy$IIw LL>D"G$~~%"#DEE@@U4[QJGQ3'RR9  ?wWs   	D #D()r?   zset[str])r  Callable[..., SymNode]r?   r  )r<   r   rQ   r   r?   r   r  )r  r   r  r   r  r   r?   r   r   )r<   r   r   rr  r?   r   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )	ro  r  method_attrr{  r  r  r  r  r  s	   ``       r"   _make_node_magicr  i  s    9S>$DCCl
",\ } }~ $O $OL 1[M*,<=	9	/	/	+2/	?F/	/	b 	1[M*L9	7	+	SZ 	1[M*J71[M*,=>r$   c                     	 	 	 	 	 	 	 	 d fd}t        t        d  |       	 	 	 	 	 	 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)r8  r.  r/  r  sysmodulesru  r%  r1  r4   rJ  rK  rL  r;   r   endswithr*   r)   r   r5   )r<   r   r   r.  r/  r  s
size_exprsstride_exprsrA  rB  rC  stride_hintsr:   r  ro  s                 r"   sizes_strides_implz4_make_node_sizes_strides.<locals>.sizes_strides_impl  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rD  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  )re   r3   r  	itertoolschainr8   r   r1  r  rt   r%  r)   sympify)r   r   re   r  r4  r  r  ro  s         r"   sizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_user  s     		
 0 	A!V$ +GAFFF+5:;+;5<=+= 	 ==4  /45!]U]]1%5/67!]U]]1%7  <= 67s   C?8D<D	D)r<   r   r   rt  r   rt  r?   r   )r   list[object]r   r  r?   0SymInt | SymFloat | SymBool | int | float | bool)r  r   hasattrr  r  ru  )ro  r  r  r  s   ``  r"   _make_node_sizes_stridesr    s    0>0>+0>6C0>	0>d Gq\#56
&2	9@ 3;;x(&1H%v/AB 2r$   c                .   
  t         v rd  n 	 	 	 	 dd
dd t        v rddnddd fdd
 fd}d
 fd}d
 fd	}dd
} t        v r ||d  d|       y  t        v r!t	        |       } || t        ||             y  dk(  r	 	 	 	 	 	 	 	 d
fd} ||d  d|       y  dk(  rd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)
r8   r*   r+   r)   r   rt   r*  r   rW  rD   r  s    r"   get_constantz&_make_user_magic.<locals>.get_constant.  sh     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)	r8   r*   r+   r)   r   r   r   rt   ro  r  s    r"   ro  z%_make_user_magic.<locals>.is_constant9  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)r8   r   r   rt   r|   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>.promoted  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   )r8   r+   r9  r   r	   )r<   rQ   f_selff_otherro  s       r"   promote2z"_make_user_magic.<locals>.promote2g  sy      
 
$ ;D5%.."9:UUENN$;<Wt,.U{r$   c                     |       }  |       r t               |             S t         t        | j                                     S r   )r   r1  r  rt   )r<   r  ro  ro  r  r  s    r"   r  z*_make_user_magic.<locals>.unary_magic_impl  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)r8   r*   r+   r)   r   r   r   rk  r  r  r   r%  rt   r1  r  
r<   rQ   
other_noderetr  ro  ro  r  r  r  s
       r"   r  z+_make_user_magic.<locals>.binary_magic_impl  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   )r8   r*   r+   r)   r   r   r   rk  r   r%  rt   r1  r  r  s
       r"   rbinary_magic_implz,_make_user_magic.<locals>.rbinary_magic_impl  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        | |       d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   )r8   r   r  r  r*   r)   )r?  r  rA  attrs      r"   dynamic_int_implz<_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impl  sk    DH?@*Q
3:D  %'#t$d+C#s#JsD,A!#&Js   %A-N)r?  r   r?   r   )r  r   r   )	user_typer  symnode_implr  s    `  r"   setattrsz"_make_user_magic.<locals>.setattrs  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)
rt   r%  rk  r8   r   r:   rD   r1  r  ro  )	predr   r   r  r  r  r  r  r  s	          r"   sym_ite_magic_implz,_make_user_magic.<locals>.sym_ite_magic_impl  s     		I	84I	84IN*i>.I%%9g.y'2$$	(8(88$O  ;GDII{;IyQRC 88'') S! 	r$   r   c                     |       rt        j                   |       |      S t         t        | j                        |            S r   )r  r   r1  r  rt   )r<   r   r  ro  ro  s     r"   round_magic_implz*_make_user_magic.<locals>.round_magic_impl  s?    4 ~~l4&8'BB7WTYY7@AAr$   __r)r  0SymInt | int | SymFloat | float | SymBool | boolr?   zint | float | bool)r  r  r?   r)   )r  r   r?   r   )r<   r   rQ   r   r?   ztuple[Any, Any])r<   r   r?   r   )r<   r   rQ   r   r?   r   )r  rC   r  r   r  r   r?   rp  )r  r   r   r   r   r   r?   r   r   )r<   r   r   rr  r?   r   )r  bool_becomes_int_magic_methodsunary_magic_methodsunary_nonmagic_methodsr  r   bitwise_opsreflectable_magic_methods)ro  r  r  r  r  r  origr  r  method_namer  ro  r  r  r  s   `         @@@@@r"   _make_user_magicr  &  s    CCVHo	K;	K		KB //		!T< <> >"> > 8, $$bO-=>	)	)y&)FN3CT$JK	9			%+	7=		0 	bO-?@	7		B 	B 	bO-=>[ %f-KbR02CD..Y#k]" 57IJ /r$   )r!   z
type[bool]r?   ztype[SymBool])r!   z	type[int]r?   ztype[SymInt])r!   ztype[float]r?   ztype[SymFloat])r!   rC   r?   rC   )r  r   r?   zCallable[[SymNode], SymNode])r4  rq  r  rq  r?   rq  )r  r  r  rq  r?   zlist[sympy.Basic] | None)FF)
r  rq  r  rq  r  r)   r  r)   r?   r  )r4  rq  r  Callable[..., sympy.Basic]r?   rq  r8  )r4  rq  r!   rq  r0  rq  r?   rq  )r  r   r?   z$Callable[[sympy.Basic], sympy.Basic]r   )rA  rq  r   zsympy.Basic | Noner?   rq  )r   r  r   r  r?   rq  )r   r  r   r  rR  z	list[int]r?   rq  )r<   r   r{   r   r?   r   )r  r   r?   r  )ro  r   r?   zCallable[..., object])ro  r   r  r  r?   rp  )ro  r   r  rC   r?   rp  )
__future__r   r  r  rx  r  loggingmathoperatorr  r   r   typingr   r   r   r9  torch._logging.structuredr  r  r	   r
   r   r   r   r   r   r   torch._loggingr   collections.abcr   r   re   r3   r   	getLoggerru  rK  getArtifactLoggerr  r   r   ry  r)   r+   r*   HintType__all__torch.typesr   r9   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  rn  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-  r1  r  current_moduler9  priv_sympy_namer  rw  r=  rB  rF  rH  invertr   rM  rJ  rZ  r^  ra  rd  rf  ri  sizes_strides_methodsr%  r1  r   r  r  itemsro  r  r  r   r$   r"   <module>r     s	   "        
 / / /  . .	 	 	 - (>g!~~//*E
 8& %<#$ K 1 
 4 
 4	 2 
 2	 6 
 6	 % 
 %u up+ +0 0h$	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  "!#!.9!!N (-',	D:	D:	D: !%D: !%	D:
 D:N'&'	8<<	8<< 
8<< 
:	
 + ! 
: < 	) + < ) % O m  m! ($. X&  1Dv&O	$	B$33BObkNOR0	1 o 8<--"4--0x 
8<< 	)	
 	) 	) 	) 	) 	) \ \ ! K 
8<< z  z!" z#$ 
:%& #)0  HDdV}H%nv6FGM(H 	(M>UU'8UU'8EN4EE'8EEHH'8HH'''8'EN''TPP'8PPSS'8SS??'8?? )&J&J#D#D.[	 >&U?p
[C| "'') #LFDVT"# *//1 +LFDVT*+WKt  +F(()))*((F6T,T)VV$[ *+ r$   