
    [Th                    Z
   S SK Jr   S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SKJ
r
Jr  S SKJrJrJr  S SKrS SKJs  Jr  S SKJrJrJrJrJrJrJrJr  S SKJr  \(       a  S SKJr  \R@                  " \!5      r"\R$                  RG                  \!S5      r$/ S	Qr%S S
K&J'r(  S r) " S S5      r*0 S\RV                  _S\RX                  _S\RZ                  _S\R\                  _S\R\                  _S\R^                  _S\R`                  _S\Rb                  _S\Rd                  _S\Rf                  _S\Rh                  _S\Rj                  _SS _S\Rl                  _S\Rn                  _S\Rp                  _S\Rr                  _0 S \Rt                  _S!\Rv                  _S"\Rx                  _S#\Rz                  _S$\Rz                  _S%\R|                  _S&\R|                  _S'\R~                  _S(\R                  _S)\R                  _S*\_S+\_S,\_S-\_S.\_S/\R                  _S0\R                  _ErC1 S1krDS2 rES3rF\F HK  rGS4\G 3rHS5\H 3rI\J" \*\H\E" \G5      5        \K" \\I5      \C\H'   \DR[                  \H5        \%R                  \H5        MM     S1rM\D\M-  rN1 S6krO1 S7krPS1rQ\O\Q-  rR1 S8krSSS#1rTSS#S9.rU1 S:krV\F H  rGS4\G 3rH\VR[                  \H5        M     1 S;krW1 S<krXS= rYS> rZS? r[S@ r\SA r]SB r^SC r_SD r`SE raSF rbSG rc SpSH jrdSI reSJ rf\d\R                  \Rt                  \\\]\^\_\e\`\f\Y\Z\[\a\bSK.rgSL rhSM riSN rjSO rkSP rlSQ rmSR rnSS roST rpSU rqSV rrSW rsSX rt\	R                  \!   rvSY rw\F H(  rGSZ\G 3rx\w" \G5      ry\x=\ylz        \yl!        \J" \v\x\y5        M*     CyCGCxS[ r{SqS\ jr|S] r}S^ r~0 \gE0 S.\R                  _S\RV                  _S\l_S!\m_S\n_S\o_S\p_S\q_S\i_S\j_S*\}_S\k_S"\Rx                  _S-\r_S,\s_S+\t_S\{_E\|\~S_.Er\F H  rGS4\G 3rH\K" \vSZ\G 35      \\H'   M     CGCHCFCvS` rSa rSb rSc rSd rSe rSf rSg r\\\\\\Sh.r\GR                  \GR                  Si.rSj rSk rSl rSm rSn r\GR%                  5        H  u  rr\" \\5        M     \GR%                  5        H  u  rr\" \\5        M     So r\GR%                  5        HW  u  rr\\O;   a  \" \\5        M  \\S;   a  \" \\5        M(  \\Q;   d  \\P;   a	  \" \\5        \" \\5        \\U;  d  MN  \" \\5        MY     CCg)r    )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)py_sym_typesc                `    U [         L a  [        $ U [        L a  [        $ U [        L a  [
        $ U $ N)boolr   intr   floatr   )ts    V/var/www/auris/envauris/lib/python3.13/site-packages/torch/fx/experimental/sym_node.py_to_symtyper   :   s+    DyCxEzH    c                     \ rS rSr% SrSrS\S'      S[ S\S jjrS]S jrS^S	 jr	S_S
 jr
\S 5       r\S 5       rS rS`S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rSaS jrSbS jrSbS jr S`SbS  jjr!SbS! jr"SbS" jr#SbS# jr$SbS$ jr%SbS% jr&SbS& jr'SbS' jr(SbS( jr)SbS) jr*SbS* jr+SbS+ jr,SbS, jr-SbS- jr.SbS. jr/SbS/ jr0SbS0 jr1SbS1 jr2SbS2 jr3SbS3 jr4SbS4 jr5SbS5 jr6SbS6 jr7SbS7 jr8SbS8 jr9SbS9 jr:SbS: jr;SbS; jr<SbS< jr=SbS= jr>SbS> jr?SbS? jr@SbS@ jrASbSA jrBSbSB jrCSbSC jrDSbSD jrESE rFSF rGSG rHSH rISI rJSbSJ jrKSK rLSL rMSM rNSbSN jrOScSO jrPSP rQSQ rRSR rSSS rTST rUSU rVSV rWSW rXSX rYSY rZSZr[g)dr   G   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_summationNc                  ^  UT l         UT l        UT l        UT l        U 4S jnUb  [	        U5      UL d-  [	        U5      [        U5      L d   SU S[	        U5       35       eT R                  (       aA  T R                  R                  (       a&  U" 5       n	XI:X  d   U SU	 ST R                   S35       eOU" 5       nUT l        UT l	        T R                  =(       a    T R                  R                  n
U
=(       a    UT l
        g )Nc                    > SSK Jn   U " TR                  5      (       a  g TR                  R	                  TR                  SS9nUb(  [        U[        5      (       d  TR                  U5      OUnU$ )Nr   )has_free_unbacked_symbolsT)compute_hint)%torch.fx.experimental.symbolic_shapesr&   expr	shape_env_maybe_evaluate_static
isinstanceSymTypespytype)r&   hintselfs     r   r'   &SymNode.__init__.<locals>.compute_hint   s`    W )33>>88QU8VD0:40J0Jt{{4(PTKr    zCannot create SymNode of type z  with incompatible hint of type z != z (for ))_exprr*   r.   r#   typer   _translation_validation_enabledr)   _hintconstantfx_node)r0   r)   r*   r.   r/   r7   r8   optimized_summationr'   computed_hinttx_validation_ens   `          r   __init__SymNode.__init__V   s    
"$7!:	 :'4:V9L+L 0(:4:,HL ~~$.."P"P !-)BV4fTYYKqAB)  >D
;C NNMt~~MM 	 (3Gr    c                    [        U R                  XR                  U R                  U R                  U R
                  5      $ r   )r   r3   r.   r6   r7   r8   )r0   r*   s     r   with_shape_envSymNode.with_shape_env   s.    JJ	;;

DMM4<<
 	
r    c                4   U R                   UR                   :H  =(       ay    U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )r3   r.   r6   r7   r8   r0   others     r   	_value_eqSymNode._value_eq   sq     JJ%++% .u||+.

ekk). /. -	
r    c                    [        U R                  U R                  U R                  U R                  U R
                  45      $ r   )hashr3   r.   r6   r7   r8   r0   s    r   _value_hashSymNode._value_hash   s,    TZZdjj$--VWWr    c                L    U R                   R                  U R                  5      $ r   )r*   replacer3   rH   s    r   r)   SymNode.expr   s    ~~%%djj11r    c                    U R                   $ r   r6   rH   s    r   r/   SymNode.hint   s    zzr    c                    U R                   S L$ r   rO   rH   s    r   has_hintSymNode.has_hint   s    zz%%r    c                ~   SSK Jn  U R                  c  Ubr  U" U R                  5      nU R                  R                   Vs0 s H$  nXDU;   a  SOU R
                  R                  U   _M&     nnU R                  R                  U5      $ U R
                  R                  U R                  5      $ U R                  $ s  snf )Nr   free_unbacked_symbolsi   )	r(   rV   r6   r)   free_symbolsr*   
var_to_valxreplace	size_hint)r0   fallbackrV   unbacked_symbolssreplacementss         r   require_hintSymNode.require_hint   s    O::# $9#C  "YY33 3 $44t$..:S:STU:VV3    yy)),77>>++DII66zz s   +B:c                d    U R                   R                  (       a  [        U R                   5      $ g r   )r)   	is_numberr   rH   s    r   maybe_as_intSymNode.maybe_as_int   s     99tyy>!r    c                    SS K n[        U R                  UR                  5      (       a  [	        U R                  5      $ g Nr   )sympyr,   r)   Floatr   r0   rg   s     r   maybe_as_floatSymNode.maybe_as_float   s,    dii--##r    c                t    SS K nU R                  UR                  L a  gU R                  UR                  L a  gg )Nr   TF)rg   r)   truefalseri   s     r   maybe_as_boolSymNode.maybe_as_bool   s.    99

"YY%++%r    c                &    U R                   [        L $ r   )r.   r   rH   s    r   is_intSymNode.is_int   s    {{c!!r    c                &    U R                   [        L $ r   )r.   r   rH   s    r   is_floatSymNode.is_float   s    {{e##r    c                &    U R                   [        L $ r   )r.   r   rH   s    r   is_boolSymNode.is_bool   s    {{d""r    c                    U R                   S L=(       aE    [        U R                   [        5      =(       a$    U R                   R                  R	                  5       $ r   )r6   r,   r   nodeis_nested_intrH   s    r   r|   SymNode.is_nested_int   sA     JJd" 04::v.0

--/	
r    c           	         [        U5      [        L d   eSS Kn[        UR	                  U5      U R
                  [        XUS9$ Nr   )r7   r8   )r4   r   rg   r   Integerr*   r0   numrg   s      r   wrap_intSymNode.wrap_int  s=    CyCMM#SPS
 	
r    c           	         [        U5      [        L d   eSS Kn[        UR	                  U5      U R
                  [        XUS9$ r   )r4   r   rg   r   rh   r*   r   s      r   
wrap_floatSymNode.wrap_float  s=    CyE!!!KKdnneSPS
 	
r    c           	         [        U5      [        L d   eSS Kn[        U(       a  UR                  OUR
                  U R                  [        UUUS9$ r   )r4   r   rg   r   rm   rn   r*   r   s      r   	wrap_boolSymNode.wrap_bool  sF    CyD   EJJ5;;NN
 	
r    c                    U $ r    rH   s    r   cloneSymNode.clone%  s    r    c                    U R                    $ r   )r)   rH   s    r   strSymNode.str(  s    ))r    c                "    U R                  5       $ r   r   rH   s    r   __str__SymNode.__str__+  s    xxzr    c                   SU R                    SU R                   SU R                   3/nU R                  b  UR	                  SU R                   35        U R
                  b  UR	                  SU R
                   35        U R                  b  UR	                  SU R                   35        SR                  U5      S-   $ )	NzSymNode(z, shape_env=z	, pytype=zhint=z	constant=zfx_node=z, r2   )r3   r*   r.   r6   appendr7   r8   join)r0   reps     r   __repr__SymNode.__repr__.  s    tzzl,t~~.>i}U
 ::!JJtzzl+,==$JJ4==/23<<#JJ$,,01yy~##r    c                "    U R                  5       $ r   r   rH   s    r   _graph_reprSymNode._graph_repr:  s    xxzr    c                "    U R                  5       $ r   )_absrH   s    r   absSymNode.abs@      yy{r    c                "    U R                  5       $ r   )_posrH   s    r   posSymNode.posC  r   r    c                $    U R                  U5      $ r   )_round)r0   ndigitss     r   roundSymNode.roundF  s    {{7##r    c                "    U R                  5       $ r   )_truncrH   s    r   truncSymNode.truncI      {{}r    c                $    U R                  U5      $ r   )_addrB   s     r   addSymNode.addL      yyr    c                $    U R                  U5      $ r   )_subrB   s     r   subSymNode.subO  r   r    c                $    U R                  U5      $ r   )_mulrB   s     r   mulSymNode.mulR  r   r    c                $    U R                  U5      $ r   )_modrB   s     r   modSymNode.modU  r   r    c                $    U R                  U5      $ r   )
_float_powrB   s     r   	float_powSymNode.float_powX  s    u%%r    c                $    U R                  U5      $ r   )_pow_by_naturalrB   s     r   pow_by_naturalSymNode.pow_by_natural[  s    ##E**r    c                $    U R                  U5      $ r   )_and_rB   s     r   and_SymNode.and_^  s    zz%  r    c                $    U R                  U5      $ r   )_or_rB   s     r   or_SymNode.or_a  r   r    c                $    U R                  U5      $ r   )_float_truedivrB   s     r   float_truedivSymNode.float_truedivd  s    ""5))r    c                $    U R                  U5      $ r   )_int_truedivrB   s     r   int_truedivSymNode.int_truedivg        ''r    c                $    U R                  U5      $ r   )_int_floordivrB   s     r   int_floordivSymNode.int_floordivj      !!%((r    c                $    U R                  U5      $ r   )_lshiftrB   s     r   lshiftSymNode.lshiftm      ||E""r    c                $    U R                  U5      $ r   )_rshiftrB   s     r   rshiftSymNode.rshiftp  r   r    c                "    U R                  5       $ r   )_sym_notrH   s    r   r   SymNode.sym_nots      }}r    c                $    U R                  U5      $ r   )_eqrB   s     r   eq
SymNode.eqv      xxr    c                $    U R                  U5      $ r   )_nerB   s     r   ne
SymNode.ney  r   r    c                $    U R                  U5      $ r   )_gtrB   s     r   gt
SymNode.gt|  r   r    c                $    U R                  U5      $ r   )_ltrB   s     r   lt
SymNode.lt  r   r    c                $    U R                  U5      $ r   )_lerB   s     r   le
SymNode.le  r   r    c                $    U R                  U5      $ r   )_gerB   s     r   ge
SymNode.ge  r   r    c                "    U R                  5       $ r   )_floorrH   s    r   floorSymNode.floor  r   r    c                "    U R                  5       $ r   )_is_integerrH   s    r   
is_integerSymNode.is_integer  s    !!r    c                "    U R                  5       $ r   )
_sym_floatrH   s    r   r	   SymNode.sym_float  s      r    c                "    U R                  5       $ r   )_sym_intrH   s    r   sym_intSymNode.sym_int  r   r    c                "    U R                  5       $ r   )_ceilrH   s    r   ceilSymNode.ceil  s    zz|r    c                "    U R                  5       $ r   )_negrH   s    r   negSymNode.neg  r   r    c                $    U R                  U5      $ r   )_sym_minrB   s     r   r   SymNode.sym_min      }}U##r    c                $    U R                  U5      $ r   )_sym_maxrB   s     r   r   SymNode.sym_max  r!  r    c                $    U R                  X5      $ r   )_sym_ite)r0   then_valelse_vals      r   r
   SymNode.sym_ite  s    }}X00r    c                $    U R                  X5      $ r   )_is_contiguousr0   sizesstridess      r   is_contiguousSymNode.is_contiguous  s    ""522r    c                $    U R                  X5      $ r   )_is_channels_last_contiguous_2dr,  s      r   is_channels_last_contiguous_2d&SymNode.is_channels_last_contiguous_2d      33ECCr    c                $    U R                  X5      $ r   )_is_channels_last_contiguous_3dr,  s      r   is_channels_last_contiguous_3d&SymNode.is_channels_last_contiguous_3d  r5  r    c                $    U R                  X5      $ r   )_is_channels_last_strides_2dr,  s      r   is_channels_last_strides_2d#SymNode.is_channels_last_strides_2d      00@@r    c                $    U R                  X5      $ r   )_is_channels_last_strides_3dr,  s      r   is_channels_last_strides_3d#SymNode.is_channels_last_strides_3d  r>  r    c                $    U R                  X5      $ r   )'_is_non_overlapping_and_dense_indicatorr,  s      r   &is_non_overlapping_and_dense_indicator.SymNode.is_non_overlapping_and_dense_indicator  s    ;;EKKr    c                $    U R                  U5      $ r   )r   rB   s     r   sym_orSymNode.sym_or  r   r    c                $    U R                  U5      $ r   )r   rB   s     r   sym_andSymNode.sym_and  r   r    c                $    U R                  U5      $ r   )_bitwise_andrB   s     r   bitwise_andSymNode.bitwise_and  r   r    c                $    U R                  U5      $ r   )_bitwise_orrB   s     r   
bitwise_orSymNode.bitwise_or  s    &&r    c                $    U R                  U5      $ r   )r   rB   s     r   truedivSymNode.truediv  r   r    c                $    U R                  U5      $ r   )r   rB   s     r   floordivSymNode.floordiv  r   r    c                $    U R                  U5      $ r   )r   rB   s     r   powSymNode.pow  s    ~~e$$r    c                V    U R                  X5      R                  [        U S5      5      $ )N   )rE  r   to_noder,  s      r   is_non_overlapping_and_dense$SymNode.is_non_overlapping_and_dense  s'    ::5JMMgVZ\]N^__r    c                &    U R                  SS5      $ N r   )	guard_intrH   s    r   int_SymNode.int_  s    ~~b!$$r    c           
     &   SS K nSSKJnJn  U" 5       (       a3  [	        U U" [
        R                  [        S U 5       5      40 5      5      $ U Vs/ s H  oUR                  PM     nnUR                  " U6 n/ nS n	U H-  nUR                  c    O*UR                  UR                  5        M/     [        U5      n	U R                  R                  [
        R                  [        S U 5       5      45      u  p[        XpR                  [         XS9$ s  snf )Nr   get_proxy_modehandle_sym_dispatchc              3  8   #    U  H  n[        U5      v   M     g 7fr   )	wrap_node.0as     r   	<genexpr>"SymNode.sym_sum.<locals>.<genexpr>  s     6A9Q<<   c              3  8   #    U  H  oR                   v   M     g 7fr   r8   ro  s     r   rr  rs    s     !:T))Trt  rv  )rg   "torch.fx.experimental.proxy_tensorrk  rl  r`  torchsym_sumtupler)   Addr/   r   sumr*   _create_fx_call_functionr   r   )r0   argsrg   rk  rl  rq  exprsout
