
    sg+                        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 d dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ ddlmZ g dZd Zd Zd Z  G d dejB                        Z" G d dejB                        Z# G d dejB                        Z$ G d dejB                        Z% G d dejB                        Z& G d de"      Z' G d dejB                        Z( G d  d!ejB                        Z) G d" d#ejB                        Z* G d$ d%ejB                        Z+ G d& d'ejB                        Z, G d( d)e	e      Z- G d* d+e-e      Z. G d, d-e-e      Z/d. Z0d/ Z1 G d0 d1ejB                        Z2 G d2 d3ejB                        Z3 G d4 d5ejB                        Z4 G d6 d7ejB                        Z5 G d8 d9ejB                        Z6 G d: d;ejB                        Z7 G d< d=ejB                        Z8 G d> d?ejB                        Z9 G d@ dAejB                        Z: G dB dCejB                        Z; G dD dEejB                        Z<dF Z= e=dG      Z> e=dH      Z? e=dI      Z@ e=dJ      ZA e=dK      ZB e=dL      ZC e=dM      ZD e=dN      ZE e=dO      ZF e=dP      ZG e=dQ      ZH e=dR      ZI e=dS      ZJy)T    N)Ssympify)Expr)Application)_torf	fuzzy_andfuzzy_or)equal_valued)	LatticeOpShortCircuit)ordered)walk)sift   )int_oo)FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDiv
