
    PhΎ                     6   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 ddl	m
Z
mZmZmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZmZ erddlmZ  ej:                  e      Zg dZ eeefZ!d	 Z" G d
 d      Z#i dejH                  dejJ                  dejL                  dejN                  dejP                  dejR                  dejT                  dejV                  dejX                  dejZ                  dej\                  dej^                  dej`                  dejb                  dejd                  dejf                  dejh                  ejj                  ejl                  ejn                  eeeeeeejp                  d
Z9h dZ:h dZ;h d Z<dhZ=e;e=z  Z>ddhZ?h d!Z@ddhZAh d"ZBd# ZCd$ ZDd% ZEd& ZFd' ZGd( ZHd) ZId* ZJd+ d, d- eEeFeGeHeCeDeIeJd.ZKd/ ZLd0 ZMd1 ZNd2 ZOd3 ZPd4 ZQd5 ZRd6 ZSd7 ZTd8 ZUd9 ZVd: ZWd; ZXd< ZYd= ZZi eKi d>d? deOdePdeQdeRdeSdeTdeMd@eZdeNddA dBeUdCeVdDeWdEeXdeYZ[dF Z\dG Z]dH Z^dI Z_dJ Z`dK ZadL ZbdM Zce\e^e_eaebecdNZdej                  ej                  dOZgdP ZhdQ ZidR ZjdS ZkdT Zle[j                         D ]  \  ZnZo ekeneo        edj                         D ]  \  ZnZo eleneo        dU Zpe[j                         D ]6  \  ZnZoene;v r
 epene       ene=v sene<v r	 epene        epene        epene       8 [n[oy)Vae  
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)OptionalTypeTYPE_CHECKINGUnion)		sym_floatsym_itesym_maxsym_minsym_notsym_sqrtSymBoolSymFloatSymInt)handle_sym_dispatchsym_function_mode)ShapeEnv)SymNodemethod_to_operatormagic_methodsr   c                 Z    | t         u rt        S | t        u rt        S | t        u rt
        S | S N)boolr   intr   floatr   )ts    iC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/fx/experimental/sym_node.py_to_symtyper   2   s+    DyCxEzH    c                      e Zd ZdZ	 	 dEdeeeeef      fdZ	dFdZ
ed        Zd Zed        Zd	 ZdGd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdHdZdHdZdHdZdHdZdHdZ dHdZ!dHdZ"dHdZ#dHdZ$dHdZ%dHd Z&dHd!Z'dHd"Z(dHd#Z)dHd$Z*dHd%Z+dHd&Z,dHd'Z-dHd(Z.dHd)Z/dHd*Z0dHd+Z1dHd,Z2dHd-Z3dHd.Z4dHd/Z5dHd0Z6dHd1Z7dHd2Z8dHd3Z9dHd4Z:dHd5Z;dHd6Z<dHd7Z=d8 Z>d9 Z?d: Z@d; ZAd< ZBd= ZCd> ZDd? ZEd@ ZFdA ZGdB ZHdC ZIdD ZJy)Ir   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                 
   || _         || _        || _        |9t        |      |u s,t        |      t	        |      u sJ d| dt        |              || _        || _        | j                  j                  r|| _        y d | _        y )NzCannot create SymNode of type z  with incompatible hint of type )	_expr	shape_envpytypetyper   _hintconstant_translation_validation_enabledfx_node)selfexprr$   r%   r!   r(   r*   s          r   __init__zSymNode.__init__E   s     
"6 :'4:V9L+L 0(:4:,HL 
;C ~~EEG 	KO 	r   c                     t        | j                  || j                  | j                  | j                  | j
                        S r   )r   r#   r%   r'   r(   r*   )r+   r$   s     r   with_shape_envzSymNode.with_shape_envz   s0    JJ	4;;

DMM4<<
 	