size_hintsout_hintr8   _s               r   ry  SymNode.sym_sum  s    	

 #MM6668  "&&A&ii
Avv~aff% 
 :H^^<<MME!:T!::<


 sNNCKK# 's   Dc                8    U R                   R                  X5      $ r   )r*   evaluate_sym_node)r0   size_obliviouss     r   evaluateSymNode.evaluate  s    ~~//EEr    c                    U R                  5       n [        U5      $ ! [         a    [        R	                  SU5        e f = f)NzFailed to convert to int: %s)r  r   	Exceptionlogwarningr0   fileliners       r   rf  SymNode.guard_int  s>     MMO	q6M 	KK6:	   
 "?c                    U R                  5       n [        U5      $ ! [         a    [        R	                  SU5        e f = f)NzFailed to convert to float: %s)r  r   r  r  r  r  s       r   guard_floatSymNode.guard_float  s>     MMO	8O 	KK8!<	r  c                    U R                  5       n [        U5      $ ! [         a    [        R	                  SU5        e f = f)NFailed to convert to bool: %sr  r   r  r  r  r  s       r   
guard_boolSymNode.guard_bool  s>     MMO	7N 	KK7;	r  c                &   SSK Jn  U R                  5       (       aC  U" U R                  5      (       d,  U R                  R
                  (       d  U R                  X5      $ U R                  R                  U R                  U SU 3U R                  S9$ )Nr   rU   :rv  )	r(   rV   rR   r)   r*   +prefer_deferred_runtime_asserts_over_guardsr  defer_runtime_assertr8   )r0   r  r  rV   s       r   expect_trueSymNode.expect_true  sw    O MMOO)$))44NNNN ??4..
 ~~22II$q' 3 
 	