IntTrueDivFloatTrueDivLShiftRShift!IsNonOverlappingAndDenseIndicatorTruncToFloat
TruncToInt
RoundToIntRoundDecimalToFloatFloatPowPowByNaturalIdentityc                 B     t        j                          fd       }|S )Nc                       |  }t        d | D              r8t        |t        j                        st        j                  t	        |            }|S )Nc              3   P   K   | ]  }t        |t        j                           y wN)
isinstancesympyFloat.0as     O/var/www/html/venv/lib/python3.12/site-packages/torch/utils/_sympy/functions.py	<genexpr>z-_keep_float.<locals>.inner.<locals>.<genexpr>S   s     8az!U[[)8   $&)anyr-   r.   r/   float)argsrfs     r3   innerz_keep_float.<locals>.innerP   sD    tH8488u{{B
 E!H%A    )	functoolswraps)r:   r;   s   ` r3   _keep_floatr?   O   s%    __Q  Lr<   c                     d | |fv ry | |k(  S r,    )xys     r3   fuzzy_eqrD   \   s    1v~6Mr<   c                    d fd}t        j                   ||        ||            }| |z  ||z  }} t        t        t        j
                  j                  t        j                  j                  |                   }t        j
                  j                  |      }|D ]  t        fd|D              s|z  } |S )a  
    Fast path for sympy.gcd, using a simple factoring strategy.

    We try to rewrite p and q in the form n*e*p1 + n*e*p2 and n*e*q0,
    where n is the greatest common integer factor and e is the largest
    syntactic common factor (i.e., common sub-expression) in p and q.
    Then the gcd returned is n*e, cancelling which we would be left with
    p1 + p2 and q0.

    Note that further factoring of p1 + p2 and q0 might be possible with
    sympy.factor (which uses domain-specific theories). E.g., we are unable
    to find that x*y + x + y + 1 is divisible by x + 1. More generally,
    when q is of the form q1 + q2 (instead of being already factored) it
    might be necessary to fall back on sympy.gcd.
    c                     t         j                  j                  |       D cg c]6  }t        |t        t         j
                  f      rt        t	        |            8 }}t        j                  |      S c c}w r,   )	r.   Mul	make_argsr-   intIntegerabsmathprod)rB   arginteger_coefficientss      r3   integer_coefficientz0simple_floordiv_gcd.<locals>.integer_coefficients   sc     yy**1- 
#U]]34 CM 
  

 yy-.. 
s   ;A4c                     t        t        j                  j                  |             }t	        j
                  t        j                  |      S r,   )mapr.   AddrH   r=   reducerL   gcd)exprinteger_factorsrP   s     r3   integer_factorz+simple_floordiv_gcd.<locals>.integer_factor{   s6    15993F3Ft3LM/::r<   c              3   &   K   | ]  }|v  
 y wr,   rA   )r1   
base_splitrB   s     r3   r4   z&simple_floordiv_gcd.<locals>.<genexpr>   s     =:qJ=s   )	rL   rU   listrR   r.   rG   rH   rS   all)pqrX   rU   base_splitsdivisor_splitrP   rB   s         @@r3   simple_floordiv_gcdra   b   s    "/; ((>!$nQ&7
8Cs7AGqAs599..		0C0CA0FGHKII''*M ==='C Jr<   c                   R    e Zd ZdZdZdZdZed        Zed        Z	d Z
ed        Zy	)
r   a  
    We maintain this so that:
    1. We can use divisibility guards to simplify FloorDiv(a, b) to a / b.
    2. Printing out the expression is nicer (compared to say, representing a//b as (a - a % b) / b)

    NB: This is Python-style floor division, round to -Inf
       2   Tc                      | j                   d   S Nr   r8   selfs    r3   basezFloorDiv.base       yy|r<   c                      | j                   d   S Nr   rh   ri   s    r3   divisorzFloorDiv.divisor   rl   r<   c                     |j                  | j                  | j                        }|j                  | j                  | j                        }d| d| dS )N(z//))parenthesizerk   
precedencero   )rj   printerrk   ro   s       r3   	_sympystrzFloorDiv._sympystr   sK    ##DIIt?&&t||T__E4&7)1%%r<   c                    |j                   rt        d      |t        t         t        j                  t        j                   fv r>|t        t         t        j                  t        j                   fv rt        j
                  S |t        j
                  u s|t        j
                  u rt        j
                  S |j                   rt        j                  j                  S |j                  rt        |d      r|S |j                  r"t        |d      rt        j                  |d      S t        |t        j                        rt        |t        j                        r|t        t         t        j                  t        j                   fv s.|t        t         t        j                  t        j                   fv rt        |      t        |      z  }|t        j                  k(  rt        S |t        j                   k(  rt         S t        j                   |      rt        j
                  S t        j"                  t        j$                  |            S t        |t        j"                        rDt        |t        j"                        r*t        j"                  t'        |      t'        |      z        S t        |t(              r)t)        |j*                  d   |j*                  d   |z        S t        j,                  j/                  |      D ]B  }||z  }|j                  st        |t        j"                        s0t)        ||z
  |      |z   c S  	 t1        ||      }t        |d      r0t        |t        j,                        rt        j2                  ||      }t        |d      s8t)        t        j4                  ||z        t        j4                  ||z              S y # t        j6                  $ r Y y w xY w)Ndivision by zeror   r   )is_zeroZeroDivisionErrorr   r.   oonanr   Zero
is_integerr   rG   r-   Numberr7   rL   infisnanrJ   floorrI   r   r8   rS   rH   ra   rU   simplifyPolynomialError)clsrk   ro   r9   termquotientrU   s          r3   evalzFloorDiv.eval   s    ??#$677FVGUXXy99gGHHXXI	J
 ?
 99599599 499<<77<<??|GQ7K??|GR899T2&&tU\\*7ELL1&%((UXXI>>vw588)DD deGn,ADHH}txxiwAyy }}TZZ]33dEMM*z'5==/Q==Tc'l!:;;dH%DIIaL$))A,*@AA II''- 	ADg~H""z'5=='I  tW5@@	A		%dG4CC#
7EII(Fiig.Q'NN4#:.w}0M  ( $$ 		s   BO O.-O.N)__name__
__module____qualname____doc__nargsrt   r   propertyrk   ro   rv   classmethodr   rA   r<   r3   r   r      sY     EJJ   & C Cr<   r   c                   4    e Zd ZdZdZdZed        Zd Zd Z	y)r   zK
    ModularIndexing(a, b, c) => (a // b) % c where % is the C modulus
       Tc                 h   |dk(  s|dk(  rt        j                  d      S t        |t         j                        r<t        |t         j                        r"t        |t         j                        r||z  |z  S 	 |dk7  rTt        j                  ||      }|dk7  r9t	        t        j
                  ||z        t        j
                  ||z        |      S t        |t         j                        rg }d}|j                  D ]  }t        j                  |||z        ||z  k7  s#t        |t         j                        r|dk  sSt        |t         j                        r=t        |j                  d   t         j                        r|j                  d   dk  rd} n|j                  |        t        |      t        |j                        k7  r|rt	        t        |      ||      S t        |t              r*t	        |j                  d   |j                  d   |z  |      S y # t         j                  $ r Y `w xY w)Nr   r   TF)r.   rJ   r-   rU   r   r   r   rS   r8   rG   appendlensumr   )r   rk   ro   modulusrU   	new_termsall_positiver   s           r3   r   zModularIndexing.eval  s   191==## tU]]+7EMM27EMM2GOw..
	!|iig.!8*tcz2w}5  dEII&IL		 /99T7W#4579JJ"47D1H"43&tyy|U]]C IIaL1, (-!((./  9~TYY/L&s9~wHHdH%"499Q<11GQQ &3 $$ 		s   7AH H10H1c                 f    | j                   d d \  }}t        |j                  |j                        S Nrd   )r8   rD   is_nonnegativerj   r]   r^   s      r3   _eval_is_nonnegativez$ModularIndexing._eval_is_nonnegative9  s.    yy!}1((!*:*:;;r<   c                 f    | j                   d d \  }}t        |j                  |j                        S r   )r8   rD   is_positiver   s      r3   _eval_is_positivez!ModularIndexing._eval_is_positive=  s*    yy!}1q}}55r<   N)