r   c                 L    | j                   j                  | j                        S r   )r$   replacer#   r+   s    r   r,   zSymNode.expr   s    ~~%%djj11r   c                     | j                   j                  | j                  d      }|)t        |t              s| j                  |      n|| _        y y )NT)compute_hint)r$   _maybe_evaluate_staticr,   
isinstanceSymTypesr%   r'   )r+   rs     r   _update_hintzSymNode._update_hint   sC    NN11$))$1O=/9!X/FQADJ r   c                 R    | j                   | j                          | j                   S r   r'   r9   r2   s    r   r!   zSymNode.hint   s"    ::zzr   c                 V    | j                   | j                          | j                   d uS r   r;   r2   s    r   has_hintzSymNode.has_hint   s'    ::zz%%r   c                     | j                   | j                          | j                   )||S | j                  j                  | j                        S | j                   S r   )r'   r9   r$   	size_hintr,   )r+   fallbacks     r   require_hintzSymNode.require_hint   sP    ::::#>>++DII66zzr   c                 Z    | j                   j                  rt        | j                         S y r   )r,   	is_numberr   r2   s    r   maybe_as_intzSymNode.maybe_as_int   s     99tyy>!r   c                 &    | j                   t        u S r   )r%   r   r2   s    r   is_intzSymNode.is_int   s    {{c!!r   c                 &    | j                   t        u S r   )r%   r   r2   s    r   is_floatzSymNode.is_float   s    {{e##r   c                 &    | j                   t        u S r   )r%   r   r2   s    r   is_boolzSymNode.is_bool   s    {{d""r   c                     t        |      t        u sJ dd l}t        |j	                  |      | j
                  t        |||      S Nr   )r(   r*   )r&   r   sympyr   Integerr$   r+   numrM   s      r   wrap_intzSymNode.wrap_int   s?    CyCMM#S3PS
 	
r   c                     t        |      t        u sJ dd l}t        |j	                  |      | j
                  t        |||      S rL   )r&   r   rM   r   Floatr$   rO   s      r   
wrap_floatzSymNode.wrap_float   s?    CyE!!!KKdnneS3PS
 	
r   c                     t        |      t        u sJ dd l}t        |r|j                  n|j
                  | j                  t        |||      S rL   )r&   r   rM   r   truefalser$   rO   s      r   	wrap_boolzSymNode.wrap_bool   sF    CyD   EJJ5;;NN
 	
