
    a,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 d dlm Z  d dl!Z!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Z0d dl1m2Z3 edd            Z4edd            Z4edd            Z4edd            Z4ddZ4 G d d          Z5 G d d           Z6 G d! d"e6e.          Z7i d#ej8        d$ej9        d%ej:        d&ej;        d'ej;        d(ej<        d)ej=        d*ej>        d+ej?        d,ej@        d-ejA        d.ejB        d/d0 d1ejC        d2ejD        d3ejE        d4ejF        i d5ejG        d6ejH        d7ejI        d8ejJ        d9ejJ        d:ejK        d;ejL        d<ejL        d=ejM        d>ejN        d?ejO        d@edAedBedCedDedEejP        dFejP        iZQh dGZRddKZSdLZTeTD ][ZUdMeU ZVdNeV ZW eXe5eV eSeU                      eYeeW          eQeV<   eR:                    eV           e0Z                    eV           \d/hZ[eRe[z  Z\h dOZ]h dPZ^d)hZ_e]e_z  Z`h dQZad&d8hZbd&d8dRdSZch dTZdeTD ]ZUdMeU ZVed:                    eV           h dUZeh dVZfddZZgdd[Zhdd\Zidd]Zjdd^Zkdd_Zldd`ZmddaZnddbZoddcZpddhZq	 	 dddpZrddqZsddrZtddsZui d%ej:        d?ejO        d5ejG        d4ejd<ekd;eld&emd'esd8end9etd:eudEegdFehd,eid2eod>epZvddvZwddwZxddxZyddyZzddzZ{dd{Z|dd|Z}dd}Z~dd~ZddZddZddZddZe	j        e%         ZddZeTD ]-ZUdeU Z eeU          Zexe_        e_%         eXeee           .[[U[ddZ	 dddZddZddZi evi dDej        d#ej8        d)e{d6e|d.e}d3e~d1ed-ed*exd+eyd@ed(ezd7ejI        dCedBedAed$eeedZeTD ]ZUdMeU ZV eYedeU           eeV<   [U[V[T[ddZddZddZddZddZddZddZddZeeeeeedZddZddZddZddZddZe                                D ]\  ZZ eee           e                                D ]\  ZZ eee           ddZeD ]TZee]v r eee           eeav r eee           $ee_v see^v r eee            eee           eecvr eee           U[[dS )    )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_typest
type[bool]returntype[SymBool]c                    d S N r   s    ^/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/torch/fx/experimental/sym_node.py_to_symtyper&   D   s    14    	type[int]type[SymInt]c                    d S r"   r#   r$   s    r%   r&   r&   F   s    /2sr'   type[float]type[SymFloat]c                    d S r"   r#   r$   s    r%   r&   r&   H   s    363r'   typec                    d S r"   r#   r$   s    r%   r&   r&   J   s    "%#r'   c                f    | 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   s1    DyyCxxEzzHr'   c                     e Zd ZU dZdZded<   	 	 	 dddZddZddZddZ	e
dd            Ze
dd            ZddZdd!Zdd#Zdd%Zdd&Zdd'Zdd(Zdd)Zdd+Zdd-Zdd.Zdd/Zdd1Zdd2Zdd3Zdd4Zdd5Zdd6Zddd8Zdd9Z dd:Z!dd;Z"dd<Z#dd=Z$dd>Z%dd?Z&dd@Z'ddAZ(ddBZ)ddCZ*ddDZ+ddEZ,ddFZ-ddGZ.ddHZ/ddIZ0ddJZ1ddKZ2ddLZ3ddMZ4ddNZ5ddOZ6ddPZ7ddQZ8ddRZ9ddSZ:ddTZ;ddUZ<ddXZ=dd\Z>dd]Z?dd^Z@dd_ZAdd`ZBddaZCddbZDddcZEdddZFddeZGddfZHddgZIddhZJddiZKddjZLddkZMddmZNdddpZOddsZPddtZQdduZRddvZSddwZTddxZUddyZVddzZWdd{ZXdd|ZYdd}ZZdd~Z[dS )r   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.
    Fr1   _optimized_summationNexprr   	shape_envShapeEnv | Nonepytyper.   hintHintType | objectconstantint | float | bool | Nonefx_nodeoptimized_summationr   Nonec                    | _         | _        | _        | _        d _        d  _        d
 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 )Nr   &HintType | SymInt | SymFloat | SymBoolc                    ddl m}   | j                  rd S j        t	          d          j                            j        d          }|,t          |t                    s                    |          n|}|S )Nr   )has_free_unbacked_symbolsz%shape_env is required to compute hintT)compute_hint)	%torch.fx.experimental.symbolic_shapesrE   r6   r7   RuntimeError_maybe_evaluate_static
isinstanceSymTypesr9   )rE   r:   selfs     r%   rF   z&SymNode.__init__.<locals>.compute_hint   s    WWWWWW )(33 t~%"#JKKK>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 )r   rC   )_exprr7   r9   r5   	_expr_ver_expr_cacher   r.   r&   AssertionError_translation_validation_enabledr6   _hintr<   r>   )rL   r6   r7   r9   r:   r<   r>   r?   rF   computed_hinttx_validation_ens   `          r%   __init__zSymNode.__init__h   sk    
"$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
3; NMt~M 	 (3Gr'   r   c                \    t          | j        || j        | j        | j        | j                  S r"   )r   rO   r9   rT   r<   r>   )rL   r7   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"   )rO   r9   rT   r<   r>   rL   rZ   s     r%   	_value_eqzSymNode._value_eq   s]     J%+% .u|+.
ek). /. -	
r'   r2   c                \    t          | j        | j        | j        | j        | j        f          S r"   )hashrO   r9   rT   r<   r>   rL   s    r%   _value_hashzSymNode._value_hash   s%    TZdj$-VWWWr'   sympy.Basicc                J   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                  }|| _        || _        |S )Nz$shape_env is required to access exprr   )
rJ   rO   r2   	is_numberr7   rR   _replacements_version_counterrQ   rP   replace)rL   verresults      r%   r6   zSymNode.expr   s     tz3''	z#	 :>! !GHHHn:!88:'C4>,A,A##''
33!r'   rC   c                    | j         S r"   rT   r`   s    r%   r:   zSymNode.hint   s
    zr'   c                    | j         d uS r"   rj   r`   s    r%   has_hintzSymNode.has_hint   s    z%%r'   