r   r   r   r   r   r   r   r   r   r   rA   r<   r3   r   r      s2     EJ.R .R`<6r<   r   c                   6    e Zd ZdZdZd Zd Zd Zed        Z	y)r   z#
    Good ol' ternary operator
    r   c                 n    | j                   d   j                  r| j                   d   j                  rdS d S Nr   rd   Tr8   r   ri   s    r3   _eval_is_integerzWhere._eval_is_integerI  s.    yy|..499Q<3J3JtTPTTr<   c                 n    | j                   d   j                  r| j                   d   j                  rdS d S r   )r8   r   ri   s    r3   r   zWhere._eval_is_nonnegativeL  s9     yy|**tyy|/J/J 	
 	
r<   c                 n    | j                   d   j                  r| j                   d   j                  rdS d S r   r8   r   ri   s    r3   r   zWhere._eval_is_positiveS  s.    yy|//DIIaL4L4LtVRVVr<   c                 X    |t         j                  k(  r|S |t         j                  k(  r|S y r,   )r.   truefalse)r   cr]   r^   s       r3   r   z
Where.evalV  s(    

?H%++H r<   N)
r   r   r   r   r   r   r   r   r   r   rA   r<   r3   r   r   B  s3     EU
W  r<   r   c                   0    e Zd ZdZdZed        Zd Zd Zy)r   rc   Tc                 B   |j                   rt        d      |t        j                  u s||| fv s|dk(  rt        j                  S |j                  r|j                  r||z  S |j                  r=|dk(  r8|j
                  rt        j                  S |j                  rt        j                  S ||z  }|j                  rt        j                  S ||k  }|j                  rt        |      r|j                  r|S t        j                  ||      dk(  rt        j                  S y )NModulo by zeror   rd   r   )rz   r{   r   r~   	is_Numberis_evenis_oddOner   
is_Booleanboolr   r.   r   r   r]   r^   r9   lesss        r3   r   zPythonMod.evald  s     99#$455 ;!A2w,!q&66M ;;1;;q5L ;;16yyvvxxuu E<<66M
 1u??tDzammH99Q?a66M  r<   c                 <    | j                   d   j                  rdS d S Nr   Tr   ri   s    r3   r   zPythonMod._eval_is_nonnegative      yy|//t9T9r<   c                 <    | j                   d   j                  rdS d S r   )r8   is_negativeri   s    r3   _eval_is_nonpositivezPythonMod._eval_is_nonpositive  r   r<   N)	r   r   r   r   r   r   r   r   r   rA   r<   r3   r   r   _  s)    EJ( (V::r<   r   c                   (    e Zd ZdZdZdZed        Zy)r   rc   Tc                 $   |j                   rt        d      |t        j                  u s||| fv s|dk(  rt        j                  S |j                  r)|j                  r|dk\  sJ |       |dk\  sJ |       ||z  S |j                  r=|dk(  r8|j
                  rt        j                  S |j                  rt        j                  S ||z  }|j                  rt        j                  S ||k  }|j                  rt        |      r|j                  r|S y y y )Nr   r   r   rd   )rz   r{   r   r~   r   r   r   r   r   r   r   r   r   s        r3   r   zMod.eval  s     99#$455 ;!A2w,!q&66M ;;1;;616616q5L ;;16yyvvxxuu E<<66M
 1u??tDzammH /<z?r<   N)r   r   r   r   r   r   r   r   rA   r<   r3   r   r     s#    EJN) )r<   r   c                       e Zd ZdZy)r   zZ
    Div where we can assume no rounding.
    This is to enable future optimizations.
    N)r   r   r   r   rA   r<   r3   r   r     s    r<   r   c                        e Zd ZdZed        Zy)r   Tc                    |t         j                  t        fv rt        S |t         j                   t         fv rt         S t        |t         j                        r1t        j
                  t        j                  t        |                  S y r,   )	r.   r|   r   r-   r   rJ   rL   ceilr7   r   numbers     r3   r   zCeilToInt.eval  se     ehh''Muxxi&))7Nfell+==5=!9:: ,r<   Nr   r   r   r   r   r   rA   r<   r3   r   r     s    J; ;r<   r   c                        e Zd ZdZed        Zy)r   Tc                    |t         j                  t        fv rt        S |t         j                   t        fv rt         S t        |t         j                        r1t        j
                  t        j                  t        |                  S y r,   )	r.   r|   r   r-   r   rJ   rL   r   r7   r   s     r3   r   zFloorToInt.eval  sc     ehh''Muxxi((7Nfell+==E&M!:;; ,r<   Nr   rA   r<   r3   r   r         J< <r<   r   c                       e Zd ZdZdZd Zy)r   z.
    Div used in indexing that rounds up.
    Tc                     t        j                  |      }t        j                  |      }t        j                  ||      |k(  rt        ||      S t	        ||dz
  z   |      S rn   )r.   r   rU   r   r   r   rk   ro   s      r3   __new__zCeilDiv.__new__  sT    }}T"--(99T7#w.D'**DGaK0'::r<   N)r   r   r   r   r   r   rA   r<   r3   r   r     s     J;r<   r   c                        e Zd ZdZed        Zy)r   Tc                 2    |dk  rt        d      |d|z  z  S Nr   znegative shift countrd   
ValueErrorr   rk   shifts      r3   r   zLShift.eval  s#    19344ahr<   Nr   rA   r<   r3   r   r      s    J r<   r   c                        e Zd ZdZed        Zy)r   Tc                 2    |dk  rt        d      |d|z  z  S r   r   r   s      r3   r   zRShift.eval  s$    19344q%xr<   Nr   rA   r<   r3   r   r   
  s    J   r<   r   c                       e Zd Zd Zed        Zed        Zed        Zed        Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"y )!
MinMaxBasec                    ddl m} |j                  d|j                        }d |D        }|rA	 t	        | j                  |            } | j                  |fi |} | j                  |fi |}t	        |      }|s| j                  S t        |      dk(  rt        |      j                         S t        j                  | gt        |      i |}||_        |S # t        $ r | j                  cY S w xY w)Nr   )global_parametersevaluatec              3   2   K   | ]  }t        |        y wr,   r   )r1   rN   s     r3   r4   z%MinMaxBase.__new__.<locals>.<genexpr>  s     --s   r   )sympy.core.parametersr   popr   	frozenset_new_args_filterr   zero_collapse_arguments_find_localzerosidentityr   r[   r   r   r   _argset)r   r8   assumptionsr   r   objs         r3   r   zMinMaxBase.__new__  s    ;??:/@/I/IJ--
   !5!5d!;< +3**4?;?D'3''<<D<<t9>:>>## ll3>>+>
#    xx s   C C21C2c                     |s|S t        t        |            } t        u rt        nt        |d   j                  rg g fx}\  }}|D ]X  }t        |t        t              D ]>  }|j                  d   j                  s|t        |t                 j                  |       @ Z t        j                  }|D ])  }|j                  d   }|j                  s||k  dk(  s(|}+ t        j                  }	|D ])  }|j                  d   }|j                  s||	kD  dk(  s(|}	+  t        u r!|D ]  }
|
j                  s n7|
|k  dk(  s|
} n) t        k(  r |D ]  }
|
j                  s n|
|	kD  dk(  s|
}	 d} t        u r|t        j                  k7  r$t        |}n|	t        j                  k7  rt        |	}|`t        t        |            D ]I  }||   }t        |      s|j                  d   }t        k(  r||kD  n||k  dk(  s; j                  ||<   K  fdt        |      D ](  \  }}||dz   d D cg c]  } ||       c}||dz   d *  fd}t        |      dkD  r ||      }|S c c}w )a}  Remove redundant args.

        Examples
        ========

        >>> from sympy import Min, Max
        >>> from sympy.abc import a, b, c, d, e

        Any arg in parent that appears in any
        parent-like function in any of the flat args
        of parent can be removed from that sub-arg:

        >>> Min(a, Max(b, Min(a, c, d)))
        Min(a, Max(b, Min(c, d)))

        If the arg of parent appears in an opposite-than parent
        function in any of the flat args of parent that function
        can be replaced with the arg:

        >>> Min(a, Max(b, Min(c, d, Max(a, e))))
        Min(a, Max(b, Min(a, c, d)))
        r   TNc           	      T   t        | t        t        f      s| S || j                  v }|s1 | j                  | j                  D cg c]  } ||       c}ddiS t        |       r7 | j                  | j                  D cg c]  }||k7  s	 ||       c}ddiS |S c c}w c c}w )Nr   F)r-   MinMaxr8   func)air2   condir   dos       r3   r   z*MinMaxBase._collapse_arguments.<locals>.do  s    b3*-	<Drww277 ;aAq ;LeLL"c"rww277 Eaa1fAq EVPUVVH !< Es   B 