r    c                    SSK Jn  U R                  U R                  S5      5      nUR	                  X5      nU(       a&  U R                  5       (       d  U" [        U 5      5        U$ )Nr   )_advise_is_size)r(   r  r  r   r  rR   r   )r0   r  r  r  br  s         r   expect_sizeSymNode.expect_size1  sJ    IGGDMM!$%MM$%
 T]]__F4L)r    c                    U R                  SS9n [        U5      $ ! [         a    [        R	                  SU5        e f = f)a  
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)r  r  r  r  s       r   guard_size_obliviousSymNode.guard_size_oblivious?  sC     MMM.	7N 	KK7;	s   
 ">c                &    U R                  SS5      $ rd  )r  rH   s    r   bool_SymNode.bool_S  s    r1%%r    c                    g)NTr   rH   s    r   is_symbolicSymNode.is_symbolicV      r    c                    g r   r   rH   s    r   
nested_intSymNode.nested_intY  r  r    c                    g)NFr   rH   s    r   is_constantSymNode.is_constant\  s    r    )r3   r6   r#   r7   r8   r.   r*   )NNF)r/   z!Optional[Union[int, float, bool]])r*   r   returnr   )rC   r   r  r   )r  r   r   )r  zbuiltins.str)r  r   )F)\__name__
__module____qualname____firstlineno____doc__r#   __annotations__r<   r?   rD   rI   propertyr)   r/   rR   r_   rc   rj   ro   rr   ru   rx   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/  r3  r8  r<  rA  rE  rH  rK  rO  rS  rV  rY  r\  ra  rg  ry  r  rf  r  r  r  r  r  r  r  r  r  __static_attributes__r   r    r   r   r   G   s    "'$& !P4
 0P4d