r   c                     | S r    r2   s    r   clonezSymNode.clone   s    r   c                     | j                    S r   )r,   r2   s    r   strzSymNode.str   s    ))r   c                 "    | j                         S r   r]   r2   s    r   __str__zSymNode.__str__       xxzr   c                 "    | j                         S r   r_   r2   s    r   __repr__zSymNode.__repr__   ra   r   c                 "    | j                         S r   )_absr2   s    r   abszSymNode.abs       yy{r   c                 $    | j                  |      S r   )_addr+   others     r   addzSymNode.add       yyr   c                 $    | j                  |      S r   )_subrj   s     r   subzSymNode.sub   rm   r   c                 $    | j                  |      S r   )_mulrj   s     r   mulzSymNode.mul   rm   r   c                 $    | j                  |      S r   )_modrj   s     r   modzSymNode.mod   rm   r   c                 $    | j                  |      S r   )_powrj   s     r   powzSymNode.pow   rm   r   c                 $    | j                  |      S r   )_and_rj   s     r   and_zSymNode.and_   s    zz%  r   c                 $    | j                  |      S r   )_or_rj   s     r   or_zSymNode.or_   rm   r   c                 $    | j                  |      S r   )_truedivrj   s     r   truedivzSymNode.truediv       }}U##r   c                 $    | j                  |      S r   )	_floordivrj   s     r   floordivzSymNode.floordiv   s    ~~e$$r   c                 $    | j                  |      S r   )_lshiftrj   s     r   lshiftzSymNode.lshift       ||E""r   c                 $    | j                  |      S r   )_rshiftrj   s     r   rshiftzSymNode.rshift   r   r   c                 "    | j                         S r   )_sym_notr2   s    r   r   zSymNode.sym_not       }}r   c                 $    | j                  |      S r   )_eqrj   s     r   eqz
SymNode.eq       xxr   c                 $    | j                  |      S r   )_nerj   s     r   nez
SymNode.ne  r   r   c                 $    | j                  |      S r   )_gtrj   s     r   gtz
SymNode.gt  r   r   c                 $    | j                  |      S r   )_ltrj   s     r   ltz
SymNode.lt	  r   r   c                 $    | j                  |      S r   )_lerj   s     r   lez
SymNode.le  r   r   c                 $    | j                  |      S r   )_gerj   s     r   gez
SymNode.ge  r   r   c                 "    | j                         S r   )_floorr2   s    r   floorzSymNode.floor  s    {{}r   c                 "    | j                         S r   )
_sym_floatr2   s    r   r   zSymNode.sym_float  s      r   c                 "    | j                         S r   )_sym_intr2   s    r   sym_intzSymNode.sym_int  r   r   c                 "    | j                         S r   )_ceilr2   s    r   ceilzSymNode.ceil  s    zz|r   c                 "    | j                         S r   )_negr2   s    r   negzSymNode.neg  rg   r   c                 $    | j                  |      S r   )_sym_minrj   s     r   r   zSymNode.sym_min!  r   r   c                 $    | j                  |      S r   )_sym_maxrj   s     r   r
   zSymNode.sym_max$  r   r   c                 &    | j                  ||      S r   )_sym_ite)r+   then_valelse_vals      r   r	   zSymNode.sym_ite'  s    }}Xx00r   c                 "    | j                         S r   )	_sym_sqrtr2   s    r   r   zSymNode.sym_sqrt*  s    ~~r   c                 &    | j                  ||      S r   )_is_contiguousr+   sizesstridess      r   is_contiguouszSymNode.is_contiguous-  s    ""5'22r   c                 &    | j                  ||      S r   )_is_channels_last_contiguous_2dr   s      r   is_channels_last_contiguous_2dz&SymNode.is_channels_last_contiguous_2d0      33E7CCr   c                 &    | j                  ||      S r   )_is_channels_last_contiguous_3dr   s      r   is_channels_last_contiguous_3dz&SymNode.is_channels_last_contiguous_3d3  r   r   c                 &    | j                  ||      S r   )_is_channels_last_strides_2dr   s      r   is_channels_last_strides_2dz#SymNode.is_channels_last_strides_2d6      00@@r   c                 &    | j                  ||      S r   )_is_channels_last_strides_3dr   s      r   is_channels_last_strides_3dz#SymNode.is_channels_last_strides_3d9  r   r   c                 &    | j                  ||      S r   )'_is_non_overlapping_and_dense_indicatorr   s      r   &is_non_overlapping_and_dense_indicatorz.SymNode.is_non_overlapping_and_dense_indicator<  s    ;;E7KKr   c                 $    | j                  |      S r   )r   rj   s     r   sym_orzSymNode.sym_or@  r   r   c                 $    | j                  |      S r   )r|   rj   s     r   sym_andzSymNode.sym_andC  rm   r   c                 X    | j                  ||      j                  t        | d            S )N   )r   r   to_noder   s      r   is_non_overlapping_and_densez$SymNode.is_non_overlapping_and_denseF  s)    ::5'JMMgVZ\]N^__r   c                 &    | j                  dd      S N r   )	guard_intr2   s    r   int_zSymNode.int_I  s    ~~b!$$r   c                     | j                   j                  | j                  | j                  | j                        }	 t        |      S # t        $ r t        j                  d|        w xY w)Nr*   zFailed to convert to int: %s)	r$   evaluate_exprr,   r!   r*   r   	Exceptionlogwarningr+   fileliner8   s       r   r   zSymNode.guard_intM  sZ     NN((DIIt||(T	q6M 	KK6:	   
A	 	!A*c                     | j                   j                  | j                  | j                  | j                  d      }	 t        |      S # t        $ r t        j                  d|        w xY w)NF)r*   expect_rationalzFailed to convert to float: %s)	r$   r   r,   r!   r*   r   r   r   r   r   s       r   guard_floatzSymNode.guard_floatW  sa     NN((IItyy$,, ) 
	8O 	KK8!<	s   