B%B%r   c                    fd}t        | |d      \  }}|s| S |D cg c]  }t        |j                         }}t        j                  | }|s| S t	        |      }|D cg c]  }||z
  	 }	}t        |	      r,|	D 
cg c]
  }
 |
ddi }}
|j                   |ddi        |ddi}||gz   S c c}w c c}w c c}
w )Nc                     t        |       S r,   )r-   )rN   others    r3   <lambda>zGMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<lambda>  s    :c5#9 r<   T)binaryr   F)r   setr8   intersectionr[   r\   r   )r8   is_other
other_argsremaining_argsrN   arg_setscommonnew_other_argsarg_setarg_sets_diffsother_args_diffother_args_factoredr   r   s                r3   factor_minmaxz5MinMaxBase._collapse_arguments.<locals>.factor_minmax  s    9H)-dHT)J&J 2<<#CHH<H<%%x0F!&\N=EF'Wv-FMF =!FS"T5!#<e#<"T"T%%c?&KU&KL"'"H%"H!%8$999 = G
 #Us   B6#B; C )r[   r   r   r   	is_numberr   r8   is_comparabler-   r   r   ranger   	enumerate)r   r8   r   siftedminsmaxsr   vsmallbigrN   Tr2   a0r   r  r   r   s   `               @@r3   r   zMinMaxBase._collapse_arguments4  s   0 KGDM"#:EE
 7"$b&(FZT4 =ac* =Avvay..z!S1299!<== LLE FF1I;;AI$#6E ,,C FF1I;;AG#4C cz $C==e, #	$
  "C==c	d*!	"
 AczCLL(EA$}s4y) 3AQA!!U+VVAY(-R!V26!" '*llDG3	 dO 	@DAq15a!eg?2RAY?DQM	@	:0 t9q= &DI @s   9I2c              #   L  K   |D ]  }t        |t              r&|j                  du s|j                  r|j                  st        d| d      || j                  k(  rt        |      || j                  k(  rr|j                  | k(  r|j                  E d{    |  y7 w)z
        Generator filtering args.

        first standard filter, for cls.zero and cls.identity.
        Also reshape ``Max(a, Max(b, c))`` to ``Max(a, b, c)``,
        and check arguments for comparability
        FzThe argument 'z' is not comparable.N)r-   r   is_extended_realr  r  r   r   r   r   r   r8   )r   arg_sequencerN   s      r3   r   zMinMaxBase._new_args_filter  s        	C sD)''50MM#*;*; >#6J!KLLchh"3''$S88##	!	 $s   BB$B"B$c                 6   t               }|D ]  }d}t        |      }|D ]`  }t        |      t        |      k(  rd}| j                  ||      }|s2d}|du s|| k(  s>|j	                  |       |j                  |g       b |sx|j                  |g        |S )a   
        Sequentially allocate values to localzeros.

        When a value is identified as being more extreme than another member it
        replaces that member; if this is never true, then the value is simply
        appended to the localzeros.
        TF)r   r[   id_is_connectedremoveupdate)	r   valuesoptions