int | Nonec                F    | j         j        rt          | j                   S d S r"   )r6   rd   r2   r`   s    r%   maybe_as_intzSymNode.maybe_as_int   s"    9 	ty>>!4r'   float | Nonec                j    dd l }t          | j        |j                  rt	          | j                  S d S Nr   )sympyrJ   r6   Floatr3   rL   rs   s     r%   maybe_as_floatzSymNode.maybe_as_float   s6    di-- 	###4r'   bool | Nonec                N    dd l }| j        |j        u rdS | j        |j        u rdS d S )Nr   TF)rs   r6   truefalseru   s     r%   maybe_as_boolzSymNode.maybe_as_bool   s8    9
""4Y%+%%54r'   c                    | j         t          u S r"   )r9   r2   r`   s    r%   is_intzSymNode.is_int  s    {c!!r'   c                    | j         t          u S r"   )r9   r3   r`   s    r%   is_floatzSymNode.is_float
  s    {e##r'   c                    | j         t          u S r"   )r9   r1   r`   s    r%   is_boolzSymNode.is_bool  s    {d""r'   c                    | j         d uo7t          | j         t                    o| j         j                                        S r"   )rT   rJ   r   nodeis_nested_intr`   s    r%   r   zSymNode.is_nested_int  s?     Jd" 04:v..0
--//	
r'   numc                    t          |          t          urt          dt          |                     dd l}t	           |j        |          | j        t          |||          S )NExpected int, got r   r<   r>   )r.   r2   rR   rs   r   Integerr7   rL   r   rs   s      r%   wrap_intzSymNode.wrap_int  sl    99C !Ad3ii!A!ABBBEM#S3PS
 
 
 	
r'   r3   c                    t          |          t          urt          dt          |                     dd l}t	           |j        |          | j        t          |||          S )NzExpected float, got r   r   )r.   r3   rR   rs   r   rt   r7   r   s      r%   
wrap_floatzSymNode.wrap_float!  sl    99E!! !CS		!C!CDDDEK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   r   )r.   r1   rR   rs   r   ry   rz   r7   r   s      r%   	wrap_boolzSymNode.wrap_bool*  sq    99D   !BtCyy!B!BCCC.EJJ5;N
 
 
 	
r'   c                    | S r"   r#   r`   s    r%   clonezSymNode.clone8  s    r'   builtins.strc                    | j          S r"   r6   r`   s    r%   strzSymNode.str;  s    )~r'   c                *    |                                  S r"   r   r`   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, rM   )rO   r7   r9   rT   appendr<   r>   join)rL   reps     r%   __repr__zSymNode.__repr__A  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'   c                *    |                                  S r"   r   r`   s    r%   _graph_reprzSymNode._graph_reprM  s    xxzzr'   c                *    |                                  S r"   )_absr`   s    r%   abszSymNode.absS      yy{{r'   c                *    |                                  S r"   )_posr`   s    r%   poszSymNode.posV  r   r'   ndigitsc                ,    |                      |          S r"   )_round)rL   r   s     r%   roundzSymNode.roundY  s    {{7###r'   c                *    |                                  S r"   )_truncr`   s    r%   trunczSymNode.trunc\      {{}}r'   c                ,    |                      |          S r"   )_addr\   s     r%   addzSymNode.add_      yyr'   c                ,    |                      |          S r"   )_subr\   s     r%   subzSymNode.subb  r   r'   c                ,    |                      |          S r"   )_mulr\   s     r%   mulzSymNode.mule  r   r'   c                ,    |                      |          S r"   )_modr\   s     r%   modzSymNode.modh  r   r'   c                ,    |                      |          S r"   )
_float_powr\   s     r%   	float_powzSymNode.float_powk  s    u%%%r'   c                ,    |                      |          S r"   )_pow_by_naturalr\   s     r%   pow_by_naturalzSymNode.pow_by_naturaln  s    ##E***r'   c                ,    |                      |          S r"   )_and_r\   s     r%   and_zSymNode.and_q  s    zz%   r'   c                ,    |                      |          S r"   )_or_r\   s     r%   or_zSymNode.or_t  r   r'   c                ,    |                      |          S r"   )_float_truedivr\   s     r%   float_truedivzSymNode.float_truedivw  s    ""5)))r'   c                ,    |                      |          S r"   )_int_truedivr\   s     r%   int_truedivzSymNode.int_truedivz        '''r'   c                ,    |                      |          S r"   )_int_floordivr\   s     r%   int_floordivzSymNode.int_floordiv}      !!%(((r'   c                ,    |                      |          S r"   )_lshiftr\   s     r%   lshiftzSymNode.lshift      ||E"""r'   c                ,    |                      |          S r"   )_rshiftr\   s     r%   rshiftzSymNode.rshift  r   r'   c                *    |                                  S r"   )_sym_notr`   s    r%   r   zSymNode.sym_not      }}r'   c                ,    |                      |          S r"   )_eqr\   s     r%   eqz
SymNode.eq      xxr'   c                ,    |                      |          S r"   )_ner\   s     r%   nez
SymNode.ne  r   r'   c                ,    |                      |          S r"   )_gtr\   s     r%   gtz
SymNode.gt  r   r'   c                ,    |                      |          S r"   )_ltr\   s     r%   ltz
SymNode.lt  r   r'   c                ,    |                      |          S r"   )_ler\   s     r%   lez
SymNode.le  r   r'   c                ,    |                      |          S r"   )_ger\   s     r%   gez
SymNode.ge  r   r'   c                *    |                                  S r"   )_floorr`   s    r%   floorzSymNode.floor  r   r'   c                *    |                                  S r"   )_is_integerr`   s    r%   
is_integerzSymNode.is_integer  s    !!!r'   c                *    |                                  S r"   )
_sym_floatr`   s    r%   r	   zSymNode.sym_float  s       r'   c                *    |                                  S r"   )_sym_intr`   s    r%   sym_intzSymNode.sym_int  r   r'   c                *    |                                  S r"   )_ceilr`   s    r%   ceilzSymNode.ceil  s    zz||r'   c                *    |                                  S r"   )_negr`   s    r%   negzSymNode.neg  r   r'   c                ,    |                      |          S r"   )_sym_minr\   s     r%   r   zSymNode.sym_min      }}U###r'   c                ,    |                      |          S r"   )_sym_maxr\   s     r%   r   zSymNode.sym_max  r  r'   then_valelse_valc                .    |                      ||          S r"   )_sym_ite)rL   r  r  s      r%   r
   zSymNode.sym_ite  s    }}Xx000r'   sizeslist[SymNode]stridesc                .    |                      ||          S r"   )_is_contiguousrL   r
  r  s      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   r\   s     r%   sym_orzSymNode.sym_or  r   r'   c                ,    |                      |          S r"   )r   r\   s     r%   sym_andzSymNode.sym_and  r   r'   c                ,    |                      |          S r"   )_bitwise_andr\   s     r%   bitwise_andzSymNode.bitwise_and  r   r'   c                ,    |                      |          S r"   )_bitwise_orr\   s     r%   