A
 
!A+c                     | j                   j                  | j                  | j                  | j                        }	 t        |      S # t        $ r t        j                  d|        w xY w)Nr   zFailed to convert to bool: %s)	r$   r   r,   r!   r*   r   r   r   r   r   s       r   
guard_boolzSymNode.guard_boolc  sZ     NN((DIIt||(T	7N 	KK7;	r   c                     | j                         r| j                  ||      S | j                  j                  | j                  | d| | j
                        S )N:r   )r=   r   r$   defer_runtime_assertr,   r*   )r+   r   r   s      r   expect_truezSymNode.expect_truem  sT    ==???4..
 ~~22II$q' 3 
 	
r   c                     ddl m} | j                  | j                  d            }|j	                  ||      }|r!| j                         s |t        |              |S )Nr   )_advise_is_size)%torch.fx.experimental.symbolic_shapesr   r   rQ   r   r=   r   )r+   r   r   r   br8   s         r   expect_sizezSymNode.expect_sizey  sJ    IGGDMM!$%MM$%
 T]]_F4L)r   c                 &    | j                  dd      S r   )r   r2   s    r   bool_zSymNode.bool_  s    r1%%r   c                      y)NTrZ   r2   s    r   is_symboliczSymNode.is_symbolic      r   c                      y r   rZ   r2   s    r   singleton_intzSymNode.singleton_int  r   r   c                      y)NFrZ   r2   s    r   is_constantzSymNode.is_constant  s    r   )NN)r$   r   returnr   r   )r  r   )K__name__
__module____qualname____doc__r   r   r   r   r   r-   r/   propertyr,   r9   r!   r=   rA   rD   rF   rH   rJ   rQ   rT   rX   r[   r]   r`   rc   rf   rl   rp   rs   rv   ry   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   rZ   r   r   r   r   ?   s    3

 uS%-./3
j

 2 2
N
  
&
"$#



     ! $%##!$$1 3DDAAL `%


&r   r   rf   rl   andr   r   r   r   r   r   r   r   r   rv   rs   r   r   or)
ry   r   rp   r   r	   r
   r   r   r   r   >   rf   r   r   r   r   r   r   >   r  r  r	   r   >   rl   rs   rp   >   ry   r   r   r   >
   r   r   r   r   r   r   r  r  r   r   c                      ddl m}  || |      S )Nr   )TrueDiv)torch.utils._sympy.functionsr
  )ar   r
  s      r   _sympy_truedivr    s    41a=r   c                      ddl m}  || |      S )Nr   )FloorDiv)r  r  )r  r   r  s      r   _sympy_floordivr    s    5Aq>r   c                      ddl m}  || |      S )Nr   )Mod)r  r  )r  r   r  s      r   
_sympy_modr        0q!9r   c                      ddl m}  || |      S )Nr   )Pow)r  r  )r  r   r  s      r   
_sympy_powr    r  r   c                 .    dd l }|j                  | |      S Nr   )rM   Andr  r   rM   s      r   
_sympy_andr        99Q?r   c                 .    dd l }|j                  | |      S r  )rM   Orr  s      r   	_sympy_orr         88Aq>r   c                      ddl m}  || |      S )Nr   )LShift)r  r#  )r  r   r#  s      r   _sympy_lshiftr$         3!Q<r   c                      ddl m}  || |      S )Nr   )RShift)r  r'  )r  r   r'  s      r   _sympy_rshiftr(    r%  r   c                     | |z   S r   rZ   r  r   s     r   <lambda>r+        Ar   c                     | |z
  S r   rZ   r*  s     r   r+  r+    r,  r   c                     | |z  S r   rZ   r*  s     r   r+  r+    r,  r   )rl   rp   rs   rv   ry   r  r  r   r   r   r   c                    dd l }t        | |j                        rf| j                  }t	        |      dk(  rLt        |d   |j
                        r3|d   j                  r$|j                  |d         }|d   |k(  r||d   z  S t        | |j
                        r| |j                  |       k(  st        | |j                        r|j                  |       S  ||       S )Nr      r   )rM   r6   MulargslenrS   