localzerosr  
is_newzerolocalzeros_zcons	            r3   r   zMinMaxBase._find_localzeros  s     U
 	'AJz*K  	3a5BqE>!&J++Aq1C%*
$;#*&--a0&--qc2	3 !!1#&	' r<   c                     ||k(  ryt         t        }}dD ]E  }t        d      D ]1  }	 |dk(  r||k\  }n||k  }|j                  s
|r|n|c c S ||}}||}}3 ||}}G y# t        $ r Y   yw xY w)z9
        Check if x and y are connected somehow.
        Tz><rd   >F)r   r   r  	TypeErroris_Relational)r   rB   rC   tr:   opjr  s           r3   r  zMinMaxBase._is_connected  s    
 6C1 	B1X !SyFF  !1q(!1!1 aqA	  ! ! !s   A	A,+A,c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_algebraicr1   r   s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>       (HA(H   r   r8   r  s    r3   r   zMinMaxBase.<lambda>      5(H(H#H r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_antihermitianr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>        - -r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>      u -$%FF- ( r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_commutativer+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>        ++r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>      U +"#&&+ & r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )
is_complexr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>       &Dq||&Dr-  r.  r/  s    r3   r   zMinMaxBase.<lambda>      &DQVV&D!D r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_compositer+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r,  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>  r0  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )r   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>       #>!AII#>r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>      e#>qvv#>> r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )	is_finiter+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s     %Baakk%Br-  r.  r/  s    r3   r   zMinMaxBase.<lambda>  s    %B166%B B r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_hermitianr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r,  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>  r0  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_imaginaryr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r,  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>  r0  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_infiniter+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>       'F!'Fr-  r.  r/  s    r3   r   zMinMaxBase.<lambda>      %'Fqvv'F"F r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )r   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r>  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>  r?  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_irrationalr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>       )Ja!//)Jr-  r.  r/  s    r3   r   zMinMaxBase.<lambda>      E)J166)J$J r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   r   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rS  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>  rT  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_nonintegerr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rZ  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>  r[  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   r   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r9  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>  r:  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_nonpositiver+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>   r9  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>   r:  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )
is_nonzeror+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>#  r>  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>#  r?  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )r   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>$  s     "<188"<r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>$  s    U"<QVV"<< r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_polarr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>%       $@AQZZ$@r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>%      u$@$@@ r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   r   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>&  rS  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>&  rT  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_primer+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>'  rp  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>'  rq  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_rationalr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>(  rS  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>(  rT  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_realr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>)  rE  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>)  rF  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )r  r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>*  r4  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>*  r5  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )is_transcendentalr+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>-  s      . !.r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>-  s     .%&VV. ) r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   )rz   r+  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>0  rE  r-  r.  r/  s    r3   r   zMinMaxBase.<lambda>0  rF  r<   N)#r   r   r   r   r   r   r   r   r  _eval_is_algebraic_eval_is_antihermitian_eval_is_commutative_eval_is_complex_eval_is_composite_eval_is_even_eval_is_finite_eval_is_hermitian_eval_is_imaginary_eval_is_infiniter   _eval_is_irrational_eval_is_negative_eval_is_nonintegerr   r   _eval_is_nonzero_eval_is_odd_eval_is_polarr   _eval_is_prime_eval_is_rational_eval_is_real_eval_is_extended_real_eval_is_transcendental_eval_is_zerorA   r<   r3   r   r     s   > E EN  4  4  0 I EH>MBOHHFDJFJ E<L@NF@NF>M ?Mr<   r   c                   R    e Zd ZdZej
                  Zej                  Zd Z	d Z
d Zy)r   z=
    Return, if possible, the maximum value of the list.
    c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   rt  r0   s     r3   r4   z(Max._eval_is_positive.<locals>.<genexpr>;       9!9r-  r
   r8   ri   s    r3   r   zMax._eval_is_positive:      9tyy999r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   rd  r0   s     r3   r4   z+Max._eval_is_nonnegative.<locals>.<genexpr>>  s     <Q((<r-  r  ri   s    r3   r   zMax._eval_is_nonnegative=  s    <$))<<<r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   r^  r0   s     r3   r4   z(Max._eval_is_negative.<locals>.<genexpr>A       :1:r-  r	   r8   ri   s    r3   r  zMax._eval_is_negative@      :		:::r<   N)r   r   r   r   r   Infinityr   NegativeInfinityr   r   r   r  rA   r<   r3   r   r   3  s,     ::D!!H:=;r<   r   c                   R    e Zd ZdZej
                  Zej                  Zd Z	d Z
d Zy)r   z=
    Return, if possible, the minimum value of the list.
    c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   rt  r0   s     r3   r4   z(Min._eval_is_positive.<locals>.<genexpr>M  r  r-  r  ri   s    r3   r   zMin._eval_is_positiveL  r  r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   rd  r0   s     r3   r4   z+Min._eval_is_nonnegative.<locals>.<genexpr>P  s     =a))=r-  r  ri   s    r3   r   zMin._eval_is_nonnegativeO  s    =499===r<   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr,   r^  r0   s     r3   r4   z(Min._eval_is_negative.<locals>.<genexpr>S  r  r-  r  ri   s    r3   r  zMin._eval_is_negativeR  r  r<   N)r   r   r   r   r   r  r   r  r   r   r   r  rA   r<   r3   r   r   D  s,     DzzH;>:r<   r   c                 L    d}| dk  r|  } |dz  dk(  rdnd}|t        | |      z  S )Nr   r   rd   ry   )	_safe_pow)rk   expsigns      r3   safe_powr  V  s8    Daxu!GqLqb)D#&&&r<   c                     |dk  rt        d      |dk(  ryt        | |dz        }|t        u rt        S ||z  }|t        j                  kD  rt        S |dz  dk(  r|| z  }|t        j                  kD  rt        S |S )Nr   zExponent must be non-negative.r   rd   )r   r  r   sysmaxsize)rk   exponenthalf_expresults       r3   r  r  _  s    !|9::1}h!m,H6
  F!|q$CKKMMr<   c                        e Zd ZdZed        Zy)r'   Tc                    t        |t        j                        rLt        |t        j                        r2t        ||      }|t         t        fv r|S t        j                  |      S t        |t        j                        rt        j
                  ||      S |t        t        j                  fv r/|j                  rt        S |j                  rt        j                  S y y r,   )