bitwise_orzSymNode.bitwise_or  s    &&&r'   c                ,    |                      |          S r"   )_bitwise_xorr\   s     r%   bitwise_xorzSymNode.bitwise_xor  r   r'   c                ,    |                      |          S r"   )r   r\   s     r%   truedivzSymNode.truediv  r   r'   c                ,    |                      |          S r"   )r   r\   s     r%   floordivzSymNode.floordiv  r   r'   c                ,    |                      |          S r"   )r   r\   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  s9     ::5'JJMMD!
 
 	
r'   c                .    |                      dd          S N r   )	guard_intr`   s    r%   int_zSymNode.int_  s    ~~b!$$$r'   argsc           
     <   dd l }ddlm}m}  |            r=t	          |  |t
          j        t          d |D                       fi                     S d |D             } |j        | }g }t          }|D ]%}	|	j
         n*|                    |	j
                   &t          |          }| j        t          d          | 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.0as     r%   	<genexpr>z"SymNode.sym_sum.<locals>.<genexpr>
  s(      66A9Q<<666666r'   c                    g | ]	}|j         
S r#   r   rF  s     r%   
<listcomp>z#SymNode.sym_sum.<locals>.<listcomp>  s    &&&A&&&r'   z!shape_env is required for sym_sumc              3  $   K   | ]}|j         V  d S r"   r>   rF  s     r%   rI  z"SymNode.sym_sum.<locals>.<genexpr>  s$      !:!:!)!:!:!:!:!:!:r'   rM  )rs   "torch.fx.experimental.proxy_tensorrA  rB  r7  torchsym_sumtupleAddr   r:   r   sumr7   rH   _create_fx_call_functionr   r2   )rL   r>  rs   rA  rB  exprsout
size_hintsout_hintrH  r>   _s               r%   rP  zSymNode.sym_sum  sk   	
 	
 	
 	
 	
 	
 	
 	

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


 sDNC7KKKKr'   size_obliviousbool | int | floatc                d    | j         t          d          | j                             | |          S )Nz!shape_env is required to evaluate)r7   rH   evaluate_sym_node)rL   rZ  s     r%   evaluatezSymNode.evaluate#  s1    >!BCCC~//nEEEr'   filelinec                    |                                  }	 t          |          S # t          $ r t                              d|            w xY w)NzFailed to convert to int: %s)r^  r2   	ExceptionlogwarningrL   r_  r`  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)r^  r3   rb  rc  rd  re  s       r%   guard_floatzSymNode.guard_float3  sT     MMOO	88O 	 	 	KK8!<<<	rg  c                    |                                  }	 t          |          S # t          $ r t                              d|            w xY w)NFailed to convert to bool: %sr^  r1   rb  rc  rd  re  s       r%   
