
    קg^                     V   d 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mZ ddlZddlmZmZmZmZmZmZmZ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%i 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j.        dej/        dej0        dd dej1        dej2        dej3        dej4        dej5        ej6        ej7        ej8        ej9        ej9        ej:        ej;        ej<        eeeeeej=        ej=        dZ>h d Z?d! Z@d"ZAeAD ][ZBd#eB ZCd$eC ZD eEe%eC e@eB                      eFeeD          e>eC<   e?(                    eC           e G                    eC           \dhZHe?eHz  ZIh d%ZJh d&ZKdhZLeJeLz  ZMh d'ZNdd(hZOh d)ZPeAD ]ZBd#eB ZCeP(                    eC           h d*ZQh d+ZRd, ZSd- ZTd. ZUd/ ZVd0 ZWd1 ZXd2 ZYd3 ZZd4 Z[d5 Z\ej(        ej<        ej5        eVeWeXeYeZeSeTeUe[e\d6Z]d7 Z^d8 Z_d9 Z`d: Zad; Zbd< Zcd= Zdd> Zed? Zfd@ ZgdA ZhdB ZidC Zjejk        e         ZldD ZmeAD ]-ZBdEeB Zn emeB          Zoenxeo_p        eo_         eEeleneo           .[o[B[ndF ZqdbdGZrdH ZsdI Zti e]i dJeju        dej&        debdKecdeddeedefdegde_de`dLesdeadMej7        dNehdOeidPejdeqeretdQZveAD ]ZBd#eB ZC eFeldEeB           eveC<   [B[C[A[ldR ZwdS ZxdT ZydU ZzdV Z{dW Z|dX Z}dY Z~eweyeze|e}e~dZZej        ej        d[Zd\ Zd] Zd^ Zd_ Zd` Zev                                D ]\  ZZ eee           e                                D ]\  ZZ eee           da Zev                                D ]S\  ZZeeJv r eee           eeNv r eee           'eeLv seeKv r eee            eee            eee           T[[dS )cae  
This file does three things:
- Contains the definition of SymNode
- Installs all the magic methods into SymBool, SymFloat, SymFloat at import time
- Does not depend on sympy at import time

As this file is imported from within torch/__init__.py we do not want it to depend on SymPy
to avoid having to load SymPy at import time, as doing so is *very* slow.
    N)	lru_cacheupdate_wrapper)OptionalTypeTYPE_CHECKINGUnion)	sym_floatsym_itesym_maxsym_minsym_notSymBoolSymFloatSymInt)ShapeEnvsym_node)SymNodemethod_to_operatormagic_methods)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    Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/fx/experimental/sym_node.py_to_symtyper   1   s1    DyyCxxEzzH    c                      e Zd ZdZ	 	 dWdeeeeef                  fdZ	dXdZ
d	d defd
ZdefdZed             Zed             Zd ZdYd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de j        fdZ!dZdZ"dZd Z#dYdZd!Z$dZd"Z%dZd#Z&dZd$Z'dZd%Z(dZd&Z)dZd'Z*dZd(Z+dZd)Z,dZd*Z-dZd+Z.dZd,Z/dZd-Z0dZd.Z1dZd/Z2dZd0Z3dZd1Z4dZd2Z5dZd3Z6dZd4Z7dZd5Z8dZd6Z9dZd7Z:dZd8Z;dZd9Z<dZd:Z=dZd;Z>dZd<Z?dZd=Z@dZd>ZAdZd?ZBdZd@ZCdZdAZDdZdBZEdZdCZFdZdDZGdZdEZHdF ZIdG ZJdH ZKdZdIZLdJ ZMdK ZNdL ZOdM ZPdN ZQdO ZRdP ZSdQ ZTdR ZUdS ZVdT ZWdU ZXdV ZYd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.
    Nhintc                     | _         | _        | _         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   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_hintl   s    SSSSSS %$TY// 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)   r-   typer   _translation_validation_enabledr(   _hintconstantfx_node)
