
    /j@                    	   U d dl mZ 	 d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dlm
Z
mZ d dlmZmZmZ d dlZd dlmc mZ d dlmZmZmZmZmZmZmZmZ d dlmZ erd dlmZ  ej         e!          Z"ej        #                    e!d          Z$ e%            Z&d	e'd
<   e(e)z  e*z  dz  Z+g dZ,d dl-m.Z/ d Z0 G d d          Z1 G d d          Z2 G d de2e*          Z3i dej4        dej5        dej6        dej7        dej7        dej8        dej9        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jA        d%ejB        i d&ejC        d'ejD        d(ejE        d)ejF        d*ejF        d+ejG        d,ejH        d-ejH        d.ejI        d/ejJ        d0ejK        d1ed2ed3ed4ed5ed6ejL        d7ejL        iZMh d8ZNd9 ZOd:ZPePD ][ZQd;eQ ZRd<eR ZS eTe1eR eOeQ                      eUeeS          eMeR<   eN6                    eR           e,V                    eR           \d hZWeNeWz  ZXh d=ZYh d>ZZdhZ[eYe[z  Z\h d?Z]dd)hZ^dd)d@dAZ_h dBZ`ePD ]ZQd;eQ ZRe`6                    eR           h dCZah dDZbdE ZcdF ZddG ZedH ZfdI ZgdJ ZhdK ZidL ZjdM ZkdN ZldO Zm	 dxdQZndR ZodS ZpdT Zqi dej6        d0ejK        d&ejC        d%efd-egd,ehdeideod)ejd*epd+eqd6ecd7eddeed#ekd/elZrdU ZsdV ZtdW ZudX ZvdY ZwdZ Zxd[ Zyd\ Zzd] Z{d^ Z|d_ Z}d` Z~da Ze	j        e!         Zdb ZePD ]-ZQdceQ Z eeQ          Zexe_        e_!         eTeee           .[[Q[dd ZdydeZdf Zdg Zi eri d5ej        dej4        dewd'exdeyd$ezd"e{de|detdeud1edevd(ejE        d4e}d3e~d2edeeedhZePD ]ZQd;eQ ZR eUedceQ           eeR<   [Q[R[P[di Zdj Zdk Zdl Zdm Zdn Zdo Zdp ZeeeeeedqZdr Zds Zdt Zdu Zdv Ze                                D ]\  ZZ eee           e                                D ]\  ZZ eee           dw ZeD ]TZeeYv r eee           ee]v r eee           $ee[v seeZv r eee            eee           ee_vr eee           U[[dS )z    )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                f    | t           u rt          S | t          u rt          S | t          u rt
          S | S N)boolr   intr   floatr   )ts    c/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/fx/experimental/sym_node.py_to_symtyper"   A   s1    DyyCxxEzzH    c                     e Zd ZU dZdZded<   	 	 	 dddedZdfdZdgdZdhdZ	e
d             Ze
d             Zd ZdidZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Zdjd$Zdkd%Zdkd&Zdidkd'Z dkd(Z!dkd)Z"dkd*Z#dkd+Z$dkd,Z%dkd-Z&dkd.Z'dkd/Z(dkd0Z)dkd1Z*dkd2Z+dkd3Z,dkd4Z-dkd5Z.dkd6Z/dkd7Z0dkd8Z1dkd9Z2dkd:Z3dkd;Z4dkd<Z5dkd=Z6dkd>Z7dkd?Z8dkd@Z9dkdAZ:dkdBZ;dkdCZ<dkdDZ=dkdEZ>dkdFZ?dkdGZ@dkdHZAdkdIZBdkdJZCdkdKZDdL ZEdM ZFdN ZGdO ZHdP ZIdQ ZJdkdRZKdS ZLdT ZMdU ZNdkdVZOdldWZPdX ZQdY ZRdZ ZSd[ ZTd\ ZUd] ZVd^ ZWd_ ZXd` ZYda ZZdb Z[dc Z\dS )mr   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_summationNhint!Optional[Union[int, float, bool]]c                    | _         | _        | _        | _         fd}|t          u rd }n|t          |          |u s@t          |          t          |          u s"t          d| dt          |                      j        r9 j        j        r- |            }	||	k    rt          | d|	 d j	         d          n
 |            }| _
        | _         j        o j        j        }
|
o| _        d S )Nc                     ddl m}   | j                  rd S j                            j        d          }|,t          |t                    s                    |          n|}|S )Nr   )has_free_unbacked_symbolsT)compute_hint)%torch.fx.experimental.symbolic_shapesr*   expr	shape_env_maybe_evaluate_static
isinstanceSymTypespytype)r*   r&   selfs     r!   r+   z&SymNode.__init__.<locals>.compute_hint   s    WWWWWW )(33 t>88QU8VVD0:40J0JTt{{4(((PTKr#   zCannot create SymNode of type z  with incompatible hint of type z != z (for ))_exprr.   r2   r%   r   typer"   AssertionError_translation_validation_enabledr-   _hintconstantfx_node)r3   r-   r.   r2   r&   r:   r;   optimized_summationr+   computed_hinttx_validation_ens   `          r!   __init__zSymNode.__init__]   sW    
"$7!:	 	 	 	 	 8DDJJ&((DJJ+f:M:M,M,M$LL L?CDzzL L   ~ Y$."P Y !-=(((D)W)Wm)W)W49)W)W)WXXX<>>D
;C NMt~M 	 (3Gr#   r.   r   returnc                \    t          | j        || j        | j        | j        | j                  S r   )r   r5   r2   r9   r:   r;   )r3   r.   s     r!   with_shape_envzSymNode.with_shape_env   s+    J	4;
DM4<
 
 	
r#   otherc                    | j         |j         k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )r5   r2   r9   r:   r;   r3   rC   s     r!   	_value_eqzSymNode._value_eq   s]     J%+% .u|+.
ek). /. -	
r#   r   c                \    t          | j        | j        | j        | j        | j        f          S r   )hashr5   r2   r9   r:   r;   r3   s    r!   _value_hashzSymNode._value_hash   s%    TZdj$-VWWWr#   c                @    | j                             | j                  S r   )r.   replacer5   rI   s    r!   r-   zSymNode.expr   s    ~%%dj111r#   c                    | j         S r   r9   rI   s    r!   r&   zSymNode.hint   s
    zr#   c                    | j         d uS r   rN   rI   s    r!   has_hintzSymNode.has_hint   s    z%%r#   c                    ddl m}  j        rQ | j                   fd j        j        D             }t           j                            |                    S  j                             j                  S  j        S )Nr   free_unbacked_symbolsc                B    i | ]}||v rnj         j        |         S  )r.   backed_var_to_val).0sfallbackr3   unbacked_symbolss     r!   