guard_boolzSymNode.guard_bool=  sT     MMOO	77N 	 	 	KK7;;;	rg  c                   ddl m} | j        t          d          |                                 r2 || j                  s"| j        j        s|                     ||          S | j                            | j        | d| | j	                  S )Nr   )free_unbacked_symbolsz%shape_env is required for expect_true:rM  )
rG   ro  r7   rH   rl   r6   +prefer_deferred_runtime_asserts_over_guardsrm  guard_or_defer_runtime_assertr>   )rL   r_  r`  ro  s       r%   expect_truezSymNode.expect_trueG  s    OOOOOO>!FGGG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)rG   ru  r   rR   r   )rL   r_  r`  ru  s       r%   ru  zSymNode.statically_known_true[  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)rZ  rk  rl  re  s       r%   guard_size_obliviouszSymNode.guard_size_obliviousb  sZ     MMM..	77N 	 	 	KK7;;;	s	   ' 'Ac                    ddl m} |                                 st          d           |t	          |                     S )Nr   )guard_or_falserv  )rG   rz  r   rR   r   )rL   r_  r`  rz  s       r%   rz  zSymNode.guard_or_falsev  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_truerv  )rG   r|  r   rR   r   )rL   r_  r`  r|  s       r%   r|  zSymNode.guard_or_true}  sI    GGGGGG||~~ 	7 !5666}WT]]+++r'   c                .    |                      dd          S r:  )rm  r`   s    r%   bool_zSymNode.bool_  s    r1%%%r'   c                    dS )NTr#   r`   s    r%   is_symboliczSymNode.is_symbolic      tr'   c                    d S r"   r#   r`   s    r%   
nested_intzSymNode.nested_int  r  r'   c                    dS )NFr#   r`   s    r%   is_constantzSymNode.is_constant  s    ur'   )NNF)r6   r   r7   r8   r9   r.   r:   r;   r<   r=   r>   r   r?   r1   r   r@   )r7   r   r   r   )rZ   r   r   r1   )r   r2   )r   rb   rN   )r   r1   )r   rm   )r   rp   )r   rw   )r   r2   r   r   )r   r3   r   r   )r   r1   r   r   )r   r   )r   r   r"   )r   rm   r   r   )rZ   r   r   r   )r  r   r  r   r   r   )r
  r  r  r  r   r   )r>  r  r   r   )F)rZ  r1   r   r[  )r_  r   r`  r2   r   r2   )r_  r   r`  r2   r   r3   )r_  r   r`  r2   r   r1   )r   r@   )\__name__
__module____qualname____doc__r5   __annotations__rW   rY   r]   ra   propertyr6   r:   rl   ro   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.  r0  r2  r4  r8  r=  rP  r^  r<  ri  rm  rs  ru  rx  rz  r|  r~  r  r  r  r#   r'   r%   r   r   Y   s2          "'&&&& /3$)W4 W4 W4 W4 W4r
 
 
 


 
 
 
X X X X    X$    X& & & &         " " " "$ $ $ $# # # #
 
 
 

 
 
 

 
 
 

 
 
 
         
$ 
$ 
$ 
$         $ $ $ $ $                               & & & &+ + + +! ! ! !       * * * *( ( ( () ) ) )# # # ## # # #                        " " " "! ! ! !         $ $ $ $$ $ $ $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NF F F F F         
 
 
 
(4 4 4 4   (- - - -, , , ,& & & &           r'   r   c                        e Zd Zd fdZ xZS )_DynamicScalarr>  r   r   r   c                h    | t           u rt          d           t                      j        | g|R  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Xuwws*T****r'   )r>  r   r   r   )r  r  r  r  __classcell__r  s   @r%   r  r    s=        + + + + + + + + + +r'   r  c                  L     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)
    valr2   r   r   c                    t          |t                    st          dt          |                     t	                                          | t          |                    }|S )Nr   )rJ   r2   rR   r.   r  r  )r  r  objr  s      r%   r  zDynamicInt.__new__  sU    #s## 	C !Ad3ii!A!ABBBggooc3s88,,
r'   r   c                    d| j          dS )NzDynamicInt(rM   )realr`   s    r%   r   zDynamicInt.__repr__  s    )TY))))r'   rZ   c                0    t          | j        |z            S r"   r   r  r\   s     r%   __floordiv__zDynamicInt.__floordiv__  s     $)u,---r'   c                0    t          || j        z            S r"   r  r\   s     r%   __rfloordiv__zDynamicInt.__rfloordiv__  s    %49,---r'   Nc                    |t          | j        ||          }n
| j        |z  }t          |t                    rt	          |          S |S r"   r4  r  rJ   r2   r   rL   rZ   modulorh   s       r%   __pow__zDynamicInt.__pow__  sP    E622FFY%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__  sN    	622FFDI%Ffc"" 	&f%%%r'   )r  r2   r   r   )r   r   )rZ   r2   r   r   r"   )r  r  r  r  r  r   r  r  r  r  r  r  s   @r%   r   r     s        	 	     * * * *. . . .
. . . .	 	 	 	       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	   namer   Callable[[SymNode], SymNode]c                     d fd}|S )NrL   r   r   c                :     t          | d                       S )N_sym_)getattr)rL   r  s    r%   fnz_get_sym_node_fn.<locals>.fn  s!    ,wt^T^^,,...r'   rL   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_rY  >   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   r8  rH  rb   bc                &    ddl m}  || |          S )Nr   )FloatTrueDiv)torch.utils._sympy.functionsr  )rH  r  r  s      r%   _sympy_float_truedivr  P  &    999999<1r'   c                &    ddl m}  || |          S )Nr   )
IntTrueDiv)r  r  )rH  r  r  s      r%   _sympy_int_truedivr  V  s&    777777:ar'   c                &    ddl m}  || |          S )Nr   )FloorDiv)r  r  )rH  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)rH  r  r  r  s       r%   
_sympy_modr  b  sO    ;;;;;;;; A, s1ayyyAr'   c                &    ddl m}  || |          S )Nr   )PowByNatural)r  r  )rH  r  r  s      r%   _sympy_pow_by_naturalr  k  r  r'   c                &    ddl m}  || |          S )Nr   )FloatPow)r  r  )rH  r  r  s      r%   _sympy_float_powr  q  r  r'   c                ,    dd l } |j        | |          S rr   )rs   AndrH  r  rs   s      r%   
_sympy_andr  w  s    LLL59Q??r'   c                ,    dd l } |j        | |          S rr   )rs   Orr  s      r%   	_sympy_orr  }      LLL58Aq>>r'   c                &    ddl m}  || |          S )Nr   )LShift)r  r  )rH  r  r  s      r%   _sympy_lshiftr    $    3333336!Q<<r'   c                &    ddl m}  || |          S )Nr   )RShift)r  r  )rH  r  r  s      r%   _sympy_rshiftr    r  r'   ordered_argslist[sympy.Basic]new_arglist[sympy.Basic] | Nonec                   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BasicrB   r6     N)lensympy.core.basicr  r  compareinsert)r  r  sort_keyr  lowhighmidcompare_results           r%   _binary_search_insert_argr    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'   Flhsrhslhs_is_optimized_summationr1   rhs_is_optimized_summationtuple[bool, sympy.Basic]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
                   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  
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  r  r  r   r  c                f    | t          d          j                            | d          }d|fS )Nzordered_args is NoneT)is_commutative)rR   rR  
_from_args)r  rh   rs   s     r%   make_optimizedz&_optimized_add.<locals>.make_optimized  s>     !7888
 %%l4%HHf~r'   )_is_symbols_binary_summationrB   r  )r  r  r   r  )rs   r  r  r  r
  _argsr  listr  	is_symbolrR  )r   r  r  r  sortkeyr	  r
  new_argsrH  rh   rs   s             @r%   _optimized_addr    s>     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!>(+++UYsC  F((00&99r'   c                &    ddl m}  || |          S )Nr   )BitwiseFn_bitwise_and)r  r  )rH  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  )rH  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  )rH  r  r  s      r%   r-  r-    r  r'   r  Callable[..., sympy.Basic]c                   dd l }t          | |j                  ro| j        }t	          |          dk    rUt          |d         |j                  r:|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  r6  )rs   rJ   Mulr>  r  rt   r   r   )rH  r  rs   aacoefs        r%   _floor_ceil_helperr     s    LLL!UY $Vr77a<<Jr!uek::<r!u?O< 5=A''D!u}}be|#1ek"" q!!!!a'' " u}Q2a55Lr'   c                $    ddl m}  ||           S )Nr   )
