
    :i$                    `	   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$g d	Z%d d
l&m'Z( d Z) G d d          Z* G d d          Z+ G d de+e,          Z-i dej.        dej/        dej0        dej1        dej1        dej2        dej3        dej4        dej5        dej6        dej7        dej8        dd d ej9        d!ej:        d"ej;        d#ej<        i d$ej=        d%ej>        d&ej?        d'ej@        d(ej@        d)ejA        d*ejB        d+ejB        d,ejC        d-ejD        d.ejE        d/ed0ed1ed2ed3ed4ejF        d5ejF        iZGh d6ZHd7 ZId8ZJeJD ][ZKd9eK ZLd:eL ZM eNe*eL eIeK                      eOeeM          eGeL<   eH0                    eL           e%P                    eL           \dhZQeHeQz  ZRh d;ZSh d<ZTdhZUeSeUz  ZVh d=ZWdd'hZXdd'd>d?ZYh d@ZZeJD ]ZKd9eK ZLeZ0                    eL           h dAZ[h dBZ\dC Z]dD Z^dE Z_dF Z`dG ZadH ZbdI ZcdJ ZddK ZedL ZfdM Zg	 dvdOZhdP ZidQ ZjdR Zki dej0        d.ejE        d$ej=        d#e`d+ead*ebdecdeid'edd(ejd)ekd4e]d5e^de_d!eed-efZldS ZmdT ZndU ZodV ZpdW ZqdX ZrdY ZsdZ Ztd[ Zud\ Zvd] Zwd^ Zxd_ Zye	jz        e!         Z{d` Z|eJD ]-ZKdaeK Z} e|eK          Z~e}xe~_        e~_!         eNe{e}e~           .[~[K[}db ZdwdcZdd Zde Zi eli d3ej        dej.        deqd%erdesd"etd eudevdendeod/edepd&ej?        d2ewd1exd0eydeeedfZeJD ]ZKd9eK ZL eOe{daeK           eeL<   [K[L[J[{dg Zdh Zdi Zdj Zdk Zdl Zdm Zdn ZeeeeeedoZdp Zdq Zdr Zds Zdt Ze                                D ]\  ZZ eee           e                                D ]\  ZZ eee           du ZeD ]TZeeSv r eee           eeWv r eee           $eeUv seeTv r eee            eee           eeYvr eee           U[[dS )x    )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)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    Q/var/www/icac/venv/lib/python3.11/site-packages/torch/fx/experimental/sym_node.py_to_symtyper    :   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 s;t	          |          t          |          u sJ d| dt	          |                        j        r4 j        j        r( |            }	||	k    sJ | 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,   r0   r#   typer    _translation_validation_enabledr+   _hintconstantfx_node)r1   r+   r,   r0   r$   r7   r8   optimized_summationr)   computed_hinttx_validation_ens   `          r   __init__zSymNode.__init__V   sE    
"$7!:	 	 	 	 	 ::''4::V9L9L+L+L+LHH H;?::H H ,M+L+L ~ $."P  !-},,,BBBBdiBBB -,,  <>>D
;C NMt~M 	 (3Gr!   r,   r   returnc                \    t          | j        || j        | j        | j        | j                  S r   )r   r3   r0   r6   r7   r8   )r1   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   )r3   r0   r6   r7   r8   r1   r@   s     r   	_value_eqzSymNode._value_eq   s]     J%+% .u|+.
ek). /. -	
r!   r   c                \    t          | j        | j        | j        | j        | j        f          S r   )hashr3   r0   r6   r7   r8   r1   s    r   _value_hashzSymNode._value_hash   s%    TZdj$-VWWWr!   c                @    | j                             | j                  S r   )r,   replacer3   rF   s    r   r+   zSymNode.expr   s    ~%%dj111r!   c                    | j         S r   r6   rF   s    r   r$   zSymNode.hint   s
    zr!   c                    | j         d uS r   rK   rF   s    r   has_hintzSymNode.has_hint   s    z%%r!   c                     ddl m}  j        d|C | j                   fd j        j        D             } j                            |          S  j                             j                  S  j        S )Nr   free_unbacked_symbolsc                B    i | ]}||v rd nj         j        |         S )i   )r,   