r-   r.   rJ   r  r   Powr|   r   r   zoo)r   rk   r  r9   s       r3   r   zPowByNatural.eval|  s    dEMM*z#u}}/Ms#AfWf%%==##c5==) 99T3''6588$$""!!yy  " %r<   Nr   rA   r<   r3   r'   r'   y  s    J! !r<   r'   c                        e Zd ZdZed        Zy)r&   Tc                     t        |t        j                        rEt        |t        j                        r*t        j                  t	        |      t	        |      z        S y y r,   )r-   r.   r   r/   r7   )r   rk   r  s      r3   r   zFloatPow.eval  sD     dELL)jell.K;;uT{eCj899 /L)r<   Nr   r   r   r}  r   r   rA   r<   r3   r&   r&     s    G: :r<   r&   c                        e Zd ZdZed        Zy)r   Tc                     |j                   rt        d      t        |t        j                        rEt        |t        j                        r*t        j
                  t        |      t        |      z        S y y Nrx   )rz   r{   r-   r.   r   r/   r7   r   s      r3   r   zFloatTrueDiv.eval  sW    
 ??#$677dELL)j%,,.O;;uT{U7^;<< /P)r<   Nr  rA   r<   r3   r   r     s    G= =r<   r   c                        e Zd ZdZed        Zy)r   Tc                 d   |j                   rt        d      t        |t        j                        rt        |t        j                        r|t
        t
         t        j                  t        j                   fv s.|t
        t
         t        j                  t        j                   fv r*t        j                  t        |      t        |      z        S t        |t        j                        rEt        |t        j                        r*t        j                  t        |      t        |      z        S y y r  )rz   r{   r-   r.   r   r   r|   r/   r7   rJ   rI   r   s      r3   r   zIntTrueDiv.eval  s    ??#$677 tU\\*7ELL1&%((UXXI>>vw588)DD
 ;;uT{U7^;<<dEMM*z'5==/Q;;s4y3w<788 0R*r<   Nr  rA   r<   r3   r   r     s    G9 9r<   r   c                        e Zd ZdZed        Zy)r    Tc           	         t        |      dz  dk(  sJ t        |      dz  }|d| }||d  }ddlm} t        d |D              r7 ||D cg c]  }t	        |       c}|D cg c]  }t	        |       c}      S |dk(  r0|d   j
                  r	|d   dk(  ry|d   j
                  r	|d   dk  ryt        d |D              r|dk7  sJ t        t        t        ||      t        j                  d             \  }}t        d |d d	 D              r?|d d	 d
z   } ||D cg c]  }t	        |       c}|D cg c]  }t	        |       c}      S y c c}w c c}w c c}w c c}w )Nrd   r   )!eval_is_non_overlapping_and_densec              3   P   K   | ]  }t        |t        j                           y wr,   r-   r.   rJ   r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s     :z!U]]+:r5   r   c              3   P   K   | ]  }t        |t        j                           y wr,   r  r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s     =z!U]]+=r5   )keyc              3   P   K   | ]  }t        |t        j                           y wr,   r  r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s     FA:a/Fr5   ry   )*   )
r   %torch.fx.experimental.symbolic_shapesr  r\   rI   r   zipsortedoperator
itemgetter)	r   r8   dimsizesstridesr  r2   s_sizes	s_stridess	            r3   r   z&IsNonOverlappingAndDenseIndicator.eval  st   4y1}!!!$i1nQsst*	
 :T::4!&'AQ'')BQ#a&)B  !8qz##