FloorToInt)r  r  )rH  r  s     r%   _sympy_floorr   2  "    777777:a==r'   c                $    ddl m}  ||           S )Nr   )
TruncToInt)r  r#  )rH  r#  s     r%   _sympy_truncr$  :  r!  r'   c                $    ddl m}  ||           S )Nr   )	CeilToInt)r  r&  )rH  r&  s     r%   _sympy_ceilr'  @  s"    6666669Q<<r'   c                ,    dd l } |j        | |          S rr   )rs   Eqr  s      r%   	_sympy_eqr*  F  r  r'   c                ,    dd l } |j        | |          S rr   )rs   Ner  s      r%   	_sympy_ner-  L  r  r'   c                ,    dd l } |j        | |          S rr   )rs   Gtr  s      r%   	_sympy_gtr0  R  r  r'   c                ,    dd l } |j        | |          S rr   )rs   Ltr  s      r%   	_sympy_ltr3  X  r  r'   c                ,    dd l } |j        | |          S rr   )rs   Ler  s      r%   	_sympy_ler6  ^  r  r'   c                ,    dd l } |j        | |          S rr   )rs   Ger  s      r%   	_sympy_ger9  d  r  r'   c                &    ddl m}  || |          S )Nr   )Min)r  r;  )rH  r  r;  s      r%   
_sympy_minr<  j  $    0000003q!99r'   c                &    ddl m}  || |          S )Nr   Max)r  r@  )rH  r  r@  s      r%   
_sympy_maxrA  p  r=  r'   fc                4    dd l } |j        || f|df          S )Nr   T)rs   	Piecewise)rH  r   rB  rs   s       r%   
_sympy_iterE  v  s'    LLL5?Aq6At9---r'   $Callable[[sympy.Basic], sympy.Basic]c                     d fd}|S )NrH  rb   r   c                b    dd l } t          |j        j        j        d           |           S )Nr   OpaqueUnaryFn_)r  r  utils_sympy	functions)rH  rO  r  s     r%   r  z_get_sym_math_fn.<locals>.fn  s:    ++++Mwu{)35Ld5L5LMMaPPPr'   rH  rb   r   rb   r#   r  s   ` r%   _get_sym_math_fnrN    s.    Q Q Q Q Q Q
 Ir'   _sympy_c                *    dd l } |j        |           S rr   )rs   Abs)rH  rs   s     r%   
_sympy_absrR    s    LLL59Q<<r'   numberr   sympy.Basic | Nonec                D    ddl m}m} | ||           S  || |          S )Nr   )RoundDecimal
RoundToInt)r  rV  rW  )rS  r   rV  rW  s       r%   _sympy_roundrX    sD     FEEEEEEEz&!!!|FG,,,r'   c                $    ddl m}  ||           S Nr   )ToFloat)r  r[  )rH  r[  s     r%   _sympy_sym_floatr\    s$    444444 71::r'   c                f    dd l }ddlm}  |j         | |j        |                     |           S rZ  )rs   r  r[  r)  r   )rH  rs   r[  s      r%   _sympy_is_integerr^    sE    LLL44444458GGKEKNN++Q///r'   )r   r   r
  r  c                    t          |           }t          | |t          t          |dz
  dd                              S )Nr6  rB   )r  sympy_is_contiguous_genericr  range)r
  r  dims      r%   sympy_is_contiguousrc    s9     e**C&ugtE#'2r<R<R7S7STTTr'   	dim_order	list[int]c                   dd l }t          |           }t          |          |k    r|j        S |j        }|j        j        }|D ]I}| |j        | |         |j        j                   |j        ||         |          z  z  }|| |         z  }Jt          |          D ]&}| |j        | |         |j        j                  z  }'|S rr   )	rs   r  rz   ry   SOner)  ra  Zero)r
  r  rd  rs   rb  r  zds           r%   r`  r`    s     LLL
e**C
9~~{JMA  %(EGK88858GAJPQ;R;RRR	U1X3ZZ : :%(EGL999r'   c                (    t          | |g d          S N)r6     r  r   r`  r
  r  s     r%   $sympy_is_channels_last_contiguous_2drq    s     'ug|||DDDr'   c                (    t          | |g d          S N)r6     rn  r  r   ro  rp  s     r%   $sympy_is_channels_last_contiguous_3dru    s     'ugGGGr'   c                   dd l }ddlm} t          |           }|t          |          k    r|j        S |j        j        }|j        }| |j        |d         d          z  }|D ]d}| |j        | |         d          ||         |k    z  z  }|dk    r| |j        ||d                   z  }||          || |         d          z  }e|S )Nr   r?  r6  )	rs   r  r@  r  rz   rg  ri  ry   r,  )	r
  r  rd  rs   r@  rb  mrf  rk  s	            r%   &sympy_is_channels_last_strides_genericrx    s     LLL000000