X 2 2  &0"$#




$$    &+! *()##"!$$13DDAAL (')(%`%#LJF
$(&r    r   r   r   r   andrO  r  r   r	  r   r   r  r   r  c                "    U R                  5       $ r   )r  xs    r   <lambda>r  n  s
    ALLNr    r  r   r   r   r   r   r  orrS  r   r   r   r   r   r	   r
   r   r   r   r   r   >	   r   r  r   r  r	  r   r  r   r	   c                   ^  U 4S jnU$ )Nc                ,   > [        U ST 35      " 5       $ )N_sym_)getattr)r0   names    r   fn_get_sym_node_fn.<locals>.fn  s    tuTF^,..r    r   r  r  s   ` r   _get_sym_node_fnr    s    / Ir    )sqrtcoscoshsinsinhtantanhasinacosatanlog2sym_r  >   r  r  r
   r   >   r   r   r   >   r   r  sym_log2r  )rO  rS  >   r   r	   r   r   >   r  r	  r   r   >   r   r  r   r  r   r   r  r  r   r  ra  c                    SSK Jn  U" X5      $ )Nr   )FloatTrueDiv)torch.utils._sympy.functionsr  )rq  r  r  s      r   _sympy_float_truedivr        9r    c                    SSK Jn  U" X5      $ )Nr   )
IntTrueDiv)r  r  )rq  r  r  s      r   _sympy_int_truedivr    s    7ar    c                    SSK Jn  U" X5      $ )Nr   )FloorDiv)r  r  )rq  r  r  s      r   _sympy_floordivr        5A>r    c                v    SSK JnJn  U R                  (       a  UR                  (       a  U" X5      $ U" X5      $ )Nr   Mod	PythonMod)r  r  r  is_nonnegative)rq  r  r  r  s       r   
_sympy_modr    s*    ;A,,1yr    c                    SSK Jn  U" X5      $ )Nr   )PowByNatural)r  r  )rq  r  r  s      r   _sympy_pow_by_naturalr    r  r    c                    SSK Jn  U" X5      $ )Nr   )FloatPow)r  r  )rq  r  r  s      r   _sympy_float_powr    r  r    c                ,    SS K nUR                  X5      $ rf   )rg   Andrq  r  rg   s      r   
_sympy_andr    s    99Q?r    c                ,    SS K nUR                  X5      $ rf   )rg   Orr  s      r   	_sympy_orr        88A>r    c                    SSK Jn  U" X5      $ )Nr   )LShift)r  r  )rq  r  r  s      r   _sympy_lshiftr        3!<r    c                    SSK Jn  U" X5      $ )Nr   )RShift)r  r  )rq  r  r  s      r   _sympy_rshiftr    r  r    c                b   [        U 5      S:X  a  U/$ SSKJnJn  U" U S   5      U" U5      :  a  X/-   $ U" U S   5      U" U5      :  a  U/U -   $ S[        U 5      S-
  pTXE::  a:  XE-   S-  nUR	                  X   U5      nUS:X  a  gUS:  a  US-   nOUS-
  nXE::  a  M:  U R                  XA5        U $ )zg
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  %  s    
 <AyA R !HW$55i'' Q 8G#44y<''3|$q(
+za|'8'BQa'C7D + %r    c                  ^	 SSK m	SSKJn  U	4S jnSSKJn  X&" U 5      -  nX6" U5      -  nU(       a  U(       a  U" U R
                  S   5      U" UR
                  S   5      :  a  U" U R
                  UR
                  -   5      $ U" U R
                  S   5      U" UR
                  S   5      :  a  U" UR
                  U R
                  -   5      $ U(       a;  UR                  (       a*  [        [        U R
                  5      U5      nUb  U" U5      $ U(       a;  U R                  (       a*  [        [        UR
                  5      U 5      nUb  U" U5      $ T	R                  X5      nU" U5      U4$ )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                0   > TR                   " U SS06nSU4$ )Nr  FT)r{  )r  resultrg   s     r   make_optimized&_optimized_add.<locals>.make_optimizedW  s     L959f~r    )_is_symbols_binary_summationr  )
rg   r	  r  r  r  _args	is_symbolr  listr{  )
lhsrhslhs_is_optimized_summationrhs_is_optimized_summationsortkeyr  r  new_argsr  rg   s
            @r   _optimized_addr#  G  s0    9 J">s"CC">s"CC!&@399R=!GCIIaL$99!#))cii"788399Q< 7399R=#99!#))cii"788 "cmm,T#))_cB!(++ "cmm,T#))_cB!(++YYs F(0&99r    c                    SSK Jn  U" X5      $ )Nr   )BitwiseFn_bitwise_and)r  r%  )rq  r  r%  s      r   rN  rN  x  s    B &&r    c                    SSK Jn  U" X5      $ )Nr   )BitwiseFn_bitwise_or)r  r'  )rq  r  r'  s      r   rR  rR  ~  s    A%%r    )r   r   r   r   r   r   r  rO  r  rS  r   r   r   r   r   c                   SS K n[        XR                  5      (       aq  U R                  n[	        U5      S:X  aV  [        US   UR
                  5      (       a8  US   R                  (       a$  UR                  US   5      nUS   U:X  a  XCS   -  $ [        XR
                  5      (       a  XR                  U 5      :X  d  [        XR                  5      (       a  UR                  U 5      $ U" U 5      $ )Nr   r  r_  )rg   r,   Mulr~  r  rh   r  r   )rq  r  rg   aacoefs        r   _floor_ceil_helperr,    s    !YYVVr7a<Jr!uekk::r!u?O?O==A'D!u}e|#1kk""q!!a''}}Qa5Lr    c                    SSK Jn  U" U 5      $ )Nr   )
FloorToInt)r  r.  )rq  r.  s     r   _sympy_floorr/        7a=r    c                    SSK Jn  U" U 5      $ )Nr   )
TruncToInt)r  r2  )rq  r2  s     r   _sympy_truncr3    r0  r    c                    SSK Jn  U" U 5      $ )Nr   )	CeilToInt)r  r5  )rq  r5  s     r   _sympy_ceilr6    s    6Q<r    c                ,    SS K nUR                  X5      $ rf   )rg   Eqr  s      r   	_sympy_eqr9    r  r    c                ,    SS K nUR                  X5      $ rf   )rg   Ner  s      r   	_sympy_ner<    r  r    c                ,    SS K nUR                  X5      $ rf   )rg   Gtr  s      r   	_sympy_gtr?    r  r    c                ,    SS K nUR                  X5      $ rf   )rg   Ltr  s      r   	_sympy_ltrB    r  r    c                ,    SS K nUR                  X5      $ rf   )rg   Ler  s      r   	_sympy_lerE    r  r    c                ,    SS K nUR                  X5      $ rf   )rg   Ger  s      r   	_sympy_gerH    r  r    c                    SSK Jn  U" X5      $ )Nr   )Min)r  rJ  )rq  r  rJ  s      r   
_sympy_minrK        0q9r    c                    SSK Jn  U" X5      $ )Nr   Max)r  rO  )rq  r  rO  s      r   
_sympy_maxrP    rL  r    c                4    SS K nUR                  X4US45      $ )Nr   T)rg   	Piecewise)rq  r   frg   s       r   
_sympy_iterT    s    ??A6At9--r    c                   ^  U 4S jnU$ )Nc                r   > SS K n[        UR                  R                  R                  ST 35      " U 5      $ )Nr   OpaqueUnaryFn_)r  r  utils_sympy	functions)rq  rx  r  s     r   r  _get_sym_math_fn.<locals>.fn  s/    +u{{))33~dV5LMaPPr    r   r  s   ` r   _get_sym_math_fnr\    s    Q
 Ir    _sympy_c                ,    SS K nUR                  U 5      $ rf   )rg   Abs)rq  rg   s     r   