is_integerrN   )r  fnrM   aacoefs        r   _floor_ceil_helperr8    s    !UYYVVr7a<Jr!uekk:r!u?O?O==A'D!u}be|#1ekk"q!!a'}}Qa5Lr   c                 6    dd l }t        | |j                        S r  )rM   r8  r   r  rM   s     r   _sympy_floorr;  -  s    a--r   c                 6    dd l }t        | |j                        S r  )rM   r8  ceilingr:  s     r   _sympy_ceilr>  3  s    a//r   c                 .    dd l }|j                  | |      S r  )rM   Eqr  s      r   	_sympy_eqrA  9  r!  r   c                 .    dd l }|j                  | |      S r  )rM   Ner  s      r   	_sympy_nerD  ?  r!  r   c                 .    dd l }|j                  | |      S r  )rM   Gtr  s      r   	_sympy_gtrG  E  r!  r   c                 .    dd l }|j                  | |      S r  )rM   Ltr  s      r   	_sympy_ltrJ  K  r!  r   c                 .    dd l }|j                  | |      S r  )rM   Ler  s      r   	_sympy_lerM  Q  r!  r   c                 .    dd l }|j                  | |      S r  )rM   Ger  s      r   	_sympy_gerP  W  r!  r   c                 .    dd l }|j                  | |      S r  )rM   Minr  s      r   
_sympy_minrS  ]  r  r   c                 .    dd l }|j                  | |      S r  )rM   Maxr  s      r   
_sympy_maxrV  c  r  r   c                 6    dd l }|j                  || f|df      S )Nr   T)rM   	Piecewise)r  r   frM   s       r   
_sympy_iterZ  i  s    ??Aq6At9--r   c                 ,    dd l }|j                  |       S r  )rM   sqrtr:  s     r   _sympy_sqrtr]  o  s    ::a=r   c                 ,    dd l }|j                  |       S r  )rM   Absr:  s     r   
_sympy_absr`  u  s    99Q<r   c                     | dz  S )Ng      ?rZ   r  s    r   _sympy_sym_floatrc  {  s    
 s7Nr   r   c                     |  S r   rZ   rb  s    r   r+  r+    s    !r   r   c                     |  S r   rZ   rb  s    r   r+  r+    s    aRr   r   r
   r	   r   c                 `    t        |       }t        | |t        t        |dz
  dd                  S )Nr   )r3  sympy_is_contiguous_genericlistrange)r   r   dims      r   sympy_is_contiguousrl    s,    
e*C&ugtE#'2r<R7STTr   c                    dd l }t        |       }t        |      |k7  r|j                  S |j                  }|j	                  d      }|D ]G  }||j                  | |   |j	                  d            |j                  ||   |      z  z  }|| |   z  }I t        |      D ])  }||j                  | |   |j	                  d            z  }+ |S Nr   r   )rM   r3  rW   rV   rN   r@  rj  )r   r   	dim_orderrM   rk  r   zds           r   rh  rh    s    
e*C
9~{{JJMaA%(EMM!,<=QRUV@WWW	U1X  3Z%(EMM!,<== r   c                      t        | |g d      S N)r      r0  r   rh  r   r   s     r   $sympy_is_channels_last_contiguous_2drw    s    &ug|DDr   c                      t        | |g d      S N)r      rt  r0  r   ru  rv  s     r   $sympy_is_channels_last_contiguous_3dr{    s    &ugGGr   c                    dd l }t        |       }|t        |      k7  r|j                  S |j                  d      }|j                  }||j                  |d   d      z  }|D ][  }||j                  | |   d      ||   |k\  z  z  }|dk(  r||j                  ||d         z  }||   |j                  | |   d      z  }] |S rn  )rM   r3  rW   rN   rV   rC  rU  )r   r   ro  rM   rk  mr8   rq  s           r   &sympy_is_channels_last_strides_genericr~    s    
e*C
c)n{{aA

A '!*a	  A	UXXeAh"gajAo66 6!WQZ((A AJ58Q//' * Hr   c                      t        | |g d      S rs  r~  rv  s     r   !sympy_is_channels_last_strides_2dr    s    1%,OOr   c                      t        | |g d      S ry  r  rv  s     r   !sympy_is_channels_last_strides_3dr    s    1%/RRr   c                 "    ddl m}  |g | | S )Nr   )!IsNonOverlappingAndDenseIndicator)r  r  )r   r   r  s      r   -_sympy_is_non_overlapping_and_dense_indicatorr    s    N,>e>g>>r   )r   r   r   r   r   r   )r   r
   c                    t        |t              r|j                  S t        |      t        u r| j                  |      S t        |      t        u r| j                  |      S t        |      t        u r| j                  |      S t        S r   )r6   r7   noder&   r   rX   r   rQ   r   rT   NotImplemented)r+   rP   s     r   r   r     sn    #x xx	cd	~~c""	cc	}}S!!	ce	s## r   c                    t        | t              r| j                  | j                  S | j                         rt	        |       S | j                         rt        |       S | j                         rt        |       S t        d|        )Nzunrecognized return type )