r.   r(   r)   r-   r!   r4   r5   r&   computed_hinttx_validation_ens
   `         r   __init__zSymNode.__init__D   s?    
":	 	 	 	 	 ::''4::V9L9L+L+L+LHH H;?::H H ,M+L+L ~ B$."P B !-M)))AAAATYAAA *))  <>>D
;C NMt~M 	 (3Gr   r)   r   returnc                 \    t          | j        || j        | j        | j        | j                  S r   )r   r0   r-   r3   r4   r5   )r.   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   )r0   r-   r3   r4   r5   r.   r<   s     r   	_value_eqzSymNode._value_eq   s]     J%+% .u|+.
ek). /. -	
r   c                 \    t          | j        | j        | j        | j        | j        f          S r   )hashr0   r-   r3   r4   r5   r.   s    r   _value_hashzSymNode._value_hash   s%    TZdj$-VWWWr   c                 @    | j                             | j                  S r   )r)   replacer0   rB   s    r   r(   zSymNode.expr   s    ~%%dj111r   c                     | j         S r   r3   rB   s    r   r!   zSymNode.hint   s
    zr   c                     | j         d uS r   rG   rB   s    r   has_hintzSymNode.has_hint   s    z%%r   c                 d    | j         #||S | j                            | j                  S | j         S r   )r3   r)   	size_hintr(   )r.   fallbacks     r   require_hintzSymNode.require_hint   s5    :#>++DI666zr   c                 F    | j         j        rt          | j                   S d S r   )r(   	is_numberr   rB   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   r.   rS   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)rS   r(   truefalserU   s     r   maybe_as_boolzSymNode.maybe_as_bool   s8    9
""4Y%+%%54r   c                     | j         t          u S r   )r-   r   rB   s    r   is_intzSymNode.is_int   s    {c!!r   c                     | j         t          u S r   )r-   r   rB   s    r   is_floatzSymNode.is_float   s    {e##r   c                     | j         t          u S r   )r-   r   rB   s    r   is_boolzSymNode.is_bool   s    {d""r   c                     | j         d uo7t          | j         t                    o| j         j                                        S r   )r3   r+   r   nodeis_nested_intrB   s    r   rc   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   )r4   r5   )r1   r   rS   r   Integerr)   r.   numrS   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 re   )r1   r   rS   r   rT   r)   rg   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 re   )r1   r   rS   r   rX   rY   r)   rg   s      r   	wrap_boolzSymNode.wrap_bool   sZ    CyyD    .EJJ5;N
 
 
 	
r   c                     | S r    rB   s    r   clonezSymNode.clone  s    r   c                     | j          S r   r(   rB   s    r   strzSymNode.str  s    )~r   c                 *    |                                  S r   rs   rB   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, r/   )r0   r)   r-   r3   appendr4   r5   join)r.   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   c                 *    |                                  S r   ru   rB   s    r   _graph_reprzSymNode._graph_repr  s    xxzzr   c                 *    |                                  S r   )_absrB   s    r   abszSymNode.abs      yy{{r   c                 *    |                                  S r   )_posrB   s    r   poszSymNode.pos  r   r   c                 ,    |                      |          S r   )_round)r.   ndigitss     r   roundzSymNode.round"  s    {{7###r   c                 *    |                                  S r   )_truncrB   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.sub+  r   r   c                 ,    |                      |          S r   )_mulr>   s     r   mulzSymNode.mul.  r   r   c                 ,    |                      |          S r   )_modr>   s     r   modzSymNode.mod1  r   r   c                 ,    |                      |          S r   )
_float_powr>   s     r   	float_powzSymNode.float_pow4  s    u%%%r   c                 ,    |                      |          S r   )_pow_by_naturalr>   s     r   pow_by_naturalzSymNode.pow_by_natural7  s    ##E***r   c                 ,    |                      |          S r   )_and_r>   s     r   and_zSymNode.and_:  s    zz%   r   c                 ,    |                      |          S r   )_or_r>   s     r   or_zSymNode.or_=  r   r   c                 ,    |                      |          S r   )_float_truedivr>   s     r   float_truedivzSymNode.float_truediv@  s    ""5)))r   c                 ,    |                      |          S r   )_int_truedivr>   s     r   int_truedivzSymNode.int_truedivC        '''r   c                 ,    |                      |          S r   )_int_floordivr>   s     r   int_floordivzSymNode.int_floordivF      !!%(((r   c                 ,    |                      |          S r   )_lshiftr>   s     r   lshiftzSymNode.lshiftI      ||E"""r   c                 ,    |                      |          S r   )_rshiftr>   s     r   rshiftzSymNode.rshiftL  r   r   c                 *    |                                  S r   )_sym_notrB   s    r   r   zSymNode.sym_notO      }}r   c                 ,    |                      |          S r   )_eqr>   s     r   eqz
SymNode.eqR      xxr   c                 ,    |                      |          S r   )_ner>   s     r   nez
SymNode.neU  r   r   c                 ,    |                      |          S r   )_gtr>   s     r   gtz
SymNode.gtX  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.gea  r   r   c                 *    |                                  S r   )_floorrB   s    r   floorzSymNode.floord  r   r   c                 *    |                                  S r   )_is_integerrB   s    r   
is_integerzSymNode.is_integerg  s    !!!r   c                 *    |                                  S r   )
_sym_floatrB   s    r   r	   zSymNode.sym_floatj  s       r   c                 *    |                                  S r   )_sym_intrB   s    r   sym_intzSymNode.sym_intm  r   r   c                 *    |                                  S r   )_ceilrB   s    r   ceilzSymNode.ceilp  s    zz||r   c                 *    |                                  S r   )_negrB   s    r   negzSymNode.negs  r   r   c                 ,    |                      |          S r   )_sym_minr>   s     r   r   zSymNode.sym_minv      }}U###r   c                 ,    |                      |          S r   )_sym_maxr>   s     r   r   zSymNode.sym_maxy  r   r   c                 .    |                      ||          S r   )_sym_ite)r.   then_valelse_vals      r   r
   zSymNode.sym_ite|  s    }}Xx000r   c                 .    |                      ||          S r   )_is_contiguousr.   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   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   )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  s2    ::5'JJMMgVZ\]N^N^___r   c                 .    |                      dd          S N r   )	guard_intrB   s    r   int_zSymNode.int_  s    ~~b!$$$r   c                     | j                             | j        | j        | j                  }	 t          |          S # t          $ r t                              d|            w xY w)Nr5   zFailed to convert to int: %s)	r)   evaluate_exprr(   r!   r5   r   	Exceptionlogwarningr.   fileliners       r   r  zSymNode.guard_int  si     N((DIt|(TT	q66M 	 	 	KK6:::		   = 'A$c                     | j                             | j        | j        | j                  }	 t          |          S # t          $ r t                              d|            w xY w)Nr  zFailed to convert to float: %s)	r)   r  r(   r!   r5   r   r  r  r  r  s       r   guard_floatzSymNode.guard_float  si     N((DIt|(TT	88O 	 	 	KK8!<<<	r  c                     | j                             | j        | j        | j                  }	 t          |          S # t          $ r t                              d|            w xY w)Nr  Failed to convert to bool: %s	r)   r  r(   r!   r5   r   r  r  r  r  s       r   
guard_boolzSymNode.guard_bool  si     N((DIt|(TT	77N 	 	 	KK7;;;	r  c                     ddl m} |                                 r2 || j                  s"| j        j        s|                     ||          S | j                            | j        | d| | j                  S )Nr   r$   :r  )	r'   r%   rI   r(   r)   +prefer_deferred_runtime_asserts_over_guardsr"  defer_runtime_assertr5   )r.   r  r  r%   s       r   expect_truezSymNode.expect_true  s    OOOOOO MMOO	/))$)44	/ NN	/ ??4...
 ~22I$'''' 3 
 
 	
r   c                     ddl m} |                     |                     d                    }|                    ||          }|r,|                                 s |t          |                      |S )Nr   )_advise_is_size)r'   r)  r   ri   r'  rI   r   )r.   r  r  r)  br  s         r   expect_sizezSymNode.expect_size  sx    IIIIIIGGDMM!$$%%MM$%%
  	*T]]__ 	*OF4LL)))r   c                     | j                             | j        | j        | j        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)r5   size_obliviousr   r!  r  s       r   guard_size_obliviouszSymNode.guard_size_oblivious  sr     N((Ity$,t ) 
 
	77N 	 	 	KK7;;;	s	   > 'A%c                 .    |                      dd          S r  )r"  rB   s    r   bool_zSymNode.bool_  s    r1%%%r   c                     dS )NTro   rB   s    r   is_symboliczSymNode.is_symbolic      tr   c                     d S r   ro   rB   s    r   
nested_intzSymNode.nested_int  r3  r   c                     dS )NFro   rB   s    r   is_constantzSymNode.is_constant  s    ur   )NN)r)   r   r9   r   r   )r9   r   )Z__name__
__module____qualname____doc__r   r   r   r   r   r8   r;   r?   rC   propertyr(   r!   rI   rM   rP   rV   rZ   r\   r^   r`   rc   ri   rk   rm   rp   rs   rv   r{   builtinsr}   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  r5  r7  ro   r   r   r   r   >   s+         N4 N4
 uS%-./N4 N4 N4 N4`
 
 
 


y 
T 
 
 
 
XS X X X X 2 2 X2   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       ) ) )( ( ( (% % %` ` `% % %      
 
 
$    ,& & &        r   r   r   r   r   andr   r   r   r   r   r   r   r   c                 *    |                                  S r   )r   xs    r   <lambda>rB    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	   c                       fd}|S )Nc                 :     t          | d                       S )N_sym_)getattr)r.   names    r   fnz_get_sym_node_fn.<locals>.fn>  s!    ,wt^T^^,,...r   ro   rH  rI  s   ` r   _get_sym_node_fnrK  =  s#    / / / / / Ir   )
sqrtcoscoshsinsinhtantanhasinacosatansym__>   rC  r>  r
   r   >   r   r   r   >   r   r   r   rC  >   r   r	   r   r   >   r   r   r   r   >   r   r   r   r   r   r   rC  r>  r   r   r  c                 &    ddl m}  || |          S )Nr   )FloatTrueDiv)torch.utils._sympy.functionsrY  )ar*  rY  s      r   _sympy_float_truedivr\    &    999999<1r   c                 &    ddl m}  || |          S )Nr   )
IntTrueDiv)rZ  r_  )r[  r*  r_  s      r   _sympy_int_truedivr`    s&    777777:ar   c                 &    ddl m}  || |          S )Nr   )FloorDiv)rZ  rb  )r[  r*  rb  s      r   _sympy_floordivrc    $    5555558Aq>>r   c                 ^    ddl m}m} | j        r|j        r || |          S  || |          S )Nr   Mod	PythonMod)rZ  rg  rh  is_nonnegative)r[  r*  rg  rh  s       r   
_sympy_modrj    sO    ;;;;;;;; A, s1ayyyAr   c                 &    ddl m}  || |          S )Nr   )PowByNatural)rZ  rl  )r[  r*  rl  s      r   _sympy_pow_by_naturalrm    r]  r   c                 &    ddl m}  || |          S )Nr   )FloatPow)rZ  ro  )r[  r*  ro  s      r   _sympy_float_powrp    rd  r   c                 6    dd l }|                    | |          S rR   )rS   Andr[  r*  rS   s      r   
_sympy_andrt    s    LLL99Q??r   c                 6    dd l }|                    | |          S rR   )rS   Orrs  s      r   	_sympy_orrw        LLL88Aq>>r   c                 &    ddl m}  || |          S )Nr   )LShift)rZ  rz  )r[  r*  rz  s      r   _sympy_lshiftr{    $    3333336!Q<<r   c                 &    ddl m}  || |          S )Nr   )RShift)rZ  r~  )r[  r*  r~  s      r   _sympy_rshiftr    r|  r   )r   r   r   r   r   r   r>  rC  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
  )rS   r+   MulargslenrT   r   rf   )r[  rI  rS   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)rZ  r  )r[  r  s     r   _sympy_floorr    "    777777:a==r   c                 $    ddl m}  ||           S )Nr   )
TruncToInt)rZ  r  )r[  r  s     r   _sympy_truncr    r  r   c                 $    ddl m}  ||           S )Nr   )	CeilToInt)rZ  r  )r[  r  s     r   _sympy_ceilr    s"    6666669Q<<r   c                 6    dd l }|                    | |          S rR   )rS   Eqrs  s      r   	_sympy_eqr    rx  r   c                 6    dd l }|                    | |          S rR   )rS   Ners  s      r   	_sympy_ner    rx  r   c                 6    dd l }|                    | |          S rR   )rS   Gtrs  s      r   	_sympy_gtr    rx  r   c                 6    dd l }|                    | |          S rR   )rS   Ltrs  s      r   	_sympy_ltr    rx  r   c                 6    dd l }|                    | |          S rR   )rS   Lers  s      r   	_sympy_ler    rx  r   c                 6    dd l }|                    | |          S rR   )rS   Gers  s      r   	_sympy_ger    rx  r   c                 &    ddl m}  || |          S )Nr   )Min)rZ  r  )r[  r*  r  s      r   
_sympy_minr  #  $    0000003q!99r   c                 &    ddl m}  || |          S )Nr   Max)rZ  r  )r[  r*  r  s      r   
_sympy_maxr  )  r  r   c                 >    dd l }|                    || f|df          S )Nr   T)rS   	Piecewise)r[  r   frS   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_)rZ  rG  utils_sympy	functions)r[  torchrH  s     r   rI  z_get_sym_math_fn.<locals>.fn9  s:    ++++Mwu{)35Ld5L5LMMaPPPr   ro   rJ  s   ` r   _get_sym_math_fnr  8  s(    Q Q Q Q Q
 Ir   _sympy_c                 4    dd l }|                    |           S rR   )rS   Abs)r[  rS   s     r   
_sympy_absr  J  s    LLL99Q<<r   c                 D    ddl m}m} | ||           S  || |          S )Nr   )RoundDecimal
RoundToInt)rZ  r  r  )numberr   r  r  s       r   _sympy_roundr  P  sA    EEEEEEEEz&!!!|FG,,,r   c                 $    ddl m}  ||           S Nr   )ToFloat)rZ  r  )r[  r  s     r   _sympy_sym_floatr  Y  s$    444444 71::r   c                 z    dd l }ddlm} |                     ||                    |                     |           S r  )rS   rZ  r  r  r   )r[  rS   r  s      r   _sympy_is_integerr  a  sE    LLL44444488GGEKKNN++Q///r   r   r   r	   r   r   r   r
   )r   r   c                     t          |           }t          | |t          t          |dz
  dd                              S )Nr
  )r  sympy_is_contiguous_genericlist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        }|                    d          }|D ]\}||                    | |         |                    d                    |                    ||         |          z  z  }|| |         z  }]t          |          D ]4}||                    | |         |                    d                    z  }5|S )Nr   r
  )rS   r  rY   rX   rf   r  r  )r   r   	dim_orderrS   r  r   zds           r   r  r    s    LLL
e**C
9~~{JMaA  %(EMM!,<,<==QRUV@W@WWW	U1X3ZZ > >%(EMM!,<,<===r   c                 (    t          | |g d          S N)r
     r  r   r  r   r   s     r   $sympy_is_channels_last_contiguous_2dr    s    &ug|||DDDr   c                 (    t          | |g d          S N)r
     r  r  r   r  r  s     r   $sympy_is_channels_last_contiguous_3dr    s    &ugGGGr   c                    dd l }ddlm} t          |           }|t          |          k    r|j        S |                    d          }|j        }||                    |d         d          z  }|D ]n}||                    | |         d          ||         |k    z  z  }|dk    r||                    ||d                   z  }||          || |         d          z  }o|S )Nr   r  r
  )rS   rZ  r  r  rY   rf   rX   r  )	r   r   r  rS   r  r  mr  r  s	            r   &sympy_is_channels_last_strides_genericr    s    LLL000000
e**C
c)nn{aA
A '!*a	 	  A * *	UXXeAh""gajAo66 66!WQZ(((A AJU1Xq)))Hr   c                 (    t          | |g d          S r  r  r  s     r   !sympy_is_channels_last_strides_2dr    s    1%,,,OOOr   c                 (    t          | |g d          S r  r  r  s     r   !sympy_is_channels_last_strides_3dr    s    1%///RRRr   c                 "    ddl m}  |g | |R  S )Nr   )!IsNonOverlappingAndDenseIndicator)rZ  r  )r   r   r  s      r   -_sympy_is_non_overlapping_and_dense_indicatorr    s0    NNNNNN,,>e>g>>>>r   )r   r   r   r   r   r   )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,   rb   r1   r   rm   r   ri   r   rk   NotImplemented)r.   rh   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   r4   r\   r   r^   r   r`   r   AssertionErrorr@  s    r   	wrap_noder    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 } 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   rW  c           
         ddl m}m} ddlm} t                    }d }| j        |j         || j        |j                  }t                                        }|r6|4t          |  |t          |           t          |                              S  |            r7t          |  ||t          |           t          |          fi                     S t          |t                    sJ 	 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                  }n | j        |j                  }n6# t*          $ r) t,                              d| j        |j                    w xY w ||          }t0                              d| j        |j        |           t4          v rt6          }n<t8          v rt:          }n+| j        t6          u s|j        t6          u rt6          }n| j        }|"| t          |t>                    s ||          }| j                             || j!        |j!        f          \  }}t          || j        |||          S )	Nr   get_proxy_modehandle_sym_dispatchsafe_expandr   rf  failed to eval %s(%s, %s)z%s %s %s -> %sr  )""torch.fx.experimental.proxy_tensorr  r  r'   r  r   r!    alternate_impl_if_hinted_methodsgetr  r  r+   r   rZ  rg  rh  r)   r(   ri  bound_sympylowerr  r  r  sym_node_logdebugalways_float_magic_methodsr   always_bool_magic_methodsr   r-   r,   _create_fx_call_functionr5   )r.   r<   r  r  r  opout_hintalternate_implrg  rh  r)   outr-   r5   rW  funcr  s                  r   binary_magic_implz+_make_node_magic.<locals>.binary_magic_impl  s'   	
 	
 	
 	
 	
 	
 	
 	
 	FEEEEE''9 UZ%;r$)UZ00H9==fEE 	Th24	$5AQAQ!R!RSSS> 	))"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 d49ej11 	 	 	KK3VTY