aQx!!eAhl =W==!8O8 "%E7+1D1DQ1GH"GY F"FF!#2,. 9%,-SV-	/J1A/J  G ()B@ ./Js   
E"E
E7E 
Nr   rA   r<   r3   r    r      s    J0 0r<   r    c                        e Zd ZdZed        Zy)r!   Tc                     t        |t        j                        r1t        j                  t	        j
                  t        |                  S y r,   )r-   r.   r   r/   rL   truncr7   r   s     r3   r   zTruncToFloat.eval  s5     fell+ ;;tzz%-899	 ,r<   Nr  rA   r<   r3   r!   r!     s    G: :r<   r!   c                        e Zd ZdZed        Zy)r"   Tc                    |t         j                  t        fv rt        S |t         j                   t         fv rt         S t        |t         j                        r1t        j
                  t        j                  t        |                  S y r,   )	r.   r|   r   r-   r   rJ   rL   r  r7   r   s     r3   r   zTruncToInt.eval"  se     ehh''Muxxi&))7Nfell+==E&M!:;; ,r<   Nr   rA   r<   r3   r"   r"     r   r<   r"   c                        e Zd ZdZed        Zy)r#   Tc                     |t         j                  u rt        S |t         j                   u rt         S t        |t         j                        r(t        j
                  t        t        |      d            S y rg   )r.   r|   r   r-   r   rJ   roundr7   r   s     r3   r   zRoundToInt.eval1  sW     UXXMehhY7Nfell+==uV}a!899 ,r<   Nr   rA   r<   r3   r#   r#   .  s    J: :r<   r#   c                        e Zd ZdZed        Zy)r$   Tc                     t        |t        j                        rLt        |t        j                        r1t        j                  t        t        |      t        |                  S y y r,   )r-   r.   r   rJ   r/   r  r7   rI   )r   r   ndigitss      r3   r   zRoundDecimal.evalO  sF     fell+