<dictcomp>z(SymNode.require_hint.<locals>.<dictcomp>   sK            ,,,  x9!<     r#   )	r,   rS   r9   r-   free_symbolsr   xreplacer.   	size_hint)r3   rY   rS   replacementsrZ   s   ``  @r!   require_hintzSymNode.require_hint   s    OOOOOO:# $9#8#C#C             "Y3	      49--l;;<<<>++DI666zr#   c                F    | j         j        rt          | j                   S d S r   )r-   	is_numberr   rI   s    r!   maybe_as_intzSymNode.maybe_as_int   s"    9 	ty>>!4r#   c                j    dd l }t          | j        |j                  rt	          | j                  S d S Nr   )sympyr0   r-   Floatr   r3   rf   s     r!   maybe_as_floatzSymNode.maybe_as_float   s6    di-- 	###4r#   c                N    dd l }| j        |j        u rdS | j        |j        u rdS d S )Nr   TF)rf   r-   truefalserh   s     r!   maybe_as_boolzSymNode.maybe_as_bool   s8    9
""4Y%+%%54r#   c                    | j         t          u S r   )r2   r   rI   s    r!   is_intzSymNode.is_int  s    {c!!r#   c                    | j         t          u S r   )r2   r   rI   s    r!   is_floatzSymNode.is_float  s    {e##r#   c                    | j         t          u S r   )r2   r   rI   s    r!   is_boolzSymNode.is_bool	  s    {d""r#   c                    | j         d uo7t          | j         t                    o| j         j                                        S r   )r9   r0   r   nodeis_nested_intrI   s    r!   rv   zSymNode.is_nested_int  s?     Jd" 04:v..0
--//	
r#   c                    t          |          t          urt          dt          |                     dd l}t	          |                    |          | j        t          |||          S )NExpected int, got r   r:   r;   )r6   r   r7   rf   r   Integerr.   r3   numrf   s      r!   wrap_intzSymNode.wrap_int  sl    99C !Ad3ii!A!ABBBMM#S3PS
 
 
 	
r#   c                    t          |          t          urt          dt          |                     dd l}t	          |                    |          | j        t          |||          S )NzExpected float, got r   ry   )r6   r   r7   rf   r   rg   r.   r{   s      r!   
wrap_floatzSymNode.wrap_float  sl    99E!! !CS		!C!CDDDKKdneS3PS
 
 
 	
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   ry   )r6   r   r7   rf   r   rk   rl   r.   r{   s      r!   	wrap_boolzSymNode.wrap_bool&  sq    99D   !BtCyy!B!BCCC.EJJ5;N
 
 
 	
r#   c                    | S r   rU   rI   s    r!   clonezSymNode.clone4  s    r#   c                    | j          S r   r-   rI   s    r!   strzSymNode.str7  s    )~r#   c                *    |                                  S r   r   rI   s    r!   __str__zSymNode.__str__:  s    xxzzr#   c                @   d| j          d| j         d| j         g}| j        |                    d| j                    | j        |                    d| j                    | j        |                    d| j                    d                    |          dz   S )	NzSymNode(z, shape_env=z	, pytype=zhint=z	constant=zfx_node=z, r4   )r5   r.   r2   r9   appendr:   r;   join)r3   reps     r!   __repr__zSymNode.__repr__=  s    UtzUUt~UUUU
 :!JJ+tz++,,,=$JJ24=22333<#JJ0$,00111yy~~##r#   builtins.strc                *    |                                  S r   r   rI   s    r!   _graph_reprzSymNode._graph_reprI  s    xxzzr#   c                *    |                                  S r   )_absrI   s    r!   abszSymNode.absO      yy{{r#   c                *    |                                  S r   )_posrI   s    r!   poszSymNode.posR  r   r#   c                ,    |                      |          S r   )_round)r3   ndigitss     r!   roundzSymNode.roundU  s    {{7###r#   c                *    |                                  S r   )_truncrI   s    r!   trunczSymNode.truncX      {{}}r#   c                ,    |                      |          S r   )_addrE   s     r!   addzSymNode.add[      yyr#   c                ,    |                      |          S r   )_subrE   s     r!   subzSymNode.sub^  r   r#   c                ,    |                      |          S r   )_mulrE   s     r!   mulzSymNode.mula  r   r#   c                ,    |                      |          S r   )_modrE   s     r!   modzSymNode.modd  r   r#   c                ,    |                      |          S r   )
_float_powrE   s     r!   	float_powzSymNode.float_powg  s    u%%%r#   c                ,    |                      |          S r   )_pow_by_naturalrE   s     r!   pow_by_naturalzSymNode.pow_by_naturalj  s    ##E***r#   c                ,    |                      |          S r   )_and_rE   s     r!   and_zSymNode.and_m  s    zz%   r#   c                ,    |                      |          S r   )_or_rE   s     r!   or_zSymNode.or_p  r   r#   c                ,    |                      |          S r   )_float_truedivrE   s     r!   float_truedivzSymNode.float_truedivs  s    ""5)))r#   c                ,    |                      |          S r   )_int_truedivrE   s     r!   int_truedivzSymNode.int_truedivv        '''r#   c                ,    |                      |          S r   )_int_floordivrE   s     r!   int_floordivzSymNode.int_floordivy      !!%(((r#   c                ,    |                      |          S r   )_lshiftrE   s     r!   lshiftzSymNode.lshift|      ||E"""r#   c                ,    |                      |          S r   )_rshiftrE   s     r!   rshiftzSymNode.rshift  r   r#   c                *    |                                  S r   )_sym_notrI   s    r!   r   zSymNode.sym_not      }}r#   c                ,    |                      |          S r   )_eqrE   s     r!   eqz
SymNode.eq      xxr#   c                ,    |                      |          S r   )_nerE   s     r!   nez
SymNode.ne  r   r#   c                ,    |                      |          S r   )_gtrE   s     r!   gtz
SymNode.gt  r   r#   c                ,    |                      |          S r   )_ltrE   s     r!   ltz
SymNode.lt  r   r#   c                ,    |                      |          S r   )_lerE   s     r!   lez
SymNode.le  r   r#   c                ,    |                      |          S r   )_gerE   s     r!   gez
SymNode.ge  r   r#   c                *    |                                  S r   )_floorrI   s    r!   floorzSymNode.floor  r   r#   c                *    |                                  S r   )_is_integerrI   s    r!   
is_integerzSymNode.is_integer  s    !!!r#   c                *    |                                  S r   )
_sym_floatrI   s    r!   r	   zSymNode.sym_float  s       r#   c                *    |                                  S r   )_sym_intrI   s    r!   sym_intzSymNode.sym_int  r   r#   c                *    |                                  S r   )_ceilrI   s    r!   ceilzSymNode.ceil  s    zz||r#   c                *    |                                  S r   )_negrI   s    r!   negzSymNode.neg  r   r#   c                ,    |                      |          S r   )_sym_minrE   s     r!   r   zSymNode.sym_min      }}U###r#   c                ,    |                      |          S r   )_sym_maxrE   s     r!   r   zSymNode.sym_max  r   r#   c                .    |                      ||          S r   )_sym_ite)r3   then_valelse_vals      r!   r
   zSymNode.sym_ite  s    }}Xx000r#   c                .    |                      ||          S r   )_is_contiguousr3   sizesstridess      r!   is_contiguouszSymNode.is_contiguous  s    ""5'222r#   c                .    |                      ||          S r   )_is_channels_last_contiguous_2dr   s      r!   is_channels_last_contiguous_2dz&SymNode.is_channels_last_contiguous_2d      33E7CCCr#   c                .    |                      ||          S r   )_is_channels_last_contiguous_3dr   s      r!   is_channels_last_contiguous_3dz&SymNode.is_channels_last_contiguous_3d  r  r#   c                .    |                      ||          S r   )_is_channels_last_strides_2dr   s      r!   is_channels_last_strides_2dz#SymNode.is_channels_last_strides_2d      00@@@r#   c                .    |                      ||          S r   )_is_channels_last_strides_3dr   s      r!   is_channels_last_strides_3dz#SymNode.is_channels_last_strides_3d  r  r#   c                .    |                      ||          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KKr#   c                ,    |                      |          S r   )r   rE   s     r!   sym_orzSymNode.sym_or  r   r#   c                ,    |                      |          S r   )r   rE   s     r!   sym_andzSymNode.sym_and  r   r#   c                ,    |                      |          S r   )_bitwise_andrE   s     r!   bitwise_andzSymNode.bitwise_and  r   r#   c                ,    |                      |          S r   )_bitwise_orrE   s     r!   