SSS	 k#+VTY
CPPP ///FF000FF[E!!U\U%:%:FF[F $x22 % vh''H ^<<u}-
 

 sDNFHgNNNNs   0B7F( (3Gc           	         ddl m}m} ddl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          \  }	}
t5          || j	        |||	          S )	Nr   r  r  r   ceilingzfailed to eval %s(%s)z%s %s -> %sr  )r  r  r  r'   r  r   r  r  r(   r)   _simplify_floor_divr  r  r  r  r  r!   always_int_magic_methodsr   r   r   r  r   r-   r  r5   r   )r.   r  r  r  r  r(   r  r  r-   r5   rW  r  r  s              r   unary_magic_implz*_make_node_magic.<locals>.unary_magic_implk  s   	
 	
 	
 	
 	
 	
 	
 	
 	FEEEEE''> 	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k#---FF000FF111FF[F^<<R$,QQ
sDNFHgNNNNs    B (B4r
   c                 b   ddl m}m} ddl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  r  zfailed to eval %s(%s, %s, %s)r  )r  r  r  r'   r  r!   r  r
   r  r(   r  r  r  r)   r  r5   r   r-   )	pred_node	then_node	else_noder  r  r  r  r  r5   rW  r  r  s             r   sym_ite_implz&_make_node_magic.<locals>.sym_ite_impl  s           JIIIII)2Ky~~Y^H~ ''%i00%i00%i00
    