r6   r   r(   rF   r   rH   r   rJ   r   AssertionErrorxs    r   	wrap_noder    sk    !W!**"8zzxxzay	
{	
qz8<==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| |       y  dk(  r fd}t        t        d| |       y t        t        d| |       y )N   _c           
         ddl m} t              }d }| j                  )|j                   || j                  |j                        }t        j                        }|r'|%t        |  |t        |       t        |                  S t               r+t        | t        |t        |       t        |      fi             S t        |t              sJ 	  
| j                  |j                        } ||      }t         v rt"        }nFt$        v rt&        }n7| j(                  t"        u s|j(                  t"        u rt"        }n| j(                  }||t        |t*              s ||      }| j,                  j/                  || j0                  |j0                  f      \  }}	t        || j,                  |||      S # t        $ r. t        j                  d| j                  |j                          w xY w)Nr   safe_expandfailed to eval %s(%s, %s)r   )r   r  r   r!    alternate_impl_if_hinted_methodsgetr   r  r   r   r6   r   r,   r   r   r   always_float_magic_methodsr   always_bool_magic_methodsr   r%   r7   r$   create_fx_call_functionr*   )r+   rk   r  opout_hintalternate_imploutr%   r*   r  funcr  s             r   binary_magic_implz+_make_node_magic.<locals>.binary_magic_impl+  s   E'99 UZZ%;$))UZZ0H9==fEh24	$5AQ!RSS)"y	%@P.QSUV  %)))	tyy%**-C # //F00F[[E!U\\U%:F[[F $x2h'H ^^;;u}}-

 sDNNFHgNNC  	KK3VTYY

S	s   F5 57G,c           	      f   ddl m} t        
      }t               r!t	        | t        |t        |       fi             S | j                  }
dk(  s
dk(  r| j                  j                  |      }	  	|      }d }| j                   || j                        } ||      }
t        v rt        }n
t         v rt"        }n| j$                  }| j                  j'                  || j(                  f      \  }}t+        || j                  |||      S # t        $ r t        j                  d
|        w xY w)Nr   r  r   r=  zfailed to eval %s(%s)r   )r   r  r   r   r   r   r  r,   r$   _simplify_floor_divr   r   r   r!   always_int_magic_methodsr   r  r   r%   r  r*   r   )r+   r  r  r,   r  r  r%   r*   r  r  r  s            r   unary_magic_implz*_make_node_magic.<locals>.unary_magic_implc  s   E'4!4R)D/9KR!PQQyyW) 3>>55d;D	t*C
 99 $))}H#--F11F[[F^^;;BP