bitwise_orzSymNode.bitwise_or  s    &&&r#   c                ,    |                      |          S r   )_bitwise_xorrE   s     r!   bitwise_xorzSymNode.bitwise_xor  r   r#   c                ,    |                      |          S r   )r   rE   s     r!   truedivzSymNode.truediv  r   r#   c                ,    |                      |          S r   )r   rE   s     r!   floordivzSymNode.floordiv  r   r#   c                ,    |                      |          S r   )r   rE   s     r!   powzSymNode.pow  s    ~~e$$$r#   c                p    |                      ||                              t          | d                    S )N   )r  r   to_noder   s      r!   is_non_overlapping_and_densez$SymNode.is_non_overlapping_and_dense  s7    ::5'JJMMD!
 
 	
r#   c                .    |                      dd          S N r   )	guard_intrI   s    r!   int_zSymNode.int_  s    ~~b!$$$r#   c           
        dd l }ddlm}m}  |            r=t	          |  |t
          j        t          d |D                       fi                     S d |D             } |j        | }g }d }|D ]%}	|	j	         n*|
                    |	j	                   &t          |          }| j                            t
          j        t          d |D                       f          \  }
}t          || j        t          ||
          S )Nr   get_proxy_modehandle_sym_dispatchc              3  4   K   | ]}t          |          V  d S r   	wrap_noderW   as     r!   	<genexpr>z"SymNode.sym_sum.<locals>.<genexpr>  s(      66A9Q<<666666r#   c                    g | ]	}|j         
S rU   r   r6  s     r!   
<listcomp>z#SymNode.sym_sum.<locals>.<listcomp>  s    &&&A&&&r#   c              3  $   K   | ]}|j         V  d S r   r;   r6  s     r!   r8  z"SymNode.sym_sum.<locals>.<genexpr>  s$      !:!:!)!:!:!:!:!:!:r#   r<  )rf   "torch.fx.experimental.proxy_tensorr1  r2  r(  torchsym_sumtupleAddr&   r   sumr.   _create_fx_call_functionr   r   )r3   argsrf   r1  r2  exprsout
size_hintsout_hintr7  r;   _s               r!   r?  zSymNode.sym_sum  sT   	
 	
 	
 	
 	
 	
 	
 	

 > 	##M66666668    '&&&&ei
 	' 	'Av~af%%%%:H^<<ME!:!:T!:!:!:::<
 


 sDNC7KKKKr#   c                8    | j                             | |          S r   )r.   evaluate_sym_node)r3   size_obliviouss     r!   evaluatezSymNode.evaluate  s    ~//nEEEr#   c                    |                                  }	 t          |          S # t          $ r t                              d|            w xY w)NzFailed to convert to int: %s)rM  r   	Exceptionlogwarningr3   fileliners       r!   r-  zSymNode.guard_int  sT     MMOO	q66M 	 	 	KK6:::		   % 'Ac                    |                                  }	 t          |          S # t          $ r t                              d|            w xY w)NzFailed to convert to float: %s)rM  r   rO  rP  rQ  rR  s       r!   guard_floatzSymNode.guard_float  sT     MMOO	88O 	 	 	KK8!<<<	rV  c                    |                                  }	 t          |          S # t          $ r t                              d|            w xY w)NFailed to convert to bool: %srM  r   rO  rP  rQ  rR  s       r!   