d9>9>9>JJ   3NNN    +c""C",EE)+Y->	@QR JGQ Y()*:Hg   s   :B 9Cr   c           	      T   ddl m}m} ddl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  r  z!failed to eval %s(%s, ndigits=%s)r  )r  r  r  r'   r  r=  r   r  r  r(   r  r  r  r   r-   r!   r5   rx   r)   r  tupler   )r.   r   r  r  r  r  r(   r  r-   r  r  r5   rW  r  r  s                r   
round_implz$_make_node_magic.<locals>.round_impl  s           JIIIIIB~ --b9T??G2LbQQ   9Dd4))   ?wWWW +c""CHy$2di11 L>D"G$$$@@U4[[QQJGQ3'RRRRs   A% %)Br   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )r  r  method_attrr  r  r  r  s   ``     r   _make_node_magicr    s~   9S>>$DCCClllLO LO LO LO LO LO\$O $O $O $O $O $OL *[**,<=====	9		(	 (	 (	 (	 (	 (	T 	*[**L99999	7		*	S *	S *	S *	S *	S *	S *	SX 	*[**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 ro   r  .0ss     r   
<listcomp>zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>  s    222qill222r   c                 ,    g | ]}t          |          S ro   r  r  s     r   r!  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>  s    4S4S4SaYq\\4S4S4Sr   c                     g | ]	}|j         
S ro   rr   r  s     r   r!  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>  s    ,,,af,,,r   c                     g | ]	}|j         
S ro   rr   r  s     r   r!  zH_make_node_sizes_strides.<locals>.sizes_strides_impl.<locals>.<listcomp>  s    0001000r   r  
_indicator)r  r  r  rG  sysmodulesr8  r  r  r  r  r!   rx   endswithr   r   r   r)   )r.   r   r   r  r  r  
size_exprsstride_exprsr  
size_hintsr  r   stride_hintsr-   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rW  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 ro   r  rb   r  r*  r[  s     r   r!  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>6  s%    ;;;++;;;r   c                 :    g | ]}t          j        |          S ro   r1  r2  s     r   r!  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>7  s%    ===++===r   r   c                 :    g | ]}                     |          S ro   sympifyr  r[  rS   s     r   r!  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>@  s%    555!U]]1%%555r   c                 :    g | ]}                     |          S ro   r5  r7  s     r   r!  zH_make_node_sizes_strides.<locals>.sizes_strides_user.<locals>.<listcomp>A  s%    777!U]]1%%777r   )rS   r'   r/  	itertoolschainr+   r   r  rG  rb   r   )r   r   r/  r[  rS   r  r  s      @@r   sizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_user+  s7   	
 	
 	
 	
 	
 	
 00 	 	A!V$$  +GAFF++;;;;U;;;====W===      ===44UGDDD 5555u5557777w777   r   )r  r   hasattrr&  r'  r8  )r  r  r-  r;  s   ``  r   _make_node_sizes_stridesr=    s    .> .> .> .> .> .>` G\\\#5666
     6 3;x(&11 CH%v/ABBBBBC Cr   c                    	
  t           v rd  
n 
dt          t          t          t          t
          t          t          f         fdd 	 t          v rd nd  fd	 
fd}	 
fd	}	 
fd
} t          v rt          |d  d|           d S  t          v r1t          |           }t          | t          ||                     d S  dk    r
fd}t          |d  d|           d S  dk    rd	 fd	}t          |d  d|           d S t          |d  d|            t          v rt          |d  d|           d S d S )NrV  rA  c                     t          | t          t          t          f          r| 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   rb   r"  r  r@  s    r   get_constantz&_make_user_magic.<locals>.get_constantZ  sY    a#ud+,, 	H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   rb   r7  r@  s    r   r7  z%_make_user_magic.<locals>.is_constanta  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   rb   ri   r   r@  s    r   promotez!_make_user_magic.<locals>.promote  s;    !W%% 7afooc!ff55666Hr   c                     | S r   ro   r@  s    r   rC  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	   )r.   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   r  rG  rb   )r.   r@  r7  r  r  rC  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   r  r  r  r   r  rb   r  rG  
r.   r<   
other_noderetr@  r7  r  r  rC  rH  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   r  r   r  rb   r  rG  rK  s
       r   rbinary_magic_implz,_make_user_magic.<locals>.rbinary_magic_impl  s   %#udFHg!NOO 	"!!wt}}htU++e;t 	K.&v..T0B0BEJJJ;u 	( L''ETY..