sDNNFHgNN#  	KK/>	s   0D "D0r	   c                    ddl m} | j                  r|j                  n|j                  }t               r9t	        | t        t        t        |       t        |      t        |      fi             S 	  | j                  |j                  |j                        } ||      }| j                  j                  t        | j                  |j                  |j                  f      \  }}t        || j                  |j                   ||      S # t        $ r9 t        j                  d	| j                  |j                  |j                          w xY w)Nr   r  zfailed to eval %s(%s, %s, %s)r   )r   r  r!   r   r   r   r	   r  r,   r   r   r   r$   r  r*   r   r%   )
	pred_node	then_node	else_noder  r  r  r*   r  r  r  s
           r   sym_ite_implz&_make_node_magic.<locals>.sym_ite_impl  s$   I)2y~~Y^^H "'%i0%i0%i0
  
9>>9>>9>>J c"C",,DD)++Y->->	@Q@QRJGQ Y(()*:*:Hg   3NNNNNN s   0(D AE
)r   2magic_methods_on_operator_with_trailing_underscoreunary_magic_methodssetattrr   )r  r  method_attrr  r  r  s   ``    r   _make_node_magicr  #  s    9S>$DCCl6OpO@ $$1[M*,<=	9	$	L 	1[M*L91[M*,=>r   c                       fd}t        t        d  |        fd}t        t        j                  t
                  s#t        t        j                  t
            |       y y )Nc                    t        t        j                  t                 }t	               rGt        | t        ||D cg c]  }t        |       c}|D cg c]  }t        |       c}fi             S |D cg c]  }|j                   }}|D cg c]  }|j                   }}	  ||      }g }d }	|D ]+  }|j                   nX|j                  |j                         - g }
|D ]+  }|j                   n&|
j                  |j                         -  |||
      }	j                  d      rt        }nt         }t#        || j$                  ||	      S c c}w c c}w c c}w c c}w # t        $ r t        j                  d||        w xY w)Nr  
_indicator)getattrsysmodulesr  r   r   r   r  r,   r   r   r   r!   appendendswithr   r   r   r$   )r+   r   r   r  s
size_exprsstride_exprsr  
size_hintsr  stride_hintsr%   r  r  s               r   sizes_strides_implz4_make_node_sizes_strides.<locals>.sizes_strides_impl  s   S[[*F3#,12EqilE274S7aYq\74ST  ',,eaffe
,(/010	z<0C 
Avv~aff% 
 L66>##AFF+ 
 j,7 ??<(FFsDNNFH==E 34S -0  	KK3VZV	s#   EE8EE$'	E) )#Fr  c                 "   dd l }ddlm} t        j                  | |      D ]~  }t        |t              st         t        |j                        | D cg c]  }t        |j                  |       c}|D cg c]  }t        |j                  |       c}            c S  dk(  r	 || |      S t         | D cg c]  }|j                  |       c}|D cg c]  }|j                  |       c}            S c c}w c c}w c c}w c c}w )Nr   )!eval_is_non_overlapping_and_denser   )rM   r   r  	itertoolschainr6   r   r  r  r  r   r   sympify)r   r   rM   r  r  r   r  r  s         r   sizes_strides_userz4_make_node_sizes_strides.<locals>.sizes_strides_user  s    	
 0A!V$ +GAFFF+5:;U+U;5<=W+W=  1 ==4UGDD /45u!U]]1%u5/67w!U]]1%w7  <= 67s   C=8D<DD)r  r   hasattrr  r  r  )r  r  r  r  s   ``  r   _make_node_sizes_stridesr    sS    )>V Gq\#56
6 3;;x(&1H%v/AB 2r   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	} t        v rt        |d
  d
|       y  dk(  rfd}t        |d
  d
|       y t        |d
  d