guard_boolzSymNode.guard_bool)  sT     MMOO	77N 	 	 	KK7;;;	rV  c                    ddl m} |                                 r2 || j                  s"| j        j        s|                     ||          S | j                            | j        | d| | j                  S )Nr   rR   :r<  )	r,   rS   rP   r-   r.   +prefer_deferred_runtime_asserts_over_guardsr\  guard_or_defer_runtime_assertr;   )r3   rS  rT  rS   s       r!   expect_truezSymNode.expect_true3  s    OOOOOO MMOO	/))$)44	/ NN	/ ??4...
 ~;;I$'''' < 
 
 	
r#   c                    ddl m} |                                 st          d           |t	          |                     S )Nr   )statically_known_trueExpected bool type)r,   rc  rs   r7   r   )r3   rS  rT  rc  s       r!   rc  zSymNode.statically_known_trueE  sJ    OOOOOO||~~ 	7 !5666$$WT]]333r#   c                    |                      d          }	 t          |          S # t          $ r t                              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)rL  rZ  r[  rR  s       r!   guard_size_obliviouszSymNode.guard_size_obliviousL  sZ     MMM..	77N 	 	 	KK7;;;	s	   ' 'Ac                    ddl m} |                                 st          d           |t	          |                     S )Nr   )guard_or_falserd  )r,   rh  rs   r7   r   )r3   rS  rT  rh  s       r!   rh  zSymNode.guard_or_false`  sI    HHHHHH||~~ 	7 !5666~gdmm,,,r#   c                    ddl m} |                                 st          d           |t	          |                     S )Nr   )guard_or_truerd  )r,   rj  rs   r7   r   )r3   rS  rT  rj  s       r!   rj  zSymNode.guard_or_trueg  sI    GGGGGG||~~ 	7 !5666}WT]]+++r#   c                .    |                      dd          S r+  )r\  rI   s    r!   bool_zSymNode.bool_n  s    r1%%%r#   c                    dS )NTrU   rI   s    r!   is_symboliczSymNode.is_symbolicq      tr#   c                    d S r   rU   rI   s    r!   
nested_intzSymNode.nested_intt  ro  r#   c                    dS )NFrU   rI   s    r!   is_constantzSymNode.is_constantw  s    ur#   )NNF)r&   r'   )r.   r   r@   r   )rC   r   r@   r   )r@   r   r   )r@   r   )r@   r   )F)]__name__
__module____qualname____doc__r%   __annotations__r?   rB   rF   rJ   propertyr-   r&   rP   r`   rc   ri   rm   ro   rq   rs   rv   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?  rM  r-  rX  r\  ra  rc  rf  rh  rj  rl  rn  rq  rs  rU   r#   r!   r   r   N   s          "'&&&& !S4 S4 S4 S4 S4j
 
 
 

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

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

    Example usage::

        fn = torch.compile(f)
        x = DynamicInt(4)
        fn(x)  # compiles x as a dynamic integer input; returns f(4)
    c                    t          |t                    st          dt          |                     t	                                          | t          |                    }|S )Nrx   )r0   r   r7   r6   r~  r  )r  valobjr  s      r!   r  zDynamicInt.__new__  sU    #s## 	C !Ad3ii!A!ABBBggooc3s88,,
r#   c                    d| j          dS )NzDynamicInt(r4   )realrI   s    r!   r   zDynamicInt.__repr__  s    )TY))))r#   c                0    t          | j        |z            S r   r   r  rE   s     r!   __floordiv__zDynamicInt.__floordiv__  s    $)u,---r#   c                0    t          || j        z            S r   r  rE   s     r!   __rfloordiv__zDynamicInt.__rfloordiv__  s    %49,---r#   )	rt  ru  rv  rw  r  r   r  r  r  r  s   @r!   r   r     so        	 	    * * *. . .. . . . . . .r#   r   r   r   r   andr  r   r   r   r   r   r   r   r   c                *    |                                  S r   )r   xs    r!   <lambda>r    s    ALLNN r#   r   r   r   r   r   r   r   orr  r  r   r   r   r   r   r	   r
   r   r   r   r   r   >	   r   r   r   r   r   r   r   r   r	   c                      fd}|S )Nc                :     t          | d                       S )N_sym_)getattr)r3   names    r!   fnz_get_sym_node_fn.<locals>.fn  s!    ,wt^T^^,,...r#   rU   r  r  s   ` r!   _get_sym_node_fnr    s#    / / / / / Ir#   )sqrtcoscoshsinsinhtantanhasinacosatanlog2sym_rI  >   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  )r7  br  s      r!   _sympy_float_truedivr  "  &    999999<1r#   c                &    ddl m}  || |          S )Nr   )
IntTrueDiv)r  r  )r7  r  r  s      r!   _sympy_int_truedivr  (  s&    777777:ar#   c                &    ddl m}  || |          S )Nr   )FloorDiv)r  r  )r7  r  r  s      r!   _sympy_floordivr  .  $    5555558Aq>>r#   c                ^    ddl m}m} | j        r|j        r || |          S  || |          S )Nr   Mod	PythonMod)r  r  r  is_nonnegative)r7  r  r  r  s       r!   
_sympy_modr  4  sO    ;;;;;;;; A, s1ayyyAr#   c                &    ddl m}  || |          S )Nr   )PowByNatural)r  r  )r7  r  r  s      r!   _sympy_pow_by_naturalr  =  r  r#   c                &    ddl m}  || |          S )Nr   )FloatPow)r  r  )r7  r  r  s      r!   _sympy_float_powr  C  r  r#   c                6    dd l }|                    | |          S re   )rf   Andr7  r  rf   s      r!   
_sympy_andr  I  s    LLL99Q??r#   c                6    dd l }|                    | |          S re   )rf   Orr  s      r!   	_sympy_orr  O      LLL88Aq>>r#   c                &    ddl m}  || |          S )Nr   )LShift)r  r  )r7  r  r  s      r!   _sympy_lshiftr  U  $    3333336!Q<<r#   c                &    ddl m}  || |          S )Nr   )RShift)r  r  )r7  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                    ||          k    r|g| z   S dt          |           dz
  }}||k    rC||z   dz  }|                    | |         |          }|dk    rdS |dk     r|dz   }n|dz
  }||k    C|                     ||           | S )zs
    If new_arg is found in ordered_args None is returned, else the new
    ordered_args with new_arg inserted
    r   )_args_sortkeyBasicr'     N)lensympy.core.basicr  r  compareinsert)ordered_argsnew_argsort_keyr  lowhighmidcompare_results           r!   _binary_search_insert_argr  a  s9   
 <AyAAAAAAAA xR !!HHW$5$555wi'' xQ  88G#4#444y<''3|$$q(C
++Tza|C'8'BBQ4a'CC7D ++ W%%%r#   Fc                  
 ddl 
ddlm} 
fd}ddlm} | ||           z  }| ||          z  }|r|r || j        d                    ||j        d                   k     r || j        |j        z             S  || j        d                    ||j        d                   k    r ||j        | j        z             S t          | j                  dk    rWt          |j                  dk    r?t          | j                  }|j        D ]}t          ||          }| n| ||          S |r6|j	        r/t          t          | j                  |          }| ||          S |r6| j	        r/t          t          |j                  |           }| ||          S 

                    | |          }	 ||	          |	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                f    | t          d          j                            | d          }d|fS )Nzordered_args is NoneT)is_commutative)r7   rA  
_from_args)r  resultrf   s     r!   make_optimizedz&_optimized_add.<locals>.make_optimized  s>     !7888
 %%l4%HHf~r#   )_is_symbols_binary_summationr  r  )rf   r  r  r  r  _argsr  listr  	is_symbolrA  )lhsrhslhs_is_optimized_summationrhs_is_optimized_summationsortkeyr  r  new_argsr7  r  rf   s             @r!   _optimized_addr    s9    LLL999999     JIIIII">">s"C"CC">">s"C"CC! 0&@ 0739R=!!GGCIaL$9$999!>#)ci"7888739Q<  7739R=#9#999!>#)ci"7888 sy>>Q3sy>>Q#6#6CIHY  4XqAA#E $ #%~h/// " ,cm ,,T#)__cBB!>(+++ " ,cm ,,T#)__cBB!>(+++YYsC  F((00&99r#   c                &    ddl m}  || |          S )Nr   )BitwiseFn_bitwise_and)r  r  )r7  r  r  s      r!   r  r    '    BBBBBB  A&&&r#   c                &    ddl m}  || |          S )Nr   )BitwiseFn_bitwise_or)r  r  )r7  r  r  s      r!   r  r    s'    AAAAAA1%%%r#   c                &    ddl m}  || |          S )Nr   )BitwiseFn_bitwise_xor)r  r  )r7  r  r  s      r!   r  r    r  r#   c                   dd l }t          | |j                  rt| j        }t	          |          dk    rZt          |d         |j                  r?|d         j        r2|                    |d                   }|d         |k    r||d         z  S t          | |j                  r| |                    |           k    st          | |j                  r|                    |           S  ||           S )Nr   r  r'  )rf   r0   MulrD  r  rg   r   rz   )r7  r  rf   aacoefs        r!   _floor_ceil_helperr     s    LLL!UY $Vr77a<<Jr!uek::<r!u?O<==A''D!u}}be|#1ek"" q!!!!a'' " }}Q2a55Lr#   c                $    ddl m}  ||           S )Nr   )
FloorToInt)r  r  )r7  r  s     r!   _sympy_floorr    "    777777:a==r#   c                $    ddl m}  ||           S )Nr   )
TruncToInt)r  r  )r7  r  s     r!   _sympy_truncr    r  r#   c                $    ddl m}  ||           S )Nr   )	CeilToInt)r  r	  )r7  r	  s     r!   _sympy_ceilr
    s"    6666669Q<<r#   c                6    dd l }|                    | |          S re   )rf   Eqr  s      r!   	_sympy_eqr    r  r#   c                6    dd l }|                    | |          S re   )rf   Ner  s      r!   	_sympy_ner    r  r#   c                6    dd l }|                    | |          S re   )rf   Gtr  s      r!   	_sympy_gtr    r  r#   c                6    dd l }|                    | |          S re   )rf   Ltr  s      r!   	_sympy_ltr  %  r  r#   c                6    dd l }|                    | |          S re   )rf   Ler  s      r!   	_sympy_ler  +  r  r#   c                6    dd l }|                    | |          S re   )rf   Ger  s      r!   	_sympy_ger  1  r  r#   c                &    ddl m}  || |          S )Nr   )Min)r  r  )r7  r  r  s      r!   
_sympy_minr  7  $    0000003q!99r#   c                &    ddl m}  || |          S )Nr   Max)r  r#  )r7  r  r#  s      r!   
_sympy_maxr$  =  r   r#   c                >    dd l }|                    || f|df          S )Nr   T)rf   	Piecewise)r7  r    frf   s       r!   
_sympy_iter(  C  s'    LLL??Aq6At9---r#   c                      fd}|S )Nc                b    dd l } t          |j        j        j        d           |           S )Nr   OpaqueUnaryFn_)r  r  utils_sympy	functions)r7  r>  r  s     r!   r  z_get_sym_math_fn.<locals>.fnM  s:    ++++Mwu{)35Ld5L5LMMaPPPr#   rU   r  s   ` r!   _get_sym_math_fnr/  L  s(    Q Q Q Q Q
 Ir#   _sympy_c                4    dd l }|                    |           S re   )rf   Abs)r7  rf   s     r!   
_sympy_absr3  ^  s    LLL99Q<<r#   c                D    ddl m}m} | ||           S  || |          S )Nr   )RoundDecimal
RoundToInt)r  r5  r6  )numberr   r5  r6  s       r!   _sympy_roundr8  d  sA    EEEEEEEEz&!!!|FG,,,r#   c                $    ddl m}  ||           S Nr   )ToFloat)r  r;  )r7  r;  s     r!   _sympy_sym_floatr<  m  s$    444444 71::r#   c                z    dd l }ddlm} |                     ||                    |                     |           S r:  )rf   r  r;  r  r   )r7  rf   r;  s      r!   _sympy_is_integerr>  u  sE    LLL44444488GGEKKNN++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_contiguousrC    s7    
e**C&ugtE#'2r<R<R7S7STTTr#   c                   dd l }t          |           }t          |          |k    r|j        S |j        }|j        j        }|D ]S}||                    | |         |j        j                  |                    ||         |          z  z  }|| |         z  }Tt          |          D ]+}||                    | |         |j        j                  z  },|S re   )	rf   r  rl   rk   SOner  rA  Zero)r   r   	dim_orderrf   rB  r  zds           r!   r@  r@    s    LLL
e**C
9~~{JMA  %(EGK88588GAJPQ;R;RRR	U1X3ZZ : :%(EGL999r#   c                (    t          | |g d          S N)r'     r  r   r@  r   r   s     r!   $sympy_is_channels_last_contiguous_2drP    s    &ug|||DDDr#   c                (    t          | |g d          S N)r'     rM  r  r   rN  rO  s     r!   $sympy_is_channels_last_contiguous_3drT    s    &ugGGGr#   c                   dd l }ddlm} t          |           }|t          |          k    r|j        S |j        j        }|j        }||                    |d         d          z  }|D ]n}||                    | |         d          ||         |k    z  z  }|dk    r||                    ||d                   z  }||          || |         d          z  }o|S )Nr   r"  r'  )	rf   r  r#  r  rl   rE  rG  rk   r  )	r   r   rH  rf   r#  rB  mrU  rJ  s	            r!   &sympy_is_channels_last_strides_genericrW    s    LLL000000
e**C
c)nn{A
A '!*a	 	  A * *	UXXeAh""gajAo66 66!WQZ(((A AJU1Xq)))Hr#   c                (    t          | |g d          S rL  rW  rO  s     r!   !sympy_is_channels_last_strides_2drZ    s    1%,,,OOOr#   c                (    t          | |g d          S rR  rY  rO  s     r!   !sympy_is_channels_last_strides_3dr\    s    1%///RRRr#   c                "    ddl m}  |g | |R  S )Nr   )!IsNonOverlappingAndDenseIndicator)r  r^  )r   r   r^  s      r!   -_sympy_is_non_overlapping_and_dense_indicatorr_    s0    NNNNNN,,>e>g>>>>r#   )r  r  r  r  r  r  c                J   t          |t                    r|j        S t          |          t          u r|                     |          S t          |          t          u r|                     |          S t          |          t          u r| 	                    |          S t          S r   )r0   r1   ru   r6   r   r   r   r}   r   r   NotImplemented)r3   r|   s     r!   r(  r(    s    #x   x	cd		~~c"""	cc		}}S!!!	ce		s### r#   c                >   t          | t                    r| j        | j        S |                                 rt	          |           S |                                 rt          |           S |                                 rt          |           S t          d|            )Nzunrecognized return type )
r0   r   r:   ro   r   rq   r   rs   r   r7   r  s    r!   r5  r5    s    !W !*"8zxxzz >ayy	
 >{{	
 >qzz<<<===r#   c                    t           |          S r   )METHOD_TO_OPERATOR)methods    r!   r   r      s    f%%r#   c                     t          d                     t          v r  d}n }dd} fd}| fd            }| fd            } t          v rt          t          d| |           d S  d	k    r! fd
}t          t          d| |           d S  dk    r"d fd	}t          t          d| |           d S t          t          d| |           d S )N   rI  r@   set[str]c                     dd l } | j        j        | j        j        | j        j        j        | g}dd l} d |D             | j        j        	                                z  dhz  S )Nr   c                6    h | ]}t          j        |          S rU   )inspectgetfile)rW   rV  s     r!   	<setcomp>z@_make_node_magic.<locals>.uninteresting_files.<locals>.<setcomp>8  s"    ...AW_Q...r#   z<string>)
r>  _dynamo
eval_framer,  fxexperimentalr   torch._dynamo.guardsguardsuninteresting_files)r>  modss     r!   rt  z-_make_node_magic.<locals>.uninteresting_files,  s{     M$MH!*	
 	$### /....m"66889l	
r#   c                L     t          j                   d fd	            }|S )Nc                    | |           n | |          t           j        j        j        r'|| |gn| gdfdt	          dfd           S )Nr@   Optional[int]c                    dd l }| j        d S t          |           t                    k    rd S t          | j        |j        |j        f          rd S | j        |j        |j        fv rd S t          |           S re   )	rf   r:   idr0   r-   rz   rg   rk   rl   )r   rf   r  s     r!   get_idzM_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.get_idJ  s     LLL(4#tHF33#t#HMEM5;3OPP $#t!5:u{*CCC#th<<'r#   expression_createdc            	         t                    t                    d  D             fd D             t          j        d          t          j        d          dS )Nc                ,    g | ]}t          |          S rU   r   r6  s     r!   r:  zc_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>.<locals>.<listcomp>^  s    %@%@%@c!ff%@%@%@r#   c                <    g | ]} |           |          S r   rU   )rW   ir{  s     r!   r:  zc_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>.<locals>.<listcomp>_  s5     ) ) )*+FF1II<QFF1II<Q<Q<Qr#   rM  )re  r  	result_id	argumentsargument_ids
user_stackstack)r   rz  
structuredget_user_stackget_framework_stack)r  r{  re  r  s   r!   r  zO_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>Z  sy    "("%f++%'ZZ%@%@i%@%@%@) ) ) )/8) ) ) '1&?&B&B!+!?!B!B
) 
) r#   )metadata_fn)r@   rx  )r>  _logging	_internalGET_DTRACE_STRUCTUREDr   )r3   rC   r  r{  r  r  re  s     @@@r!   wrapperz=_make_node_magic.<locals>.capture_provenance.<locals>.wrapper>  s    }DD%~'= !$!%uII!%I( ( ( ( ( ( "(
! 
! 
! 
! 
! 
! 
!    Mr#   r   )	functoolswraps)r  r  re  s   ` r!   capture_provenancez,_make_node_magic.<locals>.capture_provenance=  sD    			(	 (	 (	 (	 (	 (	 
	(	T r#   c           
     "   ddl m}m} t                    }t          }| j        |j         || j        |j                  } |            r7t          |  ||t          |           t          |          fi                     S t          |t                    st          dt          |                     d}	 dk    rddlm}m} | j        }	| j        j        s#|	                    | j                  j        dk    rG|j        j        s#|	                    |j                  j        dk    r || j        |j                  }
n+ || j        |j                  }
ndk    r*t)          | j        |j        | j        |j                  \  }}
ndv rdd l}dd	lm}m} | j        j        o || j        |j                  }|j        j        o ||j        |j                  }|r|j        j        s|rR| j        j        rF|j        |j        |j        |j         |j!        |j"        d         } || j        |j        d
          }
n- | j        |j                  }
n | j        |j                  }
n6# tF          $ r) tH          %                    d| j        |j                    w xY wtL          '                    d| j        |j        |
           tP          v rtR          }n<tT          v rtV          }n+| j,        tR          u s|j,        tR          u rtR          }n| j,        }|+|t          ur"| t          |tZ                    s ||          }| j        .                    || j/        |j/        f          \  }}t          |
| j        ||||          }|S )Nr   r0  zExpected SymNode, got Fr   r  r   )r   r   r   r   r   r   )symbol_is_typeSymT)rM  failed to eval %s(%s, %s)z%s %s %s -> %s)r;   r<   )0r=  r1  r2  r   r   r&   r(  r5  r0   r   r7   r6   r  r  r  r.   r-   r  bound_sympylowerr  r%   rf   torch.utils._sympy.symbolr  r  r  UNBACKED_INTrb   r  r  r  r  r  r  rO  rP  rQ  sym_node_logdebugalways_float_magic_methodsr   always_bool_magic_methodsr   r2   r1   rC  r;   )r3   rC   r1  r2  oprH  r<   r  r  r.   rF  rf   r  r  lhs_is_unbackedrhs_is_unbacked	rel_classr2   r;   rI  r  funcre  s                        r!   binary_magic_implz+_make_node_magic.<locals>.binary_magic_implk  sF   	
 	
 	
 	
 	
 	
 	
 	

  ''#9 UZ%;r$)UZ00H> 	))"y	%@P@P.QSUVV   %)) 	I !G$u++!G!GHHH#=	GGGGGGGG !N	I,	; ,,TY77=BBJ- C !,,UZ88>!CC#di44CC#)DIuz::CC5-;IJ-.	. .*$cc ???JJJJJJJJ #')"5 #..It0; ; #(*"6 #>>J 1< < $ 6
(< 6#6(,	(;6 $h#h#h#h#h#h! ! !I $)DIuzEJJJCC$ty%*55CC d49ej11 	 	 	KK3VTY
SSS	 	+VTY
CPPP ///FF000FF[E!!U\U%:%:FF[F (($x22 % vh''H ^<<u}-
 

 N 3
 
 
 s   <F6I3 33J&c           	        ddl m}m} t                    } |            r)t	          |  ||t          |           fi                     S | j        }dk    sdk    r| j                            |          }	  
|          }n+# t          $ r t                              d|            w xY wt                              d
||           t          }| j         || j                  }t           v rt"          }n)t$          v rt&          }nt(          v rt*          }n| j        }| j                            || j        f          \  }}	t3          || j        |||          S )Nr   r0  r   ceilingzfailed to eval %s(%s)z%s %s -> %sr<  )r=  r1  r2  r   r(  r5  r-   r.   _simplify_floor_divrO  rP  rQ  r  r  r   r&   always_int_magic_methodsr   r  r   r  r   r2   rC  r;   r   )r3   r1  r2  r  r-   rF  rH  r2   r;   rI  r  re  s             r!   unary_magic_implz*_make_node_magic.<locals>.unary_magic_impl  s   	
 	
 	
 	
 	
 	
 	
 	

  ''> 	R4!4!4R)D//9KR!P!PQQQyW) 3 3>55d;;D	$t**CC 	 	 	KK/>>>	 	=$c:::#9 r$)}}H---FF000FF111FF[F^<<R$,QQ
sDNFHgNNNNs   :B (B.r
   c                @   ddl m}m} | j        r|j        n|j        } |            rJt	          |  |t
          t          |           t          |          t          |          fi                     S 	  	| j        |j        |j                  }n<# t          $ r/ t          
                    d
| j        |j        |j                    w xY w| j                            t
          | j        |j        |j        f          \  }}t          || j        |j        ||          S )Nr   r0  zfailed to eval %s(%s, %s, %s)r<  )r=  r1  r2  r&   r(  r
   r5  r-   rO  rP  rQ  r.   rC  r;   r   r2   )	pred_node	then_node	else_noder1  r2  rH  rF  r;   rI  r  re  s            r!   sym_ite_implz&_make_node_magic.<locals>.sym_ite_impl  sl          
 *3Ky~~Y^H~ ''%i00%i00%i00
    
d9>9>9>JJ   3NNN    #,EE)+Y->	@QR JGQ Y()*:Hg   s   4B 9C
r   c           	     2   ddl m}m} t          j        } |            r*t          |  ||t          |           |fi                     S | j        }	  ||          }n,# t          $ r t          
                    d||            w xY w|t          }n| j        }d }| j         || j        |          }| j        g}	||	                    |           | j                            |t%          |	                    \  }
}t'          || j        |||
          S )Nr   r0  z!failed to eval %s(%s, ndigits=%s)r<  )r=  r1  r2  builtinsr   r(  r5  r-   rO  rP  rQ  r   r2   r&   r;   r   r.   rC  r@  r   )r3   r   r1  r2  r  r-   rF  r2   rH  rD  r;   rI  r  re  s               r!   
round_implz$_make_node_magic.<locals>.round_impl;  sb          
 B~ --b9T??G2LbQQ   9Dd4))   ?wWWW Hy$2di11 L>D"G$$$@@U4[[QQJGQ3'RRRRs   A )B)r@   rh  r   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )	re  r  method_attrrt  r  r  r  r  r  s	   ``       r!   _make_node_magicr  $  s   9S>>$DCCClll
 
 
 
", , , , ,\ y y y y y yv "O "O "O "O "O "OH *[**,<=====	9		&	 &	 &	 &	 &	 &	P 	*[**L99999	7		'	S '	S '	S '	S '	S '	S '	SR 	*[**J77777*[**,=>>>>>r#   c                      fd}t          t          d  |            fd}t          t          j        t
                              s(t          t          j        t
                    |           d S d S )Nc           	        ddl m}m} t          t          j        t                             } |            r1t          |  ||d |D             d |D             fi                     S d |D             }d |D             }	  ||          }n,# t          $ r t          
                    d||            w xY wg }	d }
|D ]%}|j         nQ|	                    |j                   &g }|D ]%}|j         n'|                    |j                   & ||	|          }
                    d          rt          }nt          }t!          || j        ||
          S )	Nr   r0  c                ,    g | ]}t          |          S rU   r4  rW   rX   s     r!   r:  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>x  s    222qill222r#   c                ,    g | ]}t          |          S rU   r4  r  s     r!   r:  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>x  s    4S4S4SaYq\\4S4S4Sr#   c                    g | ]	}|j         
S rU   r   r  s     r!   r:  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>|  s    ,,,af,,,r#   c                    g | ]	}|j         
S rU   r   r  s     r!   r:  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>}  s    0001000r#   r  
_indicator)r=  r1  r2  r  sysmodulesrt  r(  rO  rP  rQ  r&   r   endswithr   r   r   r.   )r3   r   r   r1  r2  r  
size_exprsstride_exprsrF  rG  rH  rX   stride_hintsr2   r  re  s                 r!   sizes_strides_implz4_make_node_sizes_strides.<locals>.sizes_strides_impll  s   	
 	
 	
 	
 	
 	
 	
 	

 S[*F33> 	##22E2224S4S74S4S4ST    -,e,,,
00000	$z<00CC 	 	 	KK3VZVVV	
 
 	8 	8Av~af%%%%L 8 86>E##AF++++2j,77 ??<(( 	FFFsDNFH===s   B )B9rI  c                   dd l ddlm} t          j        | |          D ]]t          t                    rFt           t          j	                  fd| D             fd|D                                 c S ^dk    r || |          S t           fd| D             fd|D                                 S )Nr   )!eval_is_non_overlapping_and_densec                :    g | ]}t          j        |          S rU   r(  ru   rW   r  r7  s     r!   r:  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>  s%    ;;;++;;;r#   c                :    g | ]}t          j        |          S rU   r  r  s     r!   r:  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>  s%    ===++===r#   r  c                :    g | ]}                     |          S rU   sympifyrW   r7  rf   s     r!   r:  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>  s%    555!U]]1%%555r#   c                :    g | ]}                     |          S rU   r  r  s     r!   r:  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>  s%    777!U]]1%%777r#   )rf   r,   r  	itertoolschainr0   r   r5  r  ru   r   )r   r   r  r7  rf   r  re  s      @@r!   sizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_user  s7   	
 	
 	
 	
 	
 	
 00 	 	A!V$$  +GAFF++;;;;U;;;====W===      ===44UGDDD 5555u5557777w777   r#   )r  r   hasattrr  r  rt  )re  r  r  r  s   ``  r!   _make_node_sizes_stridesr  i  s    .> .> .> .> .> .>` G\\\#5666
     6 3;x(&11 CH%v/ABBBBBC Cr#   c                Z   
  t           v rd  n dd
d  t          v rd nd  fd
 fd	}
 fd
}
 fd}d } t          v r ||d  d|           d S  t          v r-t	          |           } || t          ||                     d S  dk    r
fd} ||d  d|           d S  dk    rd
 fd	} ||d  d|           d S  }	 t          v rt                    }	 ||d|	 d|            t          v r ||d|	 d|           d S d S )Nr  r  2Union[SymInt, int, SymFloat, float, SymBool, bool]c                (   t          | t          t          t          f          r| S t          | t                    r| j                            dd          S t          | t                    r| j                            dd          S t          d          )Nr,  r   z*expect to be called with constant SymBools)
r0   r   r   r   r   ru   r-  r   r\  r7   r  s    r!   get_constantz&_make_user_magic.<locals>.get_constant  s    a#ud+,, 	Ha   	+6##B***a!! 	,6$$R+++IJJJr#   c                    t          | t          t          t          f          rdS t          | t          t
          t          f          r| j                                        S dS )NTF)	r0   r   r   r   r   r   r   ru   rs  r  s    r!   rs  z%_make_user_magic.<locals>.is_constant  sR    a#ud+,, 	4a&(G455 	(6%%'''ur#   c                    t          | t                    r4t          | j                            t          |                               S | S )z;Implements True+True=2, which works in python but not sympy)r0   r   r   ru   r}   r   r  s    r!   promotez!_make_user_magic.<locals>.promote  s;    !W%% 7afooc!ff55666Hr#   c                    | S r   rU   r  s    r!   r  z!_make_user_magic.<locals>.promote  s    Hr#   c                    dvr| |fS t          | t          t          j        f          }t          |t          t          j        f          }|s|r,|st          j        |           } |st          j        |          }| |fS )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r0   r   r>  r   r	   )r3   rC   f_selff_otherre  s       r!   promote2z"_make_user_magic.<locals>.promote2  s      
 
 