e**C
c)nn{A
A '!*a	 	  A * *	XUXeAh""gajAo66 66!WQZ(((A AJU1Xq)))Hr'   c                (    t          | |g d          S rm  rx  rp  s     r%   !sympy_is_channels_last_strides_2dr{  (  s     2%,,,OOOr'   c                (    t          | |g d          S rs  rz  rp  s     r%   !sympy_is_channels_last_strides_3dr}  .  s     2%///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  4  s3     ONNNNN,,>e>g>>>>r'   )r  r  r  r  r  r!  rL   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"   )rJ   rK   r   r.   r1   r   r2   r   r3   r   NotImplemented)rL   r   s     r%   r7  r7  H  s    #x   x	cd		~~c"""	cc		}}S!!!	ce		s### r'   r  0SymInt | SymFloat | SymBool | int | float | boolc                >   t          | t                    r| j        | j        S |                                 rt	          |           S |                                 rt          |           S |                                 rt          |           S t          d|            )Nzunrecognized return type )
rJ   r   r<   r}   r   r   r   r   r   rR   r  s    r%   rE  rE  W  s    !W !*"8zxxzz >ayy	
 >{{	
 >qzz<<<===r'   methodCallable[..., object]c                    t           |          S r"   )METHOD_TO_OPERATOR)r  s    r%   r   r   e  s    f%%r'   funcr@   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| |           d S  dk    r"d fd}t          t          d| |           d S  dk    r#dd fd}t          t          d| |           d S t          t          d| |           d S )N   rY  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 r#   )inspectgetfile)rG  rw  s     r%   	<setcomp>z@_make_node_magic.<locals>.uninteresting_files.<locals>.<setcomp>}  s"    ...AW_Q...r'   z<string>)
rO  _dynamo
eval_framerJ  fxexperimentalr   torch._dynamo.guardsguardsuninteresting_files)rO  modss     r%   r  z-_make_node_magic.<locals>.uninteresting_filesq  s{     M$MH!*	
 	$### /....m"66889l	
r'   r  Callable[..., SymNode]c                N     t          j                   dd fd            }|S )	NrL   r   rZ   SymNode | Noner   c                    | |           n | |          t           j        j        j        r'|| |gn| gd	fdt	          dfd           S )
Nr   r   r   rm   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 rr   )	rs   r<   idrJ   r6   r   rt   ry   rz   )r   rs   rh   s     r%   get_idzM_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.get_id  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 r#   r   rF  s     r%   rK  zc_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>.<locals>.<listcomp>  s    %@%@%@c!ff%@%@%@r'   c                <    g | ]} |           |          S r"   r#   )rG  ir  s     r%   rK  zc_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>.<locals>.<listcomp>  s5     ) ) )*+FF1II<QFF1II<Q<Q<Qr'   rn  )r  rh   	result_id	argumentsargument_ids
user_stackstack)r   r  
structuredget_user_stackget_framework_stack)r  r  r  rh   s   r%   r  zO_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>  sy    "("%f++%'ZZ%@%@i%@%@%@) ) ) )/8) ) ) '1&?&B&B!+!?!B!B
) 
) r'   )metadata_fn)r   r   r   rm   )rO  _logging	_internalGET_DTRACE_STRUCTUREDr   )rL   rZ   r  r  rh   r  r  s     @@@r%   wrapperz=_make_node_magic.<locals>.capture_provenance.<locals>.wrapper  s    }DD%~'= !$!%uII!%I( ( ( ( ( ( "(
! 
! 
! 
! 
! 
! 
!    Mr'   r"   )rL   r   rZ   r  r   r   )	functoolswraps)r  r  r  s   ` r%   capture_provenancez,_make_node_magic.<locals>.capture_provenance  sI    			(	 (	 (	 (	 (	 (	 (	 
	(	T r'   rL   r   rZ   c           
     p   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        }	|	t          d          | 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        t]          d          | j        /                    || j0        |j0        f          \  }}t          |
| j        ||||          }|S )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)r^  failed to eval %s(%s, %s)z%s %s %s -> %sz#shape_env is required for binary op)r>   r?   )1rN  rA  rB  r   r   r:   r7  rE  rJ   r   rR   r.   r  r  r  r7   r6   r  bound_sympylowerr  r5   rs   torch.utils._sympy.symbolr  r  r  UNBACKED_INTrd   r)  r,  r8  r/  r5  r2  rb  rc  rd  sym_node_logdebugalways_float_magic_methodsr3   always_bool_magic_methodsr1   r9   rK   rH   rT  r>   )rL   rZ   rA  rB  oprX  r?   r  r  r7   rV  rs   r  r  lhs_is_unbackedrhs_is_unbacked	rel_classr9   r>   rY  rh   r  r  s                        r%   binary_magic_implz+_make_node_magic.<locals>.binary_magic_impl  sr   	
 	
 	
 	
 	
 	
 	
 	

  ''#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	$()HIII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 >!DEEE^<<u}-
 

 N 3
 
 
 s   <GJ 3J7c           	        ddl m}m} t                    } |            r)t	          |  ||t          |           fi                     S | j        }| j        t          d          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          \  }}	t5          || j        |||          S )	Nr   r@  z"shape_env is required for unary opr   ceilingzfailed to eval %s(%s)z%s %s -> %srM  )rN  rA  rB  r   r7  rE  r6   r7   rH   _simplify_floor_divrb  rc  rd  r  r  r   r:   always_int_magic_methodsr2   r  r1   r  r3   r9   rT  r>   r   )rL   rA  rB  r  r6   rV  rX  r9   r>   rY  r  r  s             r%   unary_magic_implz*_make_node_magic.<locals>.unary_magic_impl0  s   	
 	
 	
 	
 	
 	
 	
 	

  ''> 	R4!4!4R)D//9KR!P!PQQQy>!CDDD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 (Cr
   	pred_node	then_node	else_nodec                   ddl m}m} | j        d }n| 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          d          | j                            t
          | j        |j        |j        f          \  }}t          || j        |j        ||          S )Nr   r@  zfailed to eval %s(%s, %s, %s)z!shape_env is required for sym_iterM  )rN  rA  rB  r:   r7  r
   rE  r6   rb  rc  rd  r7   rH   rT  r>   r   r9   )r  r  r  rA  rB  rX  rV  r>   rY  r  r  s            r%   sym_ite_implz&_make_node_magic.<locals>.sym_ite_impl[  s          
 ~% *$>$>~ ''%i00%i00%i00
    
d9>9>9>JJ   3NNN    "*"#FGGG",EE)+Y->	@QR JGQ Y()*:Hg   s   ?B 9Cr   r   rm   c           	     ^   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#          d          | j                            |t'          |	                    \  }
}t)          || j        |||
          S )Nr   r@  z!failed to eval %s(%s, ndigits=%s)zshape_env is required for roundrM  )rN  rA  rB  builtinsr   r7  rE  r6   rb  rc  rd  r2   r9   r:   r>   r   r7   rH   rT  rQ  r   )rL   r   rA  rB  r  r6   rV  r9   rX  r>  r>   rY  r  r  s               r%   