7EMM0R;;uU6]CLABB 1S+r<   Nr  rA   r<   r3   r$   r$   L  s    GC Cr<   r$   c                        e Zd ZdZed        Zy)r%   Tc                 "   |t         j                  t         j                   fv r|S t        |t         j                        rt        j                  t        |            S |t        u rt         j                  S |t         u rt         j                   S y r,   )r.   r|   r-   rJ   r/   rI   r   r   s     r3   r   zToFloat.evalZ  sk    ehh	**Mfemm,;;s6{++V88OfWHH9 r<   Nr  rA   r<   r3   r%   r%   W  s    G	 	r<   r%   c                   "    e Zd ZdZd Zd Zd Zy)r(   z4
    Prevents expansion and other optimizations
    c                 (    d| j                   d    dS )Nz	Identity(r   rr   rh   ri   s    r3   __repr__zIdentity.__repr__l  s    499Q<.**r<   c                 4    | j                   d   j                  S rg   )r8   r}  ri   s    r3   r  zIdentity._eval_is_realo  s    yy|###r<   c                 4    | j                   d   j                  S rg   r   ri   s    r3   r   zIdentity._eval_is_integerr  s    yy|&&&r<   N)r   r   r   r   r  r  r   rA   r<   r3   r(   r(   g  s    +$'r<   r(   c                 R      G  fddt         j                        }d z   |_        |S )Nc                   ,    e Zd ZdZW  Ze fd       Zy)+make_opaque_unary_fn.<locals>.OpaqueUnaryFna  
        Unlike the builtin sympy functions on real numbers like sympy.sqrt,
        these equivalents do not do any nontrivial reasoning besides
        constant propagation.  This helps avoid performing transformations
        that are valid for real numbers but are invalid for floating point;
        in particular, while we are willing to make optimizations that change
        numerics for Tensor compute, we are NOT willing to make optimziations
        that change numerics for size compute.
        c                 4   t        |t        j                  t        j                  f      r3	 t        j                   t	        t
              t        |                  S |t        j                  t        j                   t        j                  t        j                   t        t         fv rH|t        u rt        j                  }|t         u rt        j                   } t	        t              |      S y # t        $ r  t	        t              |      cY S w xY wr,   )r-   r.   rJ   r/   getattrrL   r7   OverflowErrorr|   r  r   )r   r2   names     r3   r   z0make_opaque_unary_fn.<locals>.OpaqueUnaryFn.eval  s    !emmU[[9:3 ;;':wtT':58'DEE
 uxx%((EII		z6F7SS;A<	A+wud+A.. % 3/75$/223s   1C5 5DDN)r   r   r   r   _torch_handler_namer   r   )r  s   r3   OpaqueUnaryFnr  w  s"    	 #		 
	r<   r  OpaqueUnaryFn_)r.   Functionr   )r  r  s   ` r3   make_opaque_unary_fnr  v  s)    ! !F .4Mr<   sqrtcoscoshsinsinhtantanhasinacosatanr  logasinh)Kr=   rL   r  r  r.   r   
sympy.corer   sympy.core.exprr   sympy.core.functionr   sympy.core.logicr   r	   r
   sympy.core.numbersr   sympy.core.operationsr   r   sympy.core.sortingr   sympy.core.traversalr   sympy.utilities.iterablesr   numbersr   __all__r?   rD   ra   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  OpaqueUnaryFn_sqrtOpaqueUnaryFn_cosOpaqueUnaryFn_coshOpaqueUnaryFn_sinOpaqueUnaryFn_sinhOpaqueUnaryFn_tanOpaqueUnaryFn_tanhOpaqueUnaryFn_asinOpaqueUnaryFn_acosOpaqueUnaryFn_atanOpaqueUnaryFn_expOpaqueUnaryFn_logOpaqueUnaryFn_asinhrA   r<   r3   <module>r     s      
      + 7 7 + 9 & % * D4
%tau~~ aH?6enn ?6DENN :5: 5:r0%.. 0fx ; ;< <;enn ; U^^  U^^  \?y \?~;*k ;":*k :$'4!5>> !2:u~~ :(=5>> =.9 9:4 4p
:5>> 
:< <: :<C5>> Cenn  'u~~ '&T *&1 (/ )&1 (/ )&1 (/ )&1 )&1 )&1 )&1 (/ (/ *73 r<   