$ ;D5%."9::UUEN$;<< 	/W 	/ -t,, /..U{r#   c                     |           }  |           r! t                     |                     S t           t          | j                                        S r   )r   r5  r  ru   )r3   r  rs  re  r  r  s    r!   r  z*_make_user_magic.<locals>.unary_magic_impl0  si    wt}};t 	D.&v..T0B0BCCC8K88::;;;r#   c           	     T   t          |t          t          t          t          t
          t          f          st          S t          	                    d| |            |           }  |          } 	| |          \  } } |           r" t                     |           |          S  |          r |          }t          | j        |          }|t          u rt          S t           t          | j                  |                    } |          r |          n|S )NzMAGIC %s %s %s)r0   r   r   r   r   r   r   ra  r  r  r   r(  ru   r5  r  
r3   rC   
other_noderetr  rs  re  r  r  r  s
       r!   r  z+_make_user_magic.<locals>.binary_magic_impl6  s5   %#udFHg!NOO 	"!!+VT5AAAwt}}htU++e;t 	K.&v..T0B0BEJJJ;u 	( L''ETY..
''!!7	;77
CCDD$/K$4$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 |          n|S r   )r0   r   r   r   r   r   r   ra  r   r(  ru   r5  r  r  s
       r!   rbinary_magic_implz,_make_user_magic.<locals>.rbinary_magic_implG  s   %#udFHg!NOO 	"!!wt}}htU++e;t 	K.&v..||D7I7IJJJ;u 	( L''ETY..
''!!8
K88CCDD$/K$4$4=||C   #=r#   c                v    t          | |           fd}| t          u rt          t          |           dS dS )z
        Registers the SymNode magic method on SymInt/Float/Bool,
        and optionally registers a corresponding wrapped method on DynamicInt.
        c                     d | D             }  t          t                    |  }t          |t                    r$t          |t                    st	          |          S |S )Nc                J    g | ] }t          |t                    r|j        n|!S rU   )r0   r   r  )rW   r  s     r!   r:  zP_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impl.<locals>.<listcomp>b  s-    MMM1jJ77>AFFQMMMr#   )r  r   r0   r   r   )rD  rF  attrs     r!   dynamic_int_implz<_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impla  s`    MMMMMD$'#t$$d+C#s## 'JsD,A,A '!#&Jr#   N)r  r   r   )	user_typer  symnode_implr  s    `  r!   setattrsz"_make_user_magic.<locals>.setattrsW  s^     		4...	 	 	 	 	 J&67777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         	                                r |          n|S )Nz9then_node and else_node must be SymNodes with same pytype)