_sympy_absr`    s    99Q<r    c                8    SSK JnJn  Uc  U" U 5      $ U" X5      $ )Nr   )RoundDecimal
RoundToInt)r  rb  rc  )numberr   rb  rc  s       r   _sympy_roundre    s     E&!!F,,r    c                    SSK Jn  U" U 5      $ Nr   )ToFloat)r  rh  )rq  rh  s     r   _sympy_sym_floatri    s    4 1:r    c                d    SS K nSSKJn  UR                  U" UR	                  U 5      5      U 5      $ rg  )rg   r  rh  r8  r	  )rq  rg   rh  s      r   _sympy_is_integerrk    s&    488GEKKN+Q//r    )r   r  c                ^    [        U 5      n[        X[        [        US-
  SS5      5      5      $ )Nr_  r  )r  sympy_is_contiguous_genericr  range)r-  r.  dims      r   sympy_is_contiguousrp  F  s*    
e*C&utE#'2r<R7STTr    c                   SS K n[        U 5      n[        U5      U:w  a  UR                  $ UR                  nUR                  R
                  nU HI  nXSR                  X   UR                  R
                  5      UR                  X   U5      -  -  nX`U   -  nMK     [        U5       H-  nXSR                  X   UR                  R                  5      -  nM/     U$ rf   )	rg   r  rn   rm   SOner8  rn  Zero)r-  r.  	dim_orderrg   ro  r/  zds           r   rm  rm  K  s    