var_to_val).0sr1   unbacked_symbolss     r   
<dictcomp>z(SymNode.require_hint.<locals>.<dictcomp>   sE           q$444tt$.:STU:V     r!   )r*   rP   r6   r+   free_symbolsxreplacer,   	size_hint)r1   fallbackrP   replacementsrU   s   `   @r   require_hintzSymNode.require_hint   s    OOOOOO:# $9#8#C#C          !Y3      y)),777>++DI666zr!   c                F    | j         j        rt          | j                   S d S r   )r+   	is_numberr   rF   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   )sympyr.   r+   Floatr   r1   rb   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)rb   r+   truefalserd   s     r   maybe_as_boolzSymNode.maybe_as_bool   s8    9
""4Y%+%%54r!   c                    | j         t          u S r   )r0   r   rF   s    r   is_intzSymNode.is_int   s    {c!!r!   c                    | j         t          u S r   )r0   r   rF   s    r   is_floatzSymNode.is_float   s    {e##r!   c                    | j         t          u S r   )r0   r   rF   s    r   is_boolzSymNode.is_bool   s    {d""r!   c                    | j         d uo7t          | j         t                    o| j         j                                        S r   )r6   r.   r   nodeis_nested_intrF   s    r   rr   zSymNode.is_nested_int   s?     Jd" 04:v..0
--//	
r!   c                    t          |          t          u sJ dd l}t          |                    |          | j        t          |||          S Nr   )r7   r8   )r4   r   rb   r   Integerr,   r1   numrb   s      r   wrap_intzSymNode.wrap_int  sU    CyyCMM#S3PS
 
 
 	
r!   c                    t          |          t          u sJ dd l}t          |                    |          | j        t          |||          S rt   )r4   r   rb   r   rc   r,   rv   s      r   
wrap_floatzSymNode.wrap_float  sU    CyyE!!!!KKdneS3PS
 
 
 	
r!   c                    t          |          t          u sJ dd l}t          |r|j        n|j        | j        t          |||          S rt   )r4   r   rb   r   rg   rh   r,   rv   s      r   	wrap_boolzSymNode.wrap_bool  sZ    CyyD    .EJJ5;N
 
 
 	
r!   c                    | S r    rF   s    r   clonezSymNode.clone%  s    r!   c                    | j          S r   r+   rF   s    r   strzSymNode.str(  s    )~r!   c                *    |                                  S r   r   rF   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, r2   )r3   r,   r0   r6   appendr7   r8   join)r1   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   rF   s    r   _graph_reprzSymNode._graph_repr:  s    xxzzr!   c                *    |                                  S r   )_absrF   s    r   abszSymNode.abs@      yy{{r!   c                *    |                                  S r   )_posrF   s    r   poszSymNode.posC  r   r!   c                ,    |                      |          S r   )_round)r1   ndigitss     r   roundzSymNode.roundF  s    {{7###r!   c                *    |                                  S r   )_truncrF   s    r   trunczSymNode.truncI      {{}}r!   c                ,    |                      |          S r   )_addrB   s     r   addzSymNode.addL      yyr!   c                ,    |                      |          S r   )_subrB   s     r   subzSymNode.subO  r   r!   c                ,    |                      |          S r   )_mulrB   s     r   mulzSymNode.mulR  r   r!   c                ,    |                      |          S r   )_modrB   s     r   modzSymNode.modU  r   r!   c                ,    |                      |          S r   )
_float_powrB   s     r   	float_powzSymNode.float_powX  s    u%%%r!   c                ,    |                      |          S r   )_pow_by_naturalrB   s     r   pow_by_naturalzSymNode.pow_by_natural[  s    ##E***r!   c                ,    |                      |          S r   )_and_rB   s     r   and_zSymNode.and_^  s    zz%   r!   c                ,    |                      |          S r   )_or_rB   s     r   or_zSymNode.or_a  r   r!   c                ,    |                      |          S r   )_float_truedivrB   s     r   float_truedivzSymNode.float_truedivd  s    ""5)))r!   c                ,    |                      |          S r   )_int_truedivrB   s     r   int_truedivzSymNode.int_truedivg        '''r!   c                ,    |                      |          S r   )_int_floordivrB   s     r   int_floordivzSymNode.int_floordivj      !!%(((r!   c                ,    |                      |          S r   )_lshiftrB   s     r   lshiftzSymNode.lshiftm      ||E"""r!   c                ,    |                      |          S r   )_rshiftrB   s     r   rshiftzSymNode.rshiftp  r   r!   c                *    |                                  S r   )_sym_notrF   s    r   r   zSymNode.sym_nots      }}r!   c                ,    |                      |          S r   )_eqrB   s     r   eqz
SymNode.eqv      xxr!   c                ,    |                      |          S r   )_nerB   s     r   nez
SymNode.ney  r   r!   c                ,    |                      |          S r   )_gtrB   s     r   gtz
SymNode.gt|  r   r!   c                ,    |                      |          S r   )_ltrB   s     r   ltz
SymNode.lt  r   r!   c                ,    |                      |          S r   )_lerB   s     r   lez
SymNode.le  r   r!   c                ,    |                      |          S r   )_gerB   s     r   gez
SymNode.ge  r   r!   c                *    |                                  S r   )_floorrF   s    r   floorzSymNode.floor  r   r!   c                *    |                                  S r   )_is_integerrF   s    r   
is_integerzSymNode.is_integer  s    !!!r!   c                *    |                                  S r   )
_sym_floatrF   s    r   r	   zSymNode.sym_float  s       r!   c                *    |                                  S r   )_sym_intrF   s    r   sym_intzSymNode.sym_int  r   r!   c                *    |                                  S r   )_ceilrF   s    r   ceilzSymNode.ceil  s    zz||r!   c                *    |                                  S r   )_negrF   s    r   negzSymNode.neg  r   r!   c                ,    |                      |          S r   )_sym_minrB   s     r   r   zSymNode.sym_min      }}U###r!   c                ,    |                      |          S r   )_sym_maxrB   s     r   r   zSymNode.sym_max  r   r!   c                .    |                      ||          S r   )_sym_ite)r1   then_valelse_vals      r   r
   zSymNode.sym_ite  s    }}Xx000r!   c                .    |                      ||          S r   )_is_contiguousr1   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   rB   s     r   sym_orzSymNode.sym_or  r   r!   c                ,    |                      |          S r   )r   rB   s     r   sym_andzSymNode.sym_and  r   r!   c                ,    |                      |          S r   )_bitwise_andrB   s     r   bitwise_andzSymNode.bitwise_and  r   r!   c                ,    |                      |          S r   )_bitwise_orrB   s     r   
bitwise_orzSymNode.bitwise_or  s    &&&r!   c                ,    |                      |          S r   )_bitwise_xorrB   s     r   bitwise_xorzSymNode.bitwise_xor  r   r!   c                ,    |                      |          S r   )r   rB   s     r   truedivzSymNode.truediv  r   r!   c                ,    |                      |          S r   )r   rB   s     r   floordivzSymNode.floordiv  r   r!   c                ,    |                      |          S r   )r   rB   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_intrF   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rS   as     r   	<genexpr>z"SymNode.sym_sum.<locals>.<genexpr>  s(      66A9Q<<666666r!   c                    g | ]	}|j         
S r~   r   r2  s     r   
<listcomp>z#SymNode.sym_sum.<locals>.<listcomp>  s    &&&A&&&r!   c              3  $   K   | ]}|j         V  d S r   r8   r2  s     r   r4  z"SymNode.sym_sum.<locals>.<genexpr>  s$      !:!:!)!:!:!:!:!:!:r!   r8  )rb   "torch.fx.experimental.proxy_tensorr-  r.  r$  torchsym_sumtupleAddr$   r   sumr,   _create_fx_call_functionr   r   )r1   argsrb   r-  r.  exprsout
size_hintsout_hintr3  r8   _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)r1   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)rI  r   	Exceptionlogwarningr1   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)rI  r   rK  rL  rM  rN  s       r   guard_floatzSymNode.guard_float  sT     MMOO	88O 	 	 	KK8!<<<	rR  c                    |                                  }	 t          |          S # t          $ r t                              d|            w xY w)NFailed to convert to bool: %srI  r   rK  rL  rM  rN  s       r   
guard_boolzSymNode.guard_bool  sT     MMOO	77N 	 	 	KK7;;;	rR  c                    ddl m} |                                 r2 || j                  s"| j        j        s|                     ||          S | j                            | j        | d| | j                  S )Nr   rO   :r8  )	r*   rP   rM   r+   r,   +prefer_deferred_runtime_asserts_over_guardsrX  guard_or_defer_runtime_assertr8   )r1   rO  rP  rP   s       r   expect_truezSymNode.expect_true$  s    OOOOOO MMOO	/))$)44	/ NN	/ ??4...
 ~;;I$'''' < 
 
 	
r!   c                j    ddl m} |                                 sJ  |t          |                     S )Nr   )statically_known_true)r*   r_  ro   r   )r1   rO  rP  r_  s       r   r_  zSymNode.statically_known_true6  s?    OOOOOO||~~$$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)rH  rV  rW  rN  s       r   guard_size_obliviouszSymNode.guard_size_oblivious<  sZ     MMM..	77N 	 	 	KK7;;;	s	   ' 'Ac                j    ddl m} |                                 sJ  |t          |                     S )Nr   )guard_or_false)r*   rc  ro   r   )r1   rO  rP  rc  s       r   rc  zSymNode.guard_or_falseP  s>    HHHHHH||~~~gdmm,,,r!   c                j    ddl m} |                                 sJ  |t          |                     S )Nr   )guard_or_true)r*   re  ro   r   )r1   rO  rP  re  s       r   re  zSymNode.guard_or_trueV  s>    GGGGGG||~~}WT]]+++r!   c                .    |                      dd          S r'  )rX  rF   s    r   bool_zSymNode.bool_\  s    r1%%%r!   c                    dS )NTr~   rF   s    r   is_symboliczSymNode.is_symbolic_      tr!   c                    d S r   r~   rF   s    r   
nested_intzSymNode.nested_intb  rj  r!   c                    dS )NFr~   rF   s    r   is_constantzSymNode.is_constante  s    ur!   )NNF)r$   r%   )r,   r   r=   r   )r@   r   r=   r   )r=   r   r   )r=   r   )r=   r   )F)]__name__
__module____qualname____doc__r#   __annotations__r<   r?   rC   rG   propertyr+   r$   rM   r\   r_   re   ri   rk   rm   ro   rr   rx   rz   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;  rI  r)  rT  rX  r]  r_  ra  rc  re  rg  ri  rl  rn  r~   r!   r   r   r   G   s          "'&&&& !P4 P4 P4 P4 P4d
 
 
 


 
 
 
X X X X 2 2 X2   X& & &   0      " " "$ $ $# # #
 
 

 
 

 
 

 
 
      
$ 
$ 
$         $ $ $ $ $                               & & & &+ + + +! ! ! !       * * * *( ( ( () ) ) )# # # ## # # #                        " " " "! ! ! !         $ $ $ $$ $ $ $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.)rv  	TypeErrorsuper__new__)clsr@  	__class__s     r   rz  z_DynamicScalar.__new__j  s;    .  WXXXuwws*T****r!   )ro  rp  rq  rz  __classcell__r|  s   @r   rv  rv  i  s8        + + + + + + + + +r!   rv  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J t                                          | t          |                    }|S r   )r.   r   ry  rz  )r{  valobjr|  s      r   rz  zDynamicInt.__new__|  s;    #s#####ggooc3s88,,
r!   c                    d| j          dS )NzDynamicInt(r2   )realrF   s    r   r   zDynamicInt.__repr__  s    )TY))))r!   c                0    t          | j        |z            S r   r   r  rB   s     r   __floordiv__zDynamicInt.__floordiv__  s    $)u,---r!   c                0    t          || j        z            S r   r  rB   s     r   __rfloordiv__zDynamicInt.__rfloordiv__  s    %49,---r!   )	ro  rp  rq  rr  rz  r   r  r  r}  r~  s   @r   r   r   p  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)r1   names    r   fnz_get_sym_node_fn.<locals>.fn  s!    ,wt^T^^,,...r!   r~   r  r  s   ` r   _get_sym_node_fnr    s#    / / / / / Ir!   )sqrtcoscoshsinsinhtantanhasinacosatanlog2sym_rE  >   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  )r3  br  s      r   _sympy_float_truedivr    &    999999<1r!   c                &    ddl m}  || |          S )Nr   )
IntTrueDiv)r  r  )r3  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  )r3  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)r3  r  r  r  s       r   
_sympy_modr  !  sO    ;;;;;;;; A, s1ayyyAr!   c                &    ddl m}  || |          S )Nr   )PowByNatural)r  r  )r3  r  r  s      r   _sympy_pow_by_naturalr  *  r  r!   c                &    ddl m}  || |          S )Nr   )FloatPow)r  r  )r3  r  r  s      r   _sympy_float_powr  0  r  r!   c                6    dd l }|                    | |          S ra   )rb   Andr3  r  rb   s      r   
_sympy_andr  6  s    LLL99Q??r!   c                6    dd l }|                    | |          S ra   )rb   Orr  s      r   	_sympy_orr  <      LLL88Aq>>r!   c                &    ddl m}  || |          S )Nr   )LShift)r  r  )r3  r  r  s      r   _sympy_lshiftr  B  $    3333336!Q<<r!   c                &    ddl m}  || |          S )Nr   )RShift)r  r  )r3  r  r  s      r   _sympy_rshiftr  H  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  N  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                .    | J  j         | ddi}d|fS )NrI  FT)r=  )r  resultrb   s     r   make_optimizedz&_optimized_add.<locals>.make_optimized  s/    '''L9599f~r!   )_is_symbols_binary_summationr  r  )rb   r  r  r  r  _argsr  listr  	is_symbolr=  )lhsrhslhs_is_optimized_summationrhs_is_optimized_summationsortkeyr  r  new_argsr3  r  rb   s             @r   _optimized_addr  p  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  )r3  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  )r3  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  )r3  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#  )rb   r.   Mulr@  r  rc   r   ru   )r3  r  rb   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  )r3  r  s     r   _sympy_floorr    "    777777:a==r!   c                $    ddl m}  ||           S )Nr   )
TruncToInt)r  r  )r3  r  s     r   _sympy_truncr     r  r!   c                $    ddl m}  ||           S )Nr   )	CeilToInt)r  r  )r3  r  s     r   _sympy_ceilr    s"    6666669Q<<r!   c                6    dd l }|                    | |          S ra   )rb   Eqr  s      r   	_sympy_eqr    r  r!   c                6    dd l }|                    | |          S ra   )rb   Ner  s      r   	_sympy_ner	    r  r!   c                6    dd l }|                    | |          S ra   )rb   Gtr  s      r   	_sympy_gtr    r  r!   c                6    dd l }|                    | |          S ra   )rb   Ltr  s      r   	_sympy_ltr    r  r!   c                6    dd l }|                    | |          S ra   )rb   Ler  s      r   	_sympy_ler    r  r!   c                6    dd l }|                    | |          S ra   )rb   Ger  s      r   	_sympy_ger    r  r!   c                &    ddl m}  || |          S )Nr   )Min)r  r  )r3  r  r  s      r   
_sympy_minr    $    0000003q!99r!   c                &    ddl m}  || |          S )Nr   Max)r  r  )r3  r  r  s      r   
_sympy_maxr  %  r  r!   c                >    dd l }|                    || f|df          S )Nr   T)rb   	Piecewise)r3  r   frb   s       r   
_sympy_iter!  +  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)r3  r:  r  s     r   r  z_get_sym_math_fn.<locals>.fn5  s:    ++++Mwu{)35Ld5L5LMMaPPPr!   r~   r  s   ` r   _get_sym_math_fnr(  4  s(    Q Q Q Q Q
 Ir!   _sympy_c                4    dd l }|                    |           S ra   )rb   Abs)r3  rb   s     r   
_sympy_absr,  F  s    LLL99Q<<r!   c                D    ddl m}m} | ||           S  || |          S )Nr   )RoundDecimal
RoundToInt)r  r.  r/  )numberr   r.  r/  s       r   _sympy_roundr1  L  sA    EEEEEEEEz&!!!|FG,,,r!   c                $    ddl m}  ||           S Nr   )ToFloat)r  r4  )r3  r4  s     r   _sympy_sym_floatr5  U  s$    444444 71::r!   c                z    dd l }ddlm} |                     ||                    |                     |           S r3  )rb   r  r4  r  r   )r3  rb   r4  s      r   _sympy_is_integerr7  ]  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_contiguousr<    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 ra   )	rb   r  rh   rg   SOner  r:  Zero)r   r   	dim_orderrb   r;  r   zds           r   r9  r9    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   r9  r   r   s     r   $sympy_is_channels_last_contiguous_2drI    s    &ug|||DDDr!   c                (    t          | |g d          S N)r#     rF  r  r   rG  rH  s     r   $sympy_is_channels_last_contiguous_3drM    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#  )	rb   r  r  r  rh   r>  r@  rg   r  )	r   r   rA  rb   r  r;  mrQ  rC  s	            r   &sympy_is_channels_last_strides_genericrP    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 rE  rP  rH  s     r   !sympy_is_channels_last_strides_2drS    s    1%,,,OOOr!   c                (    t          | |g d          S rK  rR  rH  s     r   !sympy_is_channels_last_strides_3drU    s    1%///RRRr!   c                "    ddl m}  |g | |R  S )Nr   )!IsNonOverlappingAndDenseIndicator)r  rW  )r   r   rW  s      r   -_sympy_is_non_overlapping_and_dense_indicatorrX    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   )r.   r/   rq   r4   r   r|   r   rx   r   rz   NotImplemented)r1   rw   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 )
r.   r   r7   rk   r   rm   r   ro   r   AssertionErrorr  s    r   r1  r1    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   rE  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)rS   rO  s     r   	<setcomp>z@_make_node_magic.<locals>.uninteresting_files.<locals>.<setcomp>   s"    ...AW_Q...r!   z<string>)
r:  _dynamo
eval_framer%  fxexperimentalr   torch._dynamo.guardsguardsuninteresting_files)r:  modss     r   rn  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 ra   )	rb   r7   idr.   r+   ru   rc   rg   rh   )r   rb   r  s     r   get_idzM_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.get_id2  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   r2  s     r   r6  zc_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>.<locals>.<listcomp>F  s    %@%@%@c!ff%@%@%@r!   c                <    g | ]} |           |          S r   r~   )rS   iru  s     r   r6  zc_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>.<locals>.<listcomp>G  s5     ) ) )*+FF1II<QFF1II<Q<Q<Qr!   rF  )r_  r  	result_id	argumentsargument_ids
user_stackstack)r   rt  
structuredget_user_stackget_framework_stack)r|  ru  r_  r  s   r   r  zO_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>B  sy    "("%f++%'ZZ%@%@i%@%@%@) ) ) )/8) ) ) '1&?&B&B!+!?!B!B
) 
) r!   )metadata_fn)r=   rr  )r:  _logging	_internalGET_DTRACE_STRUCTUREDr   )r1   r@   r|  ru  r  r  r_  s     @@@r   wrapperz=_make_node_magic.<locals>.capture_provenance.<locals>.wrapper&  s    }DD%~'= !$!%uII!%I( ( ( ( ( ( "(
! 
! 
! 
! 
! 
! 
!    Mr!   r   )	functoolswraps)r  r  r_  s   ` r   capture_provenancez,_make_node_magic.<locals>.capture_provenance%  sD    			(	 (	 (	 (	 (	 (	 
	(	T r!   c           
     .   ddl m}m} t                    }d }| j        |j         || j        |j                  } |            r7t          |  ||t          |           t          |          fi                     S t          |t                    sJ d}	 dk    rddl	m
}m} | j        }	| j        j        s#|	                    | j                  j        dk    rF|j        j        s#|	                    |j                  j        dk    r || j        |j                  }
n] || j        |j                  }
nFdk    r*t#          | j        |j        | j        |j                  \  }}
n | j        |j                  }
n6# t&          $ r) t(                              d| j        |j                    w xY wt,                              d| j        |j        |
           t0          v rt2          }n<t4          v rt6          }n+| j        t2          u s|j        t2          u rt2          }n| j        }|"| t          |t:                    s ||          }| j                            || j        |j        f          \  }}t          |
| j        ||||	          }|S )
Nr   r,  Fr   r  r   failed to eval %s(%s, %s)z%s %s %s -> %s)r8   r9   ) r9  r-  r.  r   r$   r$  r1  r.   r   r  r  r  r,   r+   r  bound_sympylowerr  r#   rK  rL  rM  sym_node_logdebugalways_float_magic_methodsr   always_bool_magic_methodsr   r0   r/   r?  r8   )r1   r@   r-  r.  oprD  r9   r  r  r,   rB  r0   r8   rE  r  funcr_  s                  r   binary_magic_implz+_make_node_magic.<locals>.binary_magic_implS  s
   	
 	
 	
 	
 	
 	
 	
 	

  ''9 UZ%;r$)UZ00H> 	))"y	%@P@P.QSUVV   %)))))#	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 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   C'F 3F5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
||           d }| j         || j                  }t          v rt           }n)t"          v rt$          }nt&          v rt(          }n| j        }| j                            || j        f          \  }}	t1          || j        |||          S )Nr   r,  r   ceilingzfailed to eval %s(%s)z%s %s -> %sr8  )r9  r-  r.  r   r$  r1  r+   r,   _simplify_floor_divrK  rL  rM  r  r  r$   always_int_magic_methodsr   r  r   r  r   r0   r?  r8   r   )r1   r-  r.  r  r+   rB  rD  r0   r8   rE  r  r_  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   r,  zfailed to eval %s(%s, %s, %s)r8  )r9  r-  r.  r$   r$  r
   r1  r+   rK  rL  rM  r,   r?  r8   r   r0   )	pred_node	then_node	else_noder-  r.  rD  rB  r8   rE  r  r_  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   r,  z!failed to eval %s(%s, ndigits=%s)r8  )r9  r-  r.  builtinsr   r$  r1  r+   rK  rL  rM  r   r0   r$   r8   r   r,   r?  r<  r   )r1   r   r-  r.  r  r+   rB  r0   rD  r@  r8   rE  r  r_  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=   rb  r   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )	r_  r  method_attrrn  r  r  r  r  r  s	   ``       r   _make_node_magicr    s   9S>>$DCCClll
 
 
 
", , , , ,\ X X X X X Xt "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   r,  c                ,    g | ]}t          |          S r~   r0  rS   rT   s     r   r6  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>?  s    222qill222r!   c                ,    g | ]}t          |          S r~   r0  r  s     r   r6  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>?  s    4S4S4SaYq\\4S4S4Sr!   c                    g | ]	}|j         
S r~   r   r  s     r   r6  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>C  s    ,,,af,,,r!   c                    g | ]	}|j         
S r~   r   r  s     r   r6  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>D  s    0001000r!   r  
_indicator)r9  r-  r.  r  sysmodulesro  r$  rK  rL  rM  r$   r   endswithr   r   r   r,   )r1   r   r   r-  r.  r  
size_exprsstride_exprsrB  rC  rD  rT   stride_hintsr0   r  r_  s                 r   sizes_strides_implz4_make_node_sizes_strides.<locals>.sizes_strides_impl3  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rE  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~   r$  rq   rS   r  r3  s     r   r6  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>s  s%    ;;;++;;;r!   c                :    g | ]}t          j        |          S r~   r  r  s     r   r6  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>t  s%    ===++===r!   r  c                :    g | ]}                     |          S r~   sympifyrS   r3  rb   s     r   r6  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>}  s%    555!U]]1%%555r!   c                :    g | ]}                     |          S r~   r  r  s     r   r6  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>~  s%    777!U]]1%%777r!   )rb   r*   r  	itertoolschainr.   r   r1  r  rq   r   )r   r   r  r3  rb   r  r_  s      @@r   sizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_userh  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  ro  )r_  r  r  r  s   ``  r   _make_node_sizes_stridesr  0  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)
r.   r   r   r   r   rq   r)  r   rX  r\  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)	r.   r   r   r   r   r   r   rq   rn  r  s    r   rn  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)r.   r   r   rq   rx   r   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>.promote  s    Hr!   c                    dvr| |fS t          | t          t          j        f          }t          |t          t          j        f          }|s|r,|st          j        |           } |st          j        |          }| |fS )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r.   r   r:  r   r	   )r1   r@   f_selff_otherr_  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   r1  r  rq   )r1   r  rn  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)r.   r   r   r   r   r   r   rZ  r  r  r   r$  rq   r1  r  
r1   r@   
other_noderetr  rn  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   )r.   r   r   r   r   r   r   rZ  r   r$  rq   r1  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!   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 r~   )r.   r   r  )rS   r  s     r   r6  zP_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impl.<locals>.<listcomp>)  s-    MMM1jJ77>AFFQMMMr!   )r  r   r.   r   r   )r@  rB  attrs     r   dynamic_int_implz<_make_user_magic.<locals>.setattrs.<locals>.dynamic_int_impl(  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>.setattrs  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J t           t          | j                   ||                    }|j                                         r |          n|S r   )	rq   r$  rZ  r.   r   r0   r1  r  rn  )	predr   r   r  r  r  r  r  r  s	          r   sym_ite_magic_implz,_make_user_magic.<locals>.sym_ite_magic_impl9  s    	I	844I	844IN**i>.I.I%%9g..y'22 $	(88888;GDI{;;IyQQRRC(+(<(<(>(>G<<$$$CGr!   r   c                     |           rt          j         |           |          S t           t          | j                  |                    S r   )r  r   r1  r  rq   )r1   r   r  rn  r_  s     r   round_magic_implz*_make_user_magic.<locals>.round_magic_implJ  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)r_  r  r  r  r  r  origr  r  method_namer  rn  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  re  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   	getLoggerro  rL  getArtifactLoggerr  __all__torch.typesr   r/   r    r   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  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  rq  r,  r1  r5  r7  invertr   r<  r9  rI  rM  rP  rS  rU  rX  sizes_strides_methodsr$  r1  r   r  r  itemsr_  r  r  r~   r!   r   <module>r     s|   # " " " " "              



 / / / / / / / / 1 1 1 1 1 1 1 1 1 1  . . . . . . . . .	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 - , , , , ,  ?>>>>>>g!!~//*EE K
J
J 1 0 0 0 0 0  _ _ _ _ _ _ _ _D+ + + + + + + +. . . . . . . .8$	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<: <: <: <:~' ' '& & &' ' '	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.[	 	   > > >& & &a? a? a?H	TC TC TCn "'')) # #LFDVT"""")//11 + +LFDVT****IK IK IKX  + +F((())))))***(((F6T,T,T)))VV$$$[  ***
DDr!   