ru   r(  ra  r0   r   r2   r7   r5  r  rs  )	predr   r   r  r  r  r  r  r  s	          r!   sym_ite_magic_implz,_make_user_magic.<locals>.sym_ite_magic_implr  s    	I	844I	844IN**i>.I.I%%9g..y'22 $	(888$O   ;GDI{;;IyQQRRC(+(<(<(>(>G<<$$$CGr#   r   c                     |           rt          j         |           |          S t           t          | j                  |                    S r   )r  r   r5  r  ru   )r3   r   r  rs  re  s     r!   round_magic_implz*_make_user_magic.<locals>.round_magic_impl  sW    {4   C~ll4&8&8'BBB7WTY77@@AAAr#   __r)r  r  r   )r  bool_becomes_int_magic_methodsunary_magic_methodsunary_nonmagic_methodsr  r   bitwise_opsreflectable_magic_methods)re  r  r  r  r  r  origr  r  method_namer  rs  r  r  r  s   `         @@@@@r!   _make_user_magicr    s    CCC%VooK K K K  B ///	 	 	 		 	 	! ! ! ! !T< < < < < < < < <> > > > > > > > > >"> > > > > > > > > > 8 8 8( $$$OOOO-=>>>>>	)	)	)y&))FN3CT$J$JKKKKK	9			H 	H 	H 	H 	H 	H" 	OOOO-?@@@@@	7			B 	B 	B 	B 	B 	B 	B 	B 	OOOO-=>>>>>[  %f-K00002CDDD...HY 5k 5 5 57IJJJJJ /.r#   )FFr   )
__future__r   r  r  rk  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   	getLoggerrt  rP  getArtifactLoggerr  r   r   rx  r   r   r   HintType__all__torch.typesr   r1   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!  rd  r  r  math_op_namesr  sym_namepriv_sym_namer  r  r   r  r  only_bool_magic_methodsr  also_bool_magic_methodsbool_magic_methodsonly_float_magic_methodsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r
  r  r  r  r  r  r  r  r$  r(  r  current_moduler/  priv_sympy_namer  rv  r3  r8  r<  r>  invertr   rC  r@  rP  rT  rW  rZ  r\  r_  sizes_strides_methodsr(  r5  r   r  r  itemsre  r  r  rU   r#   r!   <module>r     s   # " " " " " "              



 / / / / / / / / 1 1 1 1 1 1 1 1 1 1  . . . . . . . . .	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 - , , , , ,  ?>>>>>>g!!~//*EE
 688    %<#$ K
J
J 1 0 0 0 0 0  j j j j j j j jZ+ + + + + + + +. . . . . . . .:$	8<$	8<$ 
8<$ 
8=	$
 8=$ DI$ 	(+$ TZ$ TZ$ H%$ 	(+$ 	(+$ **$ 	(+$ ho$  	(+!$" 
8<#$ $$ 
8<%$& 	(+'$( 
8<)$* 	(,+$, (,-$. 8</$0 1$2 hl3$4 X^5$6 ho7$8 
8<9$: ;$< w=$> w?$@ wA$B wC$D X%E$ $F 8#G$ $ L
 
 
      Dd}}H"NNMGGX//55666#*75-#@#@x H%%%NN8
   $&<< >== !6!6!6 & ,/FF  JII  7<T] 2#4NN XWW  - -Dd}}H""8,,,, HGG    "                      F LQA: A: A: A:H' ' '& & &' ' '	8<	8< 
8< 
:	
 + ! 
: < 	) + < ) % O m  m! (  $                      . . . X&    1 1D&&&O		$		B$33BObkGNOR0000o  - - - -  0 0 0 x 
8< 	)	
 	) 	) 	) 	) 	) \ \ ! K 
8< z  z!" z#$ 
:% & #)  0  H HDd}}H%gn6F6F6FGGM((M>U U U
  0E E EH H H% % %PP P PS S S? ? ? )&J&J#D#D.[	 	   > > >& & &B? B? B?J
TC TC TCn "'')) # #LFDVT"""")//11 + +LFDVT****LK LK LK^  + +F((())))))***(((F6T,T,T)))VV$$$[  ***
DDr#   