e*C
9~{{JJMA%(EGGKK8588GJPQ;RRR	1X  3Z%(EGGLL99 r    c                    [        X/ SQ5      $ N)r_     r  r   rm  r-  r.  s     r   $sympy_is_channels_last_contiguous_2dr}  c  s    &u|DDr    c                    [        X/ SQ5      $ N)r_     rz  r  r   r{  r|  s     r   $sympy_is_channels_last_contiguous_3dr  g  s    &uGGr    c                ~   SS K nSSKJn  [        U 5      nU[        U5      :w  a  UR                  $ UR
                  R                  nUR                  nXsR                  US   S5      -  nU HM  nXsR                  X   S5      X   U:  -  -  nUS:X  a  XsR                  XaS   5      -  nX   U" X   S5      -  nMO     U$ )Nr   rN  r_  )	rg   r  rO  r  rn   rr  rt  rm   r;  )	r-  r.  ru  rg   rO  ro  mr  rw  s	            r   &sympy_is_channels_last_strides_genericr  k  s    0
e*C
c)n{{A

A '!*a	  A	XXeh"gjAo66 6!QZ((A JUXq))' * Hr    c                    [        X/ SQ5      $ ry  r  r|  s     r   !sympy_is_channels_last_strides_2dr    s    1%,OOr    c                    [        X/ SQ5      $ r  r  r|  s     r   !sympy_is_channels_last_strides_3dr    s    1%/RRr    c                "    SSK Jn  U" / U QUQ76 $ )Nr   )!IsNonOverlappingAndDenseIndicator)r  r  )r-  r.  r  s      r   -_sympy_is_non_overlapping_and_dense_indicatorr    s    N,>e>g>>r    )r/  r3  r8  r<  rA  rE  )r   r   c                "   [        U[        5      (       a  UR                  $ [        U5      [        L a  U R                  U5      $ [        U5      [        L a  U R                  U5      $ [        U5      [        L a  U R                  U5      $ [        $ r   )r,   r-   r{   r4   r   r   r   r   r   r   NotImplemented)r0   r   s     r   r`  r`    sq    #x  xx	cd	~~c""	cc	}}S!!	ce	s## r    c                :   [        U [        5      (       a  U R                  b  U R                  $ U R                  5       (       a  [	        U 5      $ U R                  5       (       a  [        U 5      $ U R                  5       (       a  [        U 5      $ [        SU  35      e)Nzunrecognized return type )
r,   r   r7   rr   r   ru   r   rx   r   AssertionErrorr  s    r   rn  rn    st    !W!**"8zzxxzzay	
{	
qz8<==r    c                    [         U    $ r   )METHOD_TO_OPERATOR)methods    r   r   r     s    f%%r    c                  ^ ^ [        S5      " T5      mT [        ;   a  T  S3nOT nSS jnU 4S jnUUU 4S j5       nUUU 4S j5       nT [        ;   a  [        [        SU 3U5        g T S:X  a  UU 4S jn[        [        SU 3U5        g T S	:X  a  SUU 4S
 jjn[        [        SU 3U5        g [        [        SU 3U5        g )N   r  c                 T   SS K n U R                  R                  U R                  R                  U R                  R
                  R                  U /nSS Kn U Vs1 s H  n[        R                  " U5      iM     snU R                  R                  R                  5       -  S1-  $ s  snf )Nr   z<string>)rx  _dynamo
eval_framerX  fxexperimentalr   torch._dynamo.guardsinspectgetfileguardsuninteresting_files)rx  modsr  s      r   r  -_make_node_magic.<locals>.uninteresting_files  s     MM$$MMHH!!**	
 	$ *..AW__Q.mm""6689l	
.s    B%c                N   >^  [         R                  " T 5      SU U4S jj5       nU$ )Nc                   >^^^ Uc	  T" U 5      mOT" X5      m[         R                  R                  R                  (       a#  Ub  X/mOU /mSU4S jjm[	        SUUUU4S jS9  T$ )Nc                "  > SS K nU R                  b  g [        U 5      [        T5      :X  a  g [        U R                  UR
                  UR                  45      (       a  g U R                  UR                  UR                  4;   a  g [        U 5      $ rf   )	rg   r7   idr,   r)   r   rh   rm   rn   )r   rg   r  s     r   get_idM_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.get_id  so     ((4#HF3##HMMEMM5;;3OPP#!5::u{{*CC#h<'r    expression_createdc            
       > T[        T5      [        T5      T V s/ s H  n [        U 5      PM     sn T Vs/ s H  nT" U5      c  M  T" U5      PM     sn[        R                  " S5      [        R                  " S5      S.$ s  sn f s  snf )Nrz  )r  r  	result_id	argumentsargument_ids
user_stackstack)r   r  
structuredget_user_stackget_framework_stack)rq  ir  r  r  r  s     r   r  O_make_node_magic.<locals>.capture_provenance.<locals>.wrapper.<locals>.<lambda>	  s{    "("%f+%'Z6?%@ic!fi%@/8)/8!F1IIF1Iy) '1&?&?&B!+!?!?!B
) &A)s   B
BB)metadata_fn)r  zOptional[int])rx  _logging	_internalGET_DTRACE_STRUCTUREDr   )r0   rC   r  r  r  r  r  s     @@@r   wrapper=_make_node_magic.<locals>.capture_provenance.<locals>.wrapper  s_    }DD~~''==$!%I!%I( "(
! Mr    r   )	functoolswraps)r  r  r  s   ` r   capture_provenance,_make_node_magic.<locals>.capture_provenance  s&    		(	 
(	T r    c           
       > SSK JnJn  [        T5      nS nU R                  b*  UR                  b  U" U R                  UR                  5      n[
        R                  T5      nU(       a'  Ub$  [        X" [        U 5      [        U5      5      5      $ U" 5       (       a'  [        X" U[        U 5      [        U5      40 5      5      $ [        U[        5      (       d   eSn TS:X  a  SSKJnJn	  U R                  n
U R                  R                   (       d)  U
R#                  U R                  5      R$                  S:  ab  UR                  R                   (       d)  U
R#                  UR                  5      R$                  S:  a  U" U R                  UR                  5      nOxU	" U R                  UR                  5      nOZTS:X  a6  T" U R                  UR                  U R&                  UR&                  5      u  p{OT" U R                  UR                  5      n [.        R1                  STU R                  UR                  U5        T[2        ;   a  [4        nOJT[6        ;   a  [8        nO9U R:                  [4        L d  UR:                  [4        L a  [4        nOU R:                  nUb   Ub  [        U[<        5      (       d  U" U5      nU R                  R?                  X@R@                  UR@                  45      u  p[        UU R                  UUUUS	9nU$ ! [(         a.    [*        R-                  STU R                  UR                  5        e f = f)
Nr   rj  Fr   r  r   failed to eval %s(%s, %s)z%s %s %s -> %s)r8   r9   )!rw  rk  rl  r   r/    alternate_impl_if_hinted_methodsgetr`  rn  r,   r   r  r  r  r*   r)   r  bound_sympylowerr#   r  r  r  sym_node_logdebugalways_float_magic_methodsr   always_bool_magic_methodsr   r.   r-   r}  r8   )r0   rC   rk  rl  opr  alternate_implr9   r  r  r*   r  r.   r8   r  r  funcr  s                   r   binary_magic_impl+_make_node_magic.<locals>.binary_magic_impl  s   	

  '99 UZZ%;$))UZZ0H9==fEh24	$5AQ!RSS)"y	%@P.QSUV  %))))#	G !NN	II,, ,,TYY7==BJJ-- ,,UZZ8>>!Cdii4C#DIIuzz:C5-1IIJJ--..	.*$c 499ejj1 	+VTYY

CP //F00F[[E!U\\U%:F[[F $x22h'H ^^<<u}}-

 NN 3
 U  	KK3VTYY

S	s   B?L L <;L 8L 8Mc           	       > SSK JnJn  [        T5      nU" 5       (       a  [	        X" U[        U 5      40 5      5      $ U R                  nTS:X  d  TS:X  a  U R                  R                  U5      n T
" U5      n[        R                  ST
XE5        S nU R                  b  U" U R                  5      nT[        ;   a  [         nO.T["        ;   a  [$        nOT[&        ;   a  [(        nOU R*                  nU R                  R-                  X0R.                  45      u  p[1        XPR                  XvUS9$ ! [         a    [        R                  STU5        e f = f)Nr   rj  r	  ceilingzfailed to eval %s(%s)z%s %s -> %srv  )rw  rk  rl  r   r`  rn  r)   r*   _simplify_floor_divr  r  r  r  r  r/   always_int_magic_methodsr   r  r   r  r   r.   r}  r8   r   )r0   rk  rl  r  r)   r  r  r.   r8   r  r  r  s             r   unary_magic_impl*_make_node_magic.<locals>.unary_magic_imply  s,   	

  '4!4R)D/9KR!PQQyyW) 3>>55d;D	t*C 	=$:99 $))}H--F00F11F[[F^^<<R,,Q
sNNFgNN%  	KK/>	s   2D. .#Er
   c                  > SSK JnJn  U R                  (       a  UR                  OUR                  nU" 5       (       a6  [	        U U" [
        [        U 5      [        U5      [        U5      40 5      5      $  T	" U R                  UR                  UR                  5      nU R                  R                  [
        U R                  UR                  UR                  45      u  px[        X`R                  UR                  XWS9$ ! [         a9    [        R                  ST
U R                  UR                  UR                  5        e f = f)Nr   rj  zfailed to eval %s(%s, %s, %s)rv  )rw  rk  rl  r/   r`  r
   rn  r)   r  r  r  r*   r}  r8   r   r.   )	pred_node	then_node	else_noderk  rl  r  r  r8   r  r  r  s            r   sym_ite_impl&_make_node_magic.<locals>.sym_ite_impl  s   
 *3y~~Y^^H'%i0%i0%i0
  
9>>9>>9>>J #,,EE)++Y->->	@Q@QRJG (()*:*:H   3NNNNNN s   6(D   AEr   c           	     (  > SSK JnJn  [        R                  nU" 5       (       a  [        X" U[        U 5      U40 5      5      $ U R                  n T" XQ5      nUc  [        nOU R                  nS nU R                  b  U" U R                  U5      nU R                  /n	Ub  U	R                  U5        U R                   R#                  U[%        U	5      5      u  p['        X`R                   XxU
S9$ ! [         a    [        R                  STXQ5        e f = f)Nr   rj  z!failed to eval %s(%s, ndigits=%s)rv  )rw  rk  rl  builtinsr   r`  rn  r)   r  r  r  r   r.   r/   r8   r   r*   r}  rz  r   )r0   r   rk  rl  r  r)   r  r.   r  r~  r8   r  r  r  s               r   
round_impl$_make_node_magic.<locals>.round_impl  s   
 B-b9T?G2LbQ  99D4)
 Hyy$dii1 LL>D"G$@@U4[QJG3'RR1  ?Ws   C. .#D)r  zset[str]r   )r   2magic_methods_on_operator_with_trailing_underscoreunary_methodssetattrr   )	r  r  method_attrr  r  r  r  r  r  s	   ``       r   _make_node_magicr    s    S>$DCCl
",\ \ \| "O "OH 1[M*,<=	9	&	P 	1[M*L9	7	'	S '	SR 	1[M*J71[M*,=>r    c                   ^ ^ UU 4S jn[        [        ST  3U5        UU 4S jn[        [        R                  [
           T 5      (       d#  [        [        R                  [
           T U5        g g )Nc                N  > SSK JnJn  [        [        R
                  [           T5      nU" 5       (       aJ  [        U U" UU Vs/ s H  n[        U5      PM     snU Vs/ s H  n[        U5      PM     sn40 5      5      $ U Vs/ s H  ofR                  PM     nnU Vs/ s H  ofR                  PM     nn T" Xx5      n	/ n
S nU H-  nUR                  c    O\U
R                  UR                  5        M/     / nU H-  nUR                  c    O'UR                  UR                  5        M/     U" X5      nTR                  S5      (       a  [         nO["        n[%        XR&                  X5      $ s  snf s  snf s  snf s  snf ! [         a    [        R                  STXx5        e f = f)Nr   rj  r  
_indicator)rw  rk  rl  r  sysmodulesr  r`  rn  r)   r  r  r  r/   r   endswithr   r   r   r*   )r0   r-  r.  rk  rl  r  r]   
size_exprsstride_exprsr  r  r  stride_hintsr.   r  r  s                 r   sizes_strides_impl4_make_node_sizes_strides.<locals>.sizes_strides_impl  s   	

 S[[*F3#,12EqilE274S7aYq\74ST  ',,effe
,(/010	z0C 
Avv~aff% 
 L66>##AFF+ 
 j7 ??<((FFsNNF==E 34S -0  	KK3VZV	s$   E-E2E7 E<8F #F$r  c                D  > SS K nSSKJn  [        R                  " X5       H  n[        U[        5      (       d  M  [        [        UR                  T5      " U  Vs/ s H  n[        UR                  U5      PM     snU Vs/ s H  n[        UR                  U5      PM     sn5      5      s  $    TS:X  a  U" X5      $ [        T" U  Vs/ s H  oBR                  U5      PM     snU Vs/ s H  oBR                  U5      PM     sn5      5      $ s  snf s  snf s  snf s  snf )Nr   )!eval_is_non_overlapping_and_denserE  )rg   r(   r  	itertoolschainr,   r   rn  r  r{   r`  r   sympify)r-  r.  rg   r  rq  r  r  r  s         r   sizes_strides_user4_make_node_sizes_strides.<locals>.sizes_strides_user3  s    	
 0A!V$$ AFFF+5:;U+U;5<=W+W=  1 ==4UDD /45u!]]1%u5/67w!]]1%w7  <= 67s    D D	D)D)r  r   hasattrr  r  r  )r  r  r  r  s   ``  r   _make_node_sizes_stridesr    sV    .>` Gq\#56
6 3;;x(&11H%v/AB 2r    c                J  ^ ^	^
^^^ T [         ;   a  ST  3mOT mSS jm	S m
T [        ;   a  S mOS mU 4S jmU	U
U UU4S jnU	U
U UUU4S jnU	U
U UUU4S	 jnT [        ;   a  [        US
T  S
3U5        g T [        ;   a#  [        UT 5      n[        UT [        X%5      5        g T S:X  a  U	U4S jn[        US
T  S
3U5        g T S:X  a  SU	U
U 4S jjn[        US
T  S
3U5        g T nT [        ;   a	  [        T    n[        US
U S
3U5        T [        ;   a  [        USU S
3U5        g g )Nr  c                    [        U [        [        [        45      (       a  U $ [        U [        5      (       a  U R
                  R                  SS5      $ [        S5      e)Nre  r   z*expect to be called with constant SymBools)r,   r   r   r   r   r{   r  r  r  s    r   get_constant&_make_user_magic.<locals>.get_constantb  sK    a#ud+,,Ha!!66$$R++IJJr    c                    [        U [        [        [        45      (       a  g[        U [        [
        [        45      (       a  U R                  R                  5       $ g)NTF)	r,   r   r   r   r   r   r   r{   r  r  s    r   r  %_make_user_magic.<locals>.is_constanti  sC    a#ud+,,a&(G45566%%''r    c                    [        U [        5      (       a-  [        U R                  R	                  [        U 5      5      5      $ U $ )z;Implements True+True=2, which works in python but not sympy)r,   r   r   r{   r   r   r  s    r   promote!_make_user_magic.<locals>.promote  s0    !W%%affooc!f566Hr    c                    U $ r   r   r  s    r   r  r    s    Hr    c                ,  > TS;  a  X4$ [        U [        [        R                  45      n[        U[        [        R                  45      nU(       d  U(       a:  U(       d  [        R                  " U 5      n U(       d  [        R                  " U5      nX4$ )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  )r,   r   rx  r   r	   )r0   rC   f_selff_otherr  s       r   promote2"_make_user_magic.<locals>.promote2  su      
 
$ ;D5%.."9:UUENN$;<Wt,.{r    c                   > T" U 5      n T" U 5      (       a  [        T5      " T" U 5      5      $ [        [        U R                  T5      " 5       5      $ r   )r   rn  r  r{   )r0   r  r  r  r  r  s    r   r  *_make_user_magic.<locals>.unary_magic_impl  sE    t}t&v.T0BCCK8:;;r    c           	       > [        U[        [        [        [        [
        [        45      (       d  [        $ [        R                  STX5        T" U 5      n T" U5      nT	" X5      u  pT" U 5      (       a  [        T5      " T" U 5      U5      $ T" U5      (       a  T" U5      n[        U R                  U5      nU[        L a  [        $ [        [        U R                  T5      " U5      5      nT" U5      (       a  T" U5      $ U$ )NzMAGIC %s %s %s)r,   r   r   r   r   r   r   r  r  r  r   r`  r{   rn  r  
r0   rC   
other_noderetr  r  r  r  r  r  s
       r   r  +_make_user_magic.<locals>.binary_magic_impl  s    %#udFHg!NOO!!+VTAt}t+t&v.T0BEJJu 'ETYY.
'!!		;7
CD$/$4$4|C =#=r    c           	       > [        U[        [        [        [        [
        [        45      (       d  [        $ T" U 5      n T" U5      nT	" X5      u  pT" U 5      (       a  [        T5      " T" U 5      U5      $ T" U5      (       a  T" U5      n[        U R                  U5      nU[        L a  [        $ [        [        UT5      " U R                  5      5      nT" U5      (       a  T" U5      $ U$ r   )r,   r   r   r   r   r   r   r  r   r`  r{   rn  r  r  s
       r   rbinary_magic_impl,_make_user_magic.<locals>.rbinary_magic_impl  s    %#udFHg!NOO!!t}t+t&v.T0BEJJu 'ETYY.
'!!
K8CD$/$4$4|C =#=r    __r
   c                  > U R                   n[        X15      n[        X25      nU[        L d	  U[        L a  [        $ [        U[        5      (       a/  [        U[        5      (       a  UR
                  UR
                  :X  d   e[        [        U R                   T5      " XE5      5      nUR                   R                  5       (       a  T" U5      $ U$ r   )	r{   r`  r  r,   r   r.   rn  r  r  )	predr'  r(  r  r  r  r
  r  r  s	          r   sym_ite_magic_impl,_make_user_magic.<locals>.sym_ite_magic_impl  s    		I	4I	4IN*i>.I%%9g..y'22$$	(8(889 GDII{;IQRC(+(<(<(>(><$GCGr    r   c                   > T" U 5      (       a  [         R                  " T" U 5      U5      $ [        [        U R                  T5      " U5      5      $ r   )r  r   rn  r  r{   )r0   r   r  r  r  s     r   round_magic_impl*_make_user_magic.<locals>.round_magic_impl   s?    4  ~~l4&8'BBWTYY7@AAr    __r)r  z2Union[SymInt, int, SymFloat, float, SymBool, bool]r   )	r  bool_becomes_int_magic_methodsunary_magic_methodsr  unary_nonmagic_methodsr  r   bitwise_opsreflectable_magic_methods)r  	user_typer  r  r  origr  r  method_namer  r  r  r  r  s   `        @@@@@r   _make_user_magicr   Y  sK    CCVHoKB //		!T< <> >"> >  $$	Rxr?,<=	)	)y&)	6>2B#IJ	9		H 		Rxr?,>?	7		B 	B 		Rxr?,<=[ %f-K	R}B/1BC..I[M46HI /r    )FFr   )
__future__r   r  r  r  r  loggingmathoperatorr  r   r   typingr   r   r   rx  torch._logging.structuredr  r  r	   r
   r   r   r   r   r   r   torch._loggingr   r(   r   	getLoggerr  r  getArtifactLoggerr  __all__torch.typesr   r-   r   r   r   r   r   r   r  r   r	  r   rY  r  r   r  r   r   r   r   r   r  r   r\  r   r   r   rV  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#  rN  rR  r  r,  r/  r3  r6  r9  r<  r?  rB  rE  rH  rK  rP  rT  r  current_moduler\  priv_sympy_namer  r  r`  re  ri  rk  invertr   rp  rm  r}  r  r  r  r  r  sizes_strides_methodsminmaxr  r`  rn  r   r  r  itemsr  r  r   r   r    r   <module>r:     s   #        
 / 1 1  . .	 	 	 - >!~~//*E = 1V Vt#	8<<#	8<<# 
8<<# 
8==	#
 8==# DII# 	(++# TZZ# TZZ# H%%# 	(++# 	(++# *# 	(++# hoo#  	(++!#" 
8<<##$ 
8<<%#& 	(++'#( 
8<<)#* 	(,,+#, (,,-#. /#0 hll1#2 X^^3#4 hoo5#6 
8<<7#8 9#: w;#< w=#> w?#@ wA#B X%%C#D 8##E# J
  DdV}HzNMGX/56#*5-#@x H%NN8    $&<< > !6 & ,/FF  J  7<T] 2  X DdV}H""8, 
 H  "F LQ.:b'& <<<<+!
)%# &$. X& Dv&O	$	B$33BObkNOR0	  o-0x 
8<< 	)	
 	) 	) 	) 	) 	) \ \ ! K 
8<< z  z!" z#$ 
:%& #)0 DdV}H%nv6FGM(  	(M>U
0EH%PPS? )&J&J#D#D.[	  ||||$  >&e?P	TCn "'')LFDVT" * *//1LFDVT* 2tJn "'')LFD(()))*((F6T,T)VV$[ * * r    