round_implz$_make_node_magic.<locals>.round_impl  s~          
 B~ --b9T??G2LbQQ   9Dd4))   ?wWWW Hy$2Iw  L>D"G$$$~%"#DEEE@@U4[[QQJGQ3'RRRRs   A )B)r   r  )r  r  r   r  )rL   r   rZ   r   r   r   r  )r  r   r  r   r  r   r   r   r"   )rL   r   r   rm   r   r   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )	r  r  method_attrr  r  r  r  r  r  s	   ``       r%   _make_node_magicr  i  s   9S>>$DCCClll
 
 
 
", , , , , ,\ } } } } } } }~ $O $O $O $O $O $O $OL *[**,<=====	9		/	 /	 /	 /	 /	 /	 /	b 	*[**L99999	7		+	S +	S +	S +	S +	S +	S +	S +	SZ 	*[**J77777*[**,=>>>>>r'   c                     d fd}t          t          d  |           d fd}t          t          j        t
                              s(t          t          j        t
                    |           d S d S )NrL   r   r
  r  r  r   c           	        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   r@  c                ,    g | ]}t          |          S r#   rD  rG  ss     r%   rK  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>  s    222qill222r'   c                ,    g | ]}t          |          S r#   rD  r  s     r%   rK  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>  s    4S4S4SaYq\\4S4S4Sr'   c                    g | ]	}|j         
S r#   r   r  s     r%   rK  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>  s    ,,,af,,,r'   c                    g | ]	}|j         
S r#   r   r  s     r%   rK  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>  s    0001000r'   r  
_indicator)rN  rA  rB  r  sysmodulesr  r7  rb  rc  rd  r:   r   endswithr2   r1   r   r7   )rL   r
  r  rA  rB  r  
size_exprsstride_exprsrV  rW  rX  r  stride_hintsr9   r  r  s                 r%   sizes_strides_implz4_make_node_sizes_strides.<locals>.sizes_strides_impl  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rY  list[object]r  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 r#   r7  r   rG  r  rH  s     r%   rK  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>  s%    ;;;++;;;r'   c                :    g | ]}t          j        |          S r#   r  r  s     r%   rK  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>	  s%    ===++===r'   r!  c                0    g | ]} j         |          S r#   sympifyrG  rH  rs   s     r%   rK  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>  s%    555!]U]1%%555r'   c                0    g | ]} j         |          S r#   r  r  s     r%   rK  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>  s%    777!]U]1%%777r'   )rs   rG   r  	itertoolschainrJ   r   rE  r  r   r1   )r
  r  r  rH  rs   r  r  s      @@r%   sizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_user  sA    		
 	
 	
 	
 	
 	
 00 	 	A!V$$  +GAFF++;;;;U;;;====W===      ===44   5555u5557777w777   r'   )rL   r   r
  r  r  r  r   r   )r
  r  r  r  r   r  )r  r   hasattrr  r  r  )r  r  r  r  s   ``  r%   _make_node_sizes_stridesr    s    0> 0> 0> 0> 0> 0> 0>d G\\\#5666
      @ 3;x(&11 CH%v/ABBBBBC Cr'   	user_typec                n   
  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|           d S  t          v r-t	          |           } || t          ||                     d S  dk    rd/
fd!} ||d  d|           d S  d"k    rd0d1
 fd&} ||d  d|           d S  }	 t          v rt                    }	 ||d|	 d|            t          v r ||d'|	 d|           d S d S )2Nr  r  0SymInt | int | SymFloat | float | SymBool | boolr   int | float | boolc                (   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)
rJ   r2   r3   r1   r   r   r<  r   rm  rR   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'   r1   c                    t          | t          t          t          f          rdS t          | t          t
          t          f          r| j                                        S dS )NTF)	rJ   r2   r3   r1   r   r   r   r   r  r  s    r%   r  z%_make_user_magic.<locals>.is_constant9  sR    a#ud+,, 	4a&(G455 	(6%%'''ur'   r   r   c                    t          | t                    r4t          | j                            t          |                               S | S )z;Implements True+True=2, which works in python but not sympy)rJ   r   r   r   r   r2   r  s    r%   promotez!_make_user_magic.<locals>.promote\  s;    !W%% 7afooc!ff55666Hr'   c                    | S r"   r#   r  s    r%   r  z!_make_user_magic.<locals>.promoted  s    Hr'   rL   rZ   tuple[Any, Any]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   )rJ   r3   rO  r   r	   )rL   rZ   f_selff_otherr  s       r%   promote2z"_make_user_magic.<locals>.promote2g  s      
 
 