|        t        v rt        |d  d
|       y y )Nr  r  c                     t        | t        t        t        f      r| S t        | t              r| j
                  j                  dd      S t        d      )Nr   r   z*expect to be called with constant SymBools)r6   r   r   r   r   r  r   r  r  s    r   get_constantz&_make_user_magic.<locals>.get_constant  sE    a#ud+,Ha!66$$R++IJJr   c                     t        | t        t        t        f      ryt        | t        t
        t        f      r| j                  j                         S y)NTF)	r6   r   r   r   r   r   r   r  r   r  s    r   r   z%_make_user_magic.<locals>.is_constant  s=    a#ud+,a&(G4566%%''r   c                     t        | t              r-t        | j                  j	                  t        |                   S | S )z;Implements True+True=2, which works in python but not sympy)r6   r   r   r  rQ   r   r  s    r   promotez!_make_user_magic.<locals>.promote$  s-    !W%affooc!f566Hr   c                     | S r   rZ   r  s    r   r  z!_make_user_magic.<locals>.promote,  s    Hr   c                      |       }  |       r t               |             S t         t        | j                                     S r   )r   r  r  r  )r+   r  r   r  r  r  s    r   r  z*_make_user_magic.<locals>.unary_magic_impl6  sH    t}t.&v.T0BCC8K8:;;r   c                 :    |       }  |      } |       r t               |       |      S  |      r |      }t        | j                  |      }|t        u rt        S t	         t        | j                        |            } |      r |      S |S r   r   r   r  r  r  r  	r+   rk   
other_noderetr  r   r  r  r  s	       r   r  z+_make_user_magic.<locals>.binary_magic_impl<  s    t}t.&v.T0BEJJu 'ETYY.
'!!7		;7
CD$/$4|C =#=r   c                 :    |       }  |      } |       r t               |       |      S  |      r |      }t        | j                  |      }|t        u rt        S t	         t        |      | j                              } |      r |      S |S r   r  r  s	       r   rbinary_magic_implz,_make_user_magic.<locals>.rbinary_magic_implI  s    t}t.&v.T0BEJJu 'ETYY.
'!!8
K8CD$/$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                   j                         r |      S |S r   )	r  r   r  r6   r   r%   r  r  r   )	predr   r   r  r  r  r  r  r  s	          r   sym_ite_magic_implz,_make_user_magic.<locals>.sym_ite_magic_implZ  s    		I	84I	84IN*i>.I%%9g.y'2$$	(8(889 ;GDII{;IyQRC(+(<(<(><$GCGr   __r)r  r   r   r   r   r   r   r   bool_becomes_int_magic_methodsr  r  reflectable_magic_methods)
r  	user_typer  r  r  r  r  r   r  r  s
   `     @@@@r   _make_user_magicr    s     CClKfc8UGTIJ K //		< <> >> > $$	Rxr?,<=	9		H 		Rxr?,>?	Rxr?,=>..IVHB/1CD /r   )qr  builtinsr  loggingmathoperatorr  	functoolsr   typingr   r   r   r   torchr   r	   r
   r   r   r   r   r   r   (torch.fx.experimental._sym_dispatch_moder   r   r   r   	getLoggerr  r   __all__r7   r   r   rf   rl   r|   r   r   r   r   r   r   r   r   r   rv   rs   r   r   r   ry   r   rp   r   r  r  only_bool_magic_methodsr  also_bool_magic_methodsbool_magic_methodsr  r  r  r  r  r  r  r  r  r   r$  r(  r  r8  r;  r>  rA  rD  rG  rJ  rM  rP  rS  rV  rZ  r]  r`  rc  r   rl  rh  rw  r{  r~  r  r  r  sizes_strides_methodsminmaxr  r   r  r   r  r  itemsr  r  r  rZ   r   r   <module>r     s        
  7 7
 
 

 >g! I Hg&R Rl
	8<<	8<< 
8== DII	
 	(++ TZZ !! 	(++ 	(++ 	(++ hoo 	(++ 
8<< 
8<< 	(++  
8<<!" 	(,,#$ <<oo<<7 <  > !6 & ,/FF  7<T] 2 I "G,    
 $.0.| 	) 	)	
 	) 	) 	) 	) \ ! K 
< z z z  !" 
:#*U
0EH#LPS? )&J&J#D#D.[	  ||||$  >&L?^OCd "'')LFDVT" * *//1LFDVT* 2aEH "'')LFD(()((F6T,T)VV$VX& * r   