''!!8
K88CCDD$/K$4$4=||C   #=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   )	rb   r  r  r+   r   r-   r  rG  r7  )	predr   r   r  r  r  rM  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88;GDI{;;IyQQRRC(+(<(<(>(>G<<$$$CGr   r   c                      |           rt          j         |           |          S t           t          | j                  |                    S r   )r=  r   r  rG  rb   )r.   r   r@  r7  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   __rr   )r  r   r   r   r   r   r   r   bool_becomes_int_magic_methodsunary_magic_methodsr  unary_nonmagic_methodsrG  r   reflectable_magic_methods)r  	user_typer  r  rO  origrS  rU  r@  r7  r  rC  rH  s   `       @@@@@r   _make_user_magicr]  Q  s    CCC%VooKfc8UGTIJ K K K K  B ///	 	 	 		 	 	! ! ! ! !T< < < < < < < < <> > > > > > > > > >"> > > > > > > > > >  $$$	????,<=====	)	)	)y&))	6>2BD#I#IJJJJJ	9			H 	H 	H 	H 	H 	H 		????,>?????	7			B 	B 	B 	B 	B 	B 	B 	B 		????,<=====	????,=>>>...I/V///1CDDDDD /.r   r   )r;  r=  r9  loggingmathoperatorr&  	functoolsr   r   typingr   r   r   r   r  r	   r
   r   r   r   r   r   r   r'   r   	getLoggerr8  r  _logginggetArtifactLoggerr  __all__torch.typesr   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  rX  rK  math_op_namesrH  sym_namepriv_sym_namer  rG  rx   rY  r  only_bool_magic_methodsrW  also_bool_magic_methodsbool_magic_methodsonly_float_magic_methodsr  r  r  r   r\  r`  rc  rj  rm  rp  rt  rw  r{  r  rZ  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  current_moduler  priv_sympy_namerI  r:  r  r  r  r  invertr   r  r  r  r  r  r  r  r  sizes_strides_methodsminmaxr  r  r  r   r  r=  itemsr  r  r]  ro   r   r   <module>rv     sI
            



 / / / / / / / / 7 7 7 7 7 7 7 7 7 7 7 7 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  ?>>>>>>g!!~//*EE =
<
< 1 0 0 0 0 0  J J J J J J J J\!	8<!	8<! 
8<! 
8=	!
 DI! 	(+! TZ! TZ! H%! 	(+! 	(+! **! 	(+! ho! 	(+!  
8<!!" 
8<#!$ +<
,l^o<%#A! ! ! F
 
 
      Dd}}H"NNMGGX//55666#*75-#@#@x H%%%NN8
   $&<< >== !6!6!6 & ,/FF  >==  7<T] 2 XWW  - -Dd}}H""8,,,, HGG    "                     <<<+!
)%#  "  $                      . . . 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.[	 	  ||$ $    > > >& & &[? [? [?|TC TC TCn "'')) # #LFDVT"""")//11 + +LFDVT****qE qE qEh "'')) 
' 
'LFD((())))))***(((F6T,T,T)))VV$$$VX&&&&
DDr   