$ ;D5%."9::UUEN$;<< 	/W 	/ -t,, /..U{r'   c                     |           }  |           r! t                     |                     S t           t          | j                                        S r"   )r   rE  r  r   )rL   r  r  r  r  r  s    r%   r  z*_make_user_magic.<locals>.unary_magic_impl  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)rJ   r2   r3   r1   r   r   r   r  r  r  r   r7  r   rE  r  
rL   rZ   
other_noderetr  r  r  r  r  r  s
       r%   r  z+_make_user_magic.<locals>.binary_magic_impl  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"   )rJ   r2   r3   r1   r   r   r   r  r   r7  r   rE  r  r  s
       r%   rbinary_magic_implz,_make_user_magic.<locals>.rbinary_magic_impl  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'   r  r.   attrr   symnode_implr@   c                x    t          | |           d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.
        r>  r   r   r   c                     d | D             }  t          t                    |  }t          |t                    r$t          |t                    st	          |          S |S )Nc                J    g | ] }t          |t                    r|j        n|!S r#   )rJ   r   r  )rG  r  s     r%   rK  zP_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impl.<locals>.<listcomp>  s:       ?@*Q
33:  r'   )r  r2   rJ   r1   r   )r>  rV  r  s     r%   dynamic_int_implz<_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impl  sm     DH  D %'#t$$d+C#s## 'JsD,A,A '!#&Jr'   N)r>  r   r   r   )r  r   r   )r  r  r  r  s    `  r%   setattrsz"_make_user_magic.<locals>.setattrs  sc     		4...	 	 	 	 	 	 J&677777 r'   __r
   predr   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)
r   r7  r  rJ   r   r9   rR   rE  r  r  )	r  r  r  r  r  r  r  r  r  s	          r%   sym_ite_magic_implz,_make_user_magic.<locals>.sym_ite_magic_impl  s     	I	844I	844IN**i>.I.I%%9g..y'22 $	(888$O   ;GDI{;;IyQQRRC 8''))S!!! 	r'   r   r   r   rm   c                     |           rt          j         |           |          S t           t          | j                  |                    S r"   )r  r   rE  r  r   )rL   r   r  r  r  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  )r  r  r   r1   )r  r   r   r   )rL   r   rZ   r   r   r  )rL   r   r   r   )rL   r   rZ   r   r   r   )r  r.   r  r   r  r   r   r@   )r  r   r  r   r  r   r   r   r"   )rL   r   r   rm   r   r   )r  bool_becomes_int_magic_methodsunary_magic_methodsunary_nonmagic_methodsr  r   bitwise_opsreflectable_magic_methods)r  r  r  r  r  r  origr  r  method_namer  r  r  r  r  s   `         @@@@@r%   _make_user_magicr%  &  s    CCC%Voo	K 	K 	K 	K   B ///	 	 	 	 		 	 	 	! ! ! ! ! !T< < < < < < < < < <> > > > > > > > > > >"> > > > > > > > > > > 8 8 8 8, $$$OOOO-=>>>>>	)	)	)y&))FN3CT$J$JKKKKK	9			 	 	 	 	 	 	0 	OOOO-?@@@@@	7			B 	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'   )r   r   r   r    )r   r(   r   r)   )r   r+   r   r,   )r   r.   r   r.   )r  r   r   r  )rH  rb   r  rb   r   rb   )r  r  r  rb   r   r  )FF)
r   rb   r  rb   r  r1   r  r1   r   r  )rH  rb   r  r  r   rb   rM  )rH  rb   r   rb   rB  rb   r   rb   )r  r   r   rF  r"   )rS  rb   r   rT  r   rb   )r
  r  r  r  r   rb   )r
  r  r  r  rd  re  r   rb   )rL   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@   )
__future__r   r  r  r  r  loggingmathoperatorr  r   r   typingr   r   r   rO  torch._logging.structuredr  r  r	   r
   r   r   r   r   r   r   torch._loggingr   collections.abcr   r   rs   rG   r   	getLoggerr  rc  getArtifactLoggerr  r   r   r  r1   r3   r2   HintType__all__torch.typesr   rK   r&   r   r  r   r   r   r   r   r   r   r   r   r2  r   r   r   r   r   r   r   r   r   r   r  r4  r   r   r   r0  r  r  r  math_op_namesr  sym_namepriv_sym_namer  r  r   r   r  only_bool_magic_methodsr  also_bool_magic_methodsbool_magic_methodsonly_float_magic_methodsr  r!  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r*  r-  r"  r  r   r$  r'  r*  r-  r0  r3  r6  r9  r<  rA  rE  r  current_modulerN  priv_sympy_namer  r  rR  rX  r\  r^  invertr   rc  r`  rq  ru  rx  r{  r}  r  sizes_strides_methodsr7  rE  r   r  r  itemsr  r  r%  r#   r'   r%   <module>r?     s;   " " " " " " "              



 / / / / / / / / / / / / / / / / / /  . . . . . . . . .	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 - , , , , ,  ?((((((LLL>>>>>>g!!~//*EE
 688    %<#$ K
J
J 1 0 0 0 0 0 
 4 4 4 
 4	 2 2 2 
 2	 6 6 6 
 6	 % % % 
 %   u u u u u u u up+ + + + + + + +0 0 0 0 0 0 0 0h$	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    "                              ! ! ! !N (-',	D: D: D: D: D:N' ' ' '& & & &' ' ' '	8<	8< 
8< 
:	
 + ! 
: < 	) + < ) % O m  m! (   $                                 . . . . X&     1 1D&&&O		$		B$33BObkGNOR0000o    8<- - - - -   0 0 0 0 x 
8< 	)	
 	) 	) 	) 	) 	) \ \ ! K 
8< z  z!" z#$ 
:% & #)  0  H HDd}}H%gn6F6F6FGGM((M>U U U U   4E E E EH H H H' ' ' 'TP P P PS S S S? ? ? ? )&J&J#D#D.[	 	    > > > >& & & &U? U? U? U?p
[C [C [C [C| "'')) # #LFDVT"""")//11 + +LFDVT****WK WK WK WKt  + +F((())))))***(((F6T,T,T)))VV$$$[  ***
DDr'   