
    Χg+                        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j!                  Z" G d dej!                  Z# G d dej!                  Z$ G d dej!                  Z% G d dej!                  Z& G d de"          Z' G d dej!                  Z( G d  d!ej!                  Z) G d" d#ej!                  Z* G d$ d%ej!                  Z+ G d& d'ej!                  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j!                  Z2 G d2 d3ej!                  Z3 G d4 d5ej!                  Z4 G d6 d7ej!                  Z5 G d8 d9ej!                  Z6 G d: d;ej!                  Z7 G d< d=ej!                  Z8 G d> d?ej!                  Z9 G d@ dAej!                  Z: G dB dCej!                  Z; G dD dEej!                  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          ZJdS )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                 F     t          j                    fd            }|S )Nc                       |  }t          d | D                       r;t          |t          j                  s!t          j        t	          |                    }|S )Nc              3   J   K   | ]}t          |t          j                  V  d S N)
isinstancesympyFloat.0as     X/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/utils/_sympy/functions.py	<genexpr>z-_keep_float.<locals>.inner.<locals>.<genexpr>S   s.      88az!U[))888888    )anyr-   r.   r/   float)argsrfs     r3   innerz_keep_float.<locals>.innerP   sc    AtH88488888 	&u{B
 B
 	& E!HH%%Ar5   )	functoolswraps)r:   r;   s   ` r3   _keep_floatr>   O   s8    _Q     Lr5   c                     d | |fv rd S | |k    S r,    )xys     r3   fuzzy_eqrC   \   s    1v~~t6Mr5   c                    d fd}t          j         ||            ||                    }| |z  ||z  }} t          t          t          j        j        t          j                            |                               }t          j                            |          }|D ]"t          fd|D                       r|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                 |    d t           j                            |           D             }t          j        |          S )Nc                     g | ]?}t          |t          t          j        f          #t	          t          |                    @S r@   )r-   intr.   Integerabsr1   args     r3   
<listcomp>zDsimple_floordiv_gcd.<locals>.integer_coefficient.<locals>.<listcomp>t   sK      
  
  
#U]344 
CMM 
  
  
r5   )r.   Mul	make_argsmathprod)rA   integer_coefficientss     r3   integer_coefficientz0simple_floordiv_gcd.<locals>.integer_coefficients   sD     
  
y**1-- 
  
  

 y-...r5   c                     t          t          j                            |                     }t	          j        t          j        |          S r,   )mapr.   AddrN   r<   reducerO   gcd)exprinteger_factorsrR   s     r3   integer_factorz+simple_floordiv_gcd.<locals>.integer_factor{   s8    1593F3Ft3L3LMM/:::r5   c              3       K   | ]}|v V  	d S r,   r@   )r1   
base_splitrA   s     r3   r4   z&simple_floordiv_gcd.<locals>.<genexpr>   s'      ==:qJ======r5   )	rO   rW   listrT   r.   rM   rN   rU   all)pqrZ   rW   base_splitsdivisor_splitrR   rA   s         @@r3   simple_floordiv_gcdrc   b   s    "/ / /; ; ; ; ; (>>!$$nnQ&7&7
8
8Cs7AGqAs59.	0C0CA0F0FGGHHKI''**M  ========= 	'CJr5   c                   f    e Zd ZdZdZdZdZed             Zed             Z	d Z
ed             Zd	S )
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       y|r5   c                     | j         d         S Nr   rj   rk   s    r3   divisorzFloorDiv.divisor   rn   r5   c                     |                     | j        | j                  }|                     | j        | j                  }d| d| dS )N(z//))parenthesizerm   
precedencerq   )rl   printerrm   rq   s       r3   	_sympystrzFloorDiv._sympystr   sM    ##DIt??&&t|T_EE%4%%7%%%%r5   c                    |j         rt          d          |t          t           t          j        t          j         fv r4|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                  rt          |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                  rKt          |t          j                  r1t          j        t'          |          t'          |          z            S t          |t(                    r)t)          |j        d         |j        d         |z            S t          j                            |          D ]@}||z  }|j        r2t          |t          j                  rt)          ||z
  |          |z   c S A	 t1          ||          }t          |d          r/t          |t          j                  rt          j        ||          }t          |d          s:t)          t          j        ||z            t          j        ||z                      S d S # t          j        $ r Y d S w xY w)Ndivision by zeror   r   )is_zeroZeroDivisionErrorr   r.   oonanr   Zero
is_integerr   rM   r-   Numberr7   rO   infisnanrH   floorrG   r   r8   rU   rN   rc   rW   simplifyPolynomialError)clsrm   rq   r9   termquotientrW   s          r3   evalzFloorDiv.eval   sc    ? 	8#$6777FVGUXy999gGHXI	J
 ?
 ?
 95959 4 49< 	 7<? 	|GQ77 	K? 	'|GR88 	'9T2&&&tU\**	47EL11	4 &%(UXI>>>vw58)DDD deGnn,ADH}}txiwA 4y }TZ]]333dEM** 	<z'5=/Q/Q 	<=Tc'll!:;;;dH%% 	BDIaL$)A,*@AAA I''-- 	A 	ADg~H" Az'5='I'I A  tW55@@@@		%dG44CC## /
7EI(F(F /ig..Q'' N4#:..w}0M0M    $ 	 	 	DD	s   BN0 0OON)__name__
__module____qualname____doc__nargsrv   r   propertyrm   rq   rx   classmethodr   r@   r5   r3   r   r      s          EJJ  X   X& & & C C [C C Cr5   r   c                   <    e Zd ZdZdZdZed             Zd Zd Z	dS )r   zK
    ModularIndexing(a, b, c) => (a // b) % c where % is the C modulus
       Tc                    |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k    rVt          j        ||          }|dk    r;t	          t          j        ||z            t          j        ||z            |          S n# t           j        $ r Y nw xY wt          |t           j                  rg }d}|j        D ]}t          j        |||z            ||z  k    rt          |t           j                  r|dk     sPt          |t           j	                  r:t          |j        d         t           j                  r|j        d         dk     rd} n|
                    |           t          |          t          |j                  k    r |rt	          t          |          ||          S t          |t                    r*t	          |j        d         |j        d         |z  |          S d S )Nr   r   TF)r.   rH   r-   rW   r   r   r   rU   r8   rM   appendlensumr   )r   rm   rq   modulusrW   	new_termsall_positiver   s           r3   r   zModularIndexing.eval  sD   1991=### tU]++	/7EM22	/ 7EM22	/
 GOw..
	!||ig..!88*tcz22w}55  
 $ 	 	 	D	 dEI&& 	IIL	 / /9T7W#45579JJJ"477 /D1HH"433 =E&ty|U]CC =E !IaL1,, (-!((...9~~TY//L/&s9~~wHHHdH%% 	R"49Q<11GQQQ	R 	Rs   8AC C'&C'c                 Z    | j         d d         \  }}t          |j        |j                  S Nrf   )r8   rC   is_nonnegativerl   r_   r`   s      r3   _eval_is_nonnegativez$ModularIndexing._eval_is_nonnegative9  s+    y!}1(!*:;;;r5   c                 Z    | j         d d         \  }}t          |j        |j                  S r   )r8   rC   is_positiver   s      r3   _eval_is_positivez!ModularIndexing._eval_is_positive=  s)    y!}1q}555r5   N)
r   r   r   r   r   r   r   r   r   r   r@   r5   r3   r   r      se          EJ.R .R [.R`< < <6 6 6 6 6r5   r   c                   >    e Zd ZdZdZd Zd Zd Zed             Z	dS )r   z#
    Good ol' ternary operator
    r   c                 R    | j         d         j        r| j         d         j        rdnd S Nr   rf   Tr8   r   rk   s    r3   _eval_is_integerzWhere._eval_is_integerI  s)    y|.T49Q<3JTttPTTr5   c                 R    | j         d         j        r| j         d         j        rdnd S r   )r8   r   rk   s    r3   r   zWhere._eval_is_nonnegativeL  s2     y|*/3y|/JDD	
r5   c                 R    | j         d         j        r| j         d         j        rdnd S r   r8   r   rk   s    r3   r   zWhere._eval_is_positiveS  s)    y|/VDIaL4LVttRVVr5   c                 N    |t           j        k    r|S |t           j        k    r|S d S r,   )r.   truefalse)r   cr_   r`   s       r3   r   z
Where.evalV  s,    
??H%+H r5   N)
r   r   r   r   r   r   r   r   r   r   r@   r5   r3   r   r   B  ss          EU U U
 
 
W W W   [  r5   r   c                   8    e Zd ZdZdZed             Zd Zd ZdS )r   re   Tc                    |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    r&|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 d S )NModulo by zeror   rf   r   )r|   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    9 	6#$4555 ;;!A2w,,!q&&6M ; 	1; 	q5L ; 	166y vx u E< 	6M
 1u? 	tDzz 	am 	H9Q??a6M  r5   c                 .    | j         d         j        rdnd S Nr   Tr   rk   s    r3   r   zPythonMod._eval_is_nonnegative      y|/9ttT9r5   c                 .    | j         d         j        rdnd S r   )r8   is_negativerk   s    r3   _eval_is_nonpositivezPythonMod._eval_is_nonpositive  r   r5   N)	r   r   r   r   r   r   r   r   r   r@   r5   r3   r   r   _  sV        EJ( ( [(V: : :: : : : :r5   r   c                   0    e Zd ZdZdZdZed             ZdS )r   re   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    r&|j        rt          j        S |j        rt          j        S ||z  }|j        rt          j        S ||k     }|j	        rt          |          r|j        r|S d S d S d S )Nr   r   r   rf   )r|   r}   r   r   r   r   r   r   r   r   r   r   r   s        r3   r   zMod.eval  s+    9 	6#$4555 ;;!A2w,,!q&&6M ; 	1; 	66616666661666q5L ; 	166y vx u E< 	6M
 1u? 	tDzz 	am 	H	 	 	 	 	 	r5   N)r   r   r   r   r   r   r   r   r@   r5   r3   r   r     s<        EJN) ) [) ) )r5   r   c                       e Zd ZdZdS )r   zZ
    Div where we can assume no rounding.
    This is to enable future optimizations.
    N)r   r   r   r   r@   r5   r3   r   r     s           r5   r   c                   (    e Zd ZdZed             ZdS )r   Tc                    |t           j        t          fv rt          S |t           j         t           fv rt           S t          |t           j                  r3t          j        t          j        t          |                              S d S r,   )	r.   r~   r   r-   r   rH   rO   ceilr7   r   numbers     r3   r   zCeilToInt.eval  sv     eh'''Muxi&)))7Nfel++ 	;=5==!9!9:::	; 	;r5   Nr   r   r   r   r   r   r@   r5   r3   r   r     s2        J; ; [; ; ;r5   r   c                   (    e Zd ZdZed             ZdS )r   Tc                    |t           j        t          fv rt          S |t           j         t          fv rt           S t          |t           j                  r3t          j        t          j        t          |                              S d S r,   )	r.   r~   r   r-   r   rH   rO   r   r7   r   s     r3   r   zFloorToInt.eval  st     eh'''Muxi(((7Nfel++ 	<=E&MM!:!:;;;	< 	<r5   Nr   r@   r5   r3   r   r     2        J< < [< < <r5   r   c                       e Zd ZdZdZd ZdS )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 rp   )r.   r   rW   r   r   r   rm   rq   s      r3   __new__zCeilDiv.__new__  s`    }T""-((9T7##w..D'***DGaK0':::r5   N)r   r   r   r   r   r   r@   r5   r3   r   r     s4          J; ; ; ; ;r5   r   c                   (    e Zd ZdZed             ZdS )r   Tc                 <    |dk     rt          d          |d|z  z  S Nr   znegative shift countrf   
ValueErrorr   rm   shifts      r3   r   zLShift.eval  s(    1993444ahr5   Nr   r@   r5   r3   r   r      s2        J  [  r5   r   c                   (    e Zd ZdZed             ZdS )r   Tc                 <    |dk     rt          d          |d|z  z  S r   r   r   s      r3   r   zRShift.eval  s)    1993444q%xr5   Nr   r@   r5   r3   r   r   
  s2        J    [     r5   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"d S )!
MinMaxBasec                    ddl m} |                    d|j                  }d |D             }|rW	 t	          |                     |                    }n# t          $ r
 | j        cY S w xY w | j        |fi |} | j	        |fi |}t	          |          }|s| j
        S t          |          dk    r!t          |                                          S t          j        | gt          |          R i |}||_        |S )Nr   )global_parametersevaluatec              3   4   K   | ]}t          |          V  d S r,   r   rJ   s     r3   r4   z%MinMaxBase.__new__.<locals>.<genexpr>  s(      --------r5   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__  s9   ;;;;;;??:/@/IJJ-----
  	=  !5!5d!;!;<<      x  +3*4??;??D'3'<<<<D 	 <t99>>::>>### l3>>>>+>>
s   "A A('A(c                     |s|S t          t          |                    } t          u rt          nt          |d         j        rg g fx}\  }}|D ]`}t          |t          t                    D ]B}|j        d         j        r.|t          |t                             	                    |           Cat          j
        }|D ]"}|j        d         }|j        r||k     dk    r|}#t          j
        }	|D ]"}|j        d         }|j        r||	k    dk    r|}	# t          u r|D ]}
|
j        s n|
|k     dk    r|
}n% t          k    r|D ]}
|
j        s n|
|	k    dk    r|
}	d} t          u r|t          j
        k    r	t          |}n|	t          j
        k    r	t          |	}|it          t          |                    D ]L}||         t                    r2j        d         }t          k    r||k    n||k     dk    r
 j
        ||<   M fdt          |          D ]'\  }fd||dz   d         D             ||dz   d<   ( fd}t          |          dk    r ||          }|S )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          f          s| S | j        v }|s | j        fd| j        D             ddiS t          |           r | j        fd| j        D             ddiS S )Nc                 (    g | ]} |          S r@   r@   r1   ir2   dos     r3   rL   z>MinMaxBase._collapse_arguments.<locals>.do.<locals>.<listcomp>  s#     ; ; ;aAq ; ; ;r5   r   Fc                 4    g | ]}|k     |          S r@   r@   r   s     r3   rL   z>MinMaxBase._collapse_arguments.<locals>.do.<locals>.<listcomp>  s(     E E Eaa1ffAqfffr5   )r-   MinMaxr8   func)air2   condr   r   s    ` r3   r   z*MinMaxBase._collapse_arguments.<locals>.do  s    b3*-- 	<D Mrw ; ; ; ; ;27 ; ; ;LeLLL"c"" Wrw E E E E E27 E E EVPUVVVHr5   c                 (    g | ]} |          S r@   r@   )r1   r   r2   r   s     r3   rL   z2MinMaxBase._collapse_arguments.<locals>.<listcomp>  s#    ???2RRAYY???r5   r   c                 D  	 fd}t          | |d          \  }}|s| S d |D             }t          j        | 		s| S t          	          }	fd|D             }t	          |          r)fd|D             }|                     
|ddi            |ddi}||gz   S )	Nc                 $    t          |           S r,   )r-   )rK   others    r3   <lambda>zGMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<lambda>  s    :c5#9#9 r5   T)binaryc                 6    g | ]}t          |j                  S r@   )setr8   rJ   s     r3   rL   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>  s     <<<#CH<<<r5   c                     g | ]}|z
  S r@   r@   )r1   arg_setcommons     r3   rL   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>  s    FFF'Wv-FFFr5   c                      g | ]
} |d diS )r   Fr@   )r1   sr   s     r3   rL   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>  s(    "T"T"T55!#<e#<#<"T"T"Tr5   r   F)r   r   intersectionr]   r^   r   )r8   is_other
other_argsremaining_argsarg_setsnew_other_argsarg_sets_diffother_args_diffother_args_factoredr  r   r   s            @r3   factor_minmaxz5MinMaxBase._collapse_arguments.<locals>.factor_minmax  s    9999H)-dHT)J)J)J&J  =<<<<H%x0F !&\\NFFFFXFFFM =!! M"T"T"T"Tm"T"T"T%%cc?&KU&K&KLLL"'%"H%"H"H!%8$999r5   )r]   r   r   r   	is_numberr   r8   is_comparabler-   r   r   ranger   	enumerate)r   r8   r   siftedminsmaxsr   vsmallbigrK   Ta0r  r2   r   r   s   `             @@@r3   r   zMinMaxBase._collapse_arguments4  s*   0  	KGDMM""#::EEE
 7 1	3"$b&(FZT4 = =ac** = =Avay. =z!S11299!<<<= LE  F1I; AI$#6#6E,C  F1I; AG#4#4C
 czz $ $C= e,, # " "C= c	d**!AczzCL((EA$$}s4yy)) 3 3AQA!!U++ 3VAY(-R!VV26!" " '*lDG	 	 	 	 	 	 dOO 	@ 	@DAq?????a!egg???DQMM	: 	: 	: 	: 	: 	:0 t99q== =&&Dr5   c              #     K   |D ]}t          |t                    r|j        du s|j        r|j        st          d| d          || j        k    rt          |          || j        k    rg|j	        | k    r|j
        E d{V  |V  dS )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_sequencerK   s      r3   r   zMinMaxBase._new_args_filter  s         	 	C sD))M'500M 1*-*; 1 !!K#!K!K!KLLLch"3'''$$S8########				!	 	r5   c                 l   t                      }|D ]}d}t          |          }|D ]t}t          |          t          |          k    rd}%|                     ||          }|r7d}|du s|| k    r+|                    |           |                    |g           u|r|                    |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     UU
 	' 	'AJz**K  	3 	3a55BqEE>>!&JJ++Aq11C 3%*
$;;#**&--a000&--qc222 '!!1#&&&r5   c                     ||k    rdS t           t          }}dD ]Y}t          d          D ]C}	 |dk    r||k    }n||k    }n# t          $ r Y   dS w xY w|j        s
|r|n|c c S ||}}||}}D||}}ZdS )z9
        Check if x and y are connected somehow.
        Tz><rf   >F)r   r   r  	TypeErroris_Relational)r   rA   rB   tr:   opjr  s           r3   r   zMinMaxBase._is_connected  s    
 664C1 	 	B1XX  !SyyFF  ! ! ! 5555! ) !=11q(((((!1!1aqAAus   A
AAc                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_algebraicr1   r   s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      (H(HA(H(H(H(H(H(Hr5   r   r8   r  s    r3   r   zMinMaxBase.<lambda>      5(H(H(H(H(H#H#H r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_antihermitianr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  6       - - - - - - - -r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  .    u - -$%F- - - ( ( r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_commutativer4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  6       + ++ + + + + +r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  .    U + +"#&+ + + & & r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )
is_complexr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      &D&Dq|&D&D&D&D&D&Dr5   r6  r7  s    r3   r   zMinMaxBase.<lambda>      &D&DQV&D&D&D!D!D r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_compositer4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r5  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  r8  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )r   r4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      #>#>!AI#>#>#>#>#>#>r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>      e#>#>qv#>#>#>>> r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )	is_finiter4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s$      %B%Baak%B%B%B%B%B%Br5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  s    %B%B16%B%B%B B B r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_hermitianr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r5  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  r8  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_imaginaryr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r5  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  r8  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_infiniter4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      'F'F!'F'F'F'F'F'Fr5   r6  r7  s    r3   r   zMinMaxBase.<lambda>      %'F'Fqv'F'F'F"F"F r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )r   r4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rF  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  rG  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_irrationalr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      )J)Ja!/)J)J)J)J)J)Jr5   r6  r7  s    r3   r   zMinMaxBase.<lambda>      E)J)J16)J)J)J$J$J r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   r   r4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r[  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  r\  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_nonintegerr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rb  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  rc  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   r   r4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rA  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>  rB  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_nonpositiver4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>   rA  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>   rB  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )
is_nonzeror4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>#  rF  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>#  rG  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )r   r4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>$  s$      "<"<18"<"<"<"<"<"<r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>$  s    U"<"<QV"<"<"<<< r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_polarr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>%  $      $@$@AQZ$@$@$@$@$@$@r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>%      u$@$@$@$@$@@@ r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   r   r4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>&  r[  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>&  r\  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_primer4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>'  rx  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>'  ry  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_rationalr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>(  r[  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>(  r\  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_realr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>)  rM  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>)  rN  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )r  r4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>*  r<  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>*  r=  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )is_transcendentalr4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>-  s6       . . !. . . . . .r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>-  s.     . .%&V. . . ) ) r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   )r|   r4  s     r3   r4   z&MinMaxBase.<lambda>.<locals>.<genexpr>0  rM  r5   r6  r7  s    r3   r   zMinMaxBase.<lambda>0  rN  r5   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_zeror@   r5   r3   r   r     s         > E E [EN   [4   [4   [0 IH   EDHH>>MBBOHHHHFFDDJJFFJJ   ED<<L@@NFF@@NFF>>M   ?>MMMr5   r   c                   @    e Zd ZdZej        Zej        Zd Z	d Z
d ZdS )r   z=
    Return, if possible, the maximum value of the list.
    c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   r|  r0   s     r3   r4   z(Max._eval_is_positive.<locals>.<genexpr>;  $      99!999999r5   r
   r8   rk   s    r3   r   zMax._eval_is_positive:  !    99ty999999r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   rl  r0   s     r3   r4   z+Max._eval_is_nonnegative.<locals>.<genexpr>>  s%      <<Q(<<<<<<r5   r  rk   s    r3   r   zMax._eval_is_nonnegative=  s!    <<$)<<<<<<r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   rf  r0   s     r3   r4   z(Max._eval_is_negative.<locals>.<genexpr>A  $      ::1::::::r5   r	   r8   rk   s    r3   r  zMax._eval_is_negative@  !    ::	::::::r5   N)r   r   r   r   r   Infinityr   NegativeInfinityr   r   r   r  r@   r5   r3   r   r   3  s\          :D!H: : := = =; ; ; ; ;r5   r   c                   @    e Zd ZdZej        Zej        Zd Z	d Z
d ZdS )r   z=
    Return, if possible, the minimum value of the list.
    c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   r|  r0   s     r3   r4   z(Min._eval_is_positive.<locals>.<genexpr>M  r  r5   r  rk   s    r3   r   zMin._eval_is_positiveL  r  r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   rl  r0   s     r3   r4   z+Min._eval_is_nonnegative.<locals>.<genexpr>P  s%      ==a)======r5   r  rk   s    r3   r   zMin._eval_is_nonnegativeO  s!    ==49======r5   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r,   rf  r0   s     r3   r4   z(Min._eval_is_negative.<locals>.<genexpr>S  r  r5   r  rk   s    r3   r  zMin._eval_is_negativeR  r  r5   N)r   r   r   r   r   r  r   r  r   r   r   r  r@   r5   r3   r   r   D  s\          DzH; ; ;> > >: : : : :r5   r   c                 X    d}| dk     r|  } |dz  dk    rdnd}|t          | |          z  S )Nr   r   rf   r{   )	_safe_pow)rm   expsigns      r3   safe_powr  V  sA    Daxxu!GqLLqqb)D#&&&&r5   c                    |dk     rt          d          |dk    rdS t          | |dz            }|t          u rt          S ||z  }|t          j        k    rt          S |dz  dk    r|| z  }|t          j        k    rt          S |S )Nr   zExponent must be non-negative.r   rf   )r   r  r   sysmaxsize)rm   exponenthalf_expresults       r3   r  r  _  s    !||9:::1}}qh!m,,H6
  F!|q$CKMMr5   c                   (    e Zd ZdZed             ZdS )r'   Tc                    t          |t          j                  rQt          |t          j                  r7t          ||          }|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 d S d S r,   )
r-   r.   rH   r  r   Powr~   r   r   zoo)r   rm   r  r9   s       r3   r   zPowByNatural.eval|  s    dEM** 	$z#u}/M/M 	$s##AfWf%%%=###c5=)) 	( 9T3'''658$$$" !! !y 	 %$! !r5   Nr   r@   r5   r3   r'   r'   y  s2        J! ! [! ! !r5   r'   c                   (    e Zd ZdZed             ZdS )r&   Tc                     t          |t          j                  rKt          |t          j                  r3t          j        t	          |          t	          |          z            S d S d S r,   )r-   r.   r   r/   r7   )r   rm   r  s      r3   r   zFloatPow.eval  s`     dEL)) 	:jel.K.K 	:;uT{{eCjj8999	: 	: 	: 	:r5   Nr   r   r   r  r   r   r@   r5   r3   r&   r&     s2        G: : [: : :r5   r&   c                   (    e Zd ZdZed             ZdS )r   Tc                     |j         rt          d          t          |t          j                  rKt          |t          j                  r3t          j        t          |          t          |          z            S d S d S Nrz   )r|   r}   r-   r.   r   r/   r7   r   s      r3   r   zFloatTrueDiv.eval  sy    
 ? 	8#$6777dEL)) 	=j%,.O.O 	=;uT{{U7^^;<<<	= 	= 	= 	=r5   Nr  r@   r5   r3   r   r     s2        G= = [= = =r5   r   c                   (    e Zd ZdZed             ZdS )r   Tc                 j   |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 r1t          j        t          |          t          |          z            S t          |t          j	                  rKt          |t          j	                  r3t          j        t          |          t          |          z            S d S d S r  )r|   r}   r-   r.   r   r   r~   r/   r7   rH   rG   r   s      r3   r   zIntTrueDiv.eval  s    ? 	8#$6777 tU\**
	=7EL11
	= &%(UXI>>>vw58)DDD
 ;uT{{U7^^;<<<dEM** 	9z'5=/Q/Q 	9;s4yy3w<<7888	9 	9 	9 	9r5   Nr  r@   r5   r3   r   r     s2        G9 9 [9 9 9r5   r   c                   (    e Zd ZdZed             ZdS )r    Tc                    t          |          dz  dk    sJ t          |          dz  }|d|         }||d          }ddlm} t          d |D                       r  |d |D             d |D                       S |dk    r6|d         j        r|d         dk    rdS |d         j        r|d         dk     rdS t          d |D                       r|dk    sJ t          t          t          ||          t          j        d          	           \  }}t          d
 |d d         D                       r-|d d         dz   } |d |D             d |D                       S d S )Nrf   r   )!eval_is_non_overlapping_and_densec              3   J   K   | ]}t          |t          j                  V  d S r,   r-   r.   rH   r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s.      ::z!U]++::::::r5   c                 ,    g | ]}t          |          S r@   rG   r0   s     r3   rL   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>  s    '''AQ'''r5   c                 ,    g | ]}t          |          S r@   r  r0   s     r3   rL   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>  s    )B)B)BQ#a&&)B)B)Br5   r   c              3   J   K   | ]}t          |t          j                  V  d S r,   r  r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s.      ==z!U]++======r5   )keyc              3   J   K   | ]}t          |t          j                  V  d S r,   r  r0   s     r3   r4   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s.      FFA:a//FFFFFFr5   r{   )*   c                 ,    g | ]}t          |          S r@   r  r0   s     r3   rL   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>  s    ---SVV---r5   c                 ,    g | ]}t          |          S r@   r  r0   s     r3   rL   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>  s    /J/J/J1A/J/J/Jr5   )	r   %torch.fx.experimental.symbolic_shapesr  r^   r   zipsortedoperator
itemgetter)r   r8   dimsizesstridesr  s_sizes	s_stridess           r3   r   z&IsNonOverlappingAndDenseIndicator.eval  s   4yy1}!!!!$ii1nQsUstt*	
 	
 	
 	
 	
 	
 ::T::::: 	44''''')B)B')B)B)B   !88qz# 
aqQx! eAhllq ==W===== 	!8888 "%E7++1DQ1G1GHHH"GY FF"FFFFF !#2#,. 98--W---/J/J	/J/J/J   tr5   Nr   r@   r5   r3   r    r      s2        J0 0 [0 0 0r5   r    c                   (    e Zd ZdZed             ZdS )r!   Tc                     t          |t          j                  r3t          j        t	          j        t          |                              S d S r,   )r-   r.   r   r/   rO   truncr7   r   s     r3   r   zTruncToFloat.eval  sD     fel++ 	: ;tz%--88999		: 	:r5   Nr  r@   r5   r3   r!   r!     s2        G: : [: : :r5   r!   c                   (    e Zd ZdZed             ZdS )r"   Tc                    |t           j        t          fv rt          S |t           j         t           fv rt           S t          |t           j                  r3t          j        t          j        t          |                              S d S r,   )	r.   r~   r   r-   r   rH   rO   r  r7   r   s     r3   r   zTruncToInt.eval"  sv     eh'''Muxi&)))7Nfel++ 	<=E&MM!:!:;;;	< 	<r5   Nr   r@   r5   r3   r"   r"     r   r5   r"   c                   (    e Zd ZdZed             ZdS )r#   Tc                     |t           j        u rt          S |t           j         u rt           S t          |t           j                  r/t          j        t          t          |          d                    S d S ri   )r.   r~   r   r-   r   rH   roundr7   r   s     r3   r   zRoundToInt.eval1  sj     UXMehY7Nfel++ 	:=uV}}a!8!8999	: 	:r5   Nr   r@   r5   r3   r#   r#   .  s2        J: : [: : :r5   r#   c                   (    e Zd ZdZed             ZdS )r$   Tc                     t          |t          j                  rVt          |t          j                  r>t          j        t          t          |          t          |                              S d S d S r,   )r-   r.   r   rH   r/   r  r7   rG   )r   r   ndigitss      r3   r   zRoundDecimal.evalO  sk     fel++ 	C
7EM0R0R 	C;uU6]]CLLAABBB	C 	C 	C 	Cr5   Nr  r@   r5   r3   r$   r$   L  s7        GC C [C C Cr5   r$   c                   (    e Zd ZdZed             ZdS )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 d S r,   )r.   r~   r-   rH   r/   rG   r   r   s     r3   r   zToFloat.evalZ  sx    eh	***Mfem,, 	,;s6{{+++V8OfWH9 r5   Nr  r@   r5   r3   r%   r%   W  s2        G	 	 [	 	 	r5   r%   c                   $    e Zd ZdZd Zd Zd ZdS )r(   z4
    Prevents expansion and other optimizations
    c                 $    d| j         d          dS )Nz	Identity(r   rt   rj   rk   s    r3   __repr__zIdentity.__repr__l  s    *49Q<****r5   c                 &    | j         d         j        S ri   )r8   r  rk   s    r3   r  zIdentity._eval_is_realo  s    y|##r5   c                 &    | j         d         j        S ri   r   rk   s    r3   r   zIdentity._eval_is_integerr  s    y|&&r5   N)r   r   r   r   r  r  r   r@   r5   r3   r(   r(   g  sK         + + +$ $ $' ' ' ' 'r5   r(   c                 P      G  fddt           j                  }d z   |_        |S )Nc                   2    e Zd ZdZ Ze fd            ZdS )+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                 >   t          |t          j        t          j        f          rl	 t          j         t	          t
                    t          |                              S # t          $ r!  t	          t                    |          cY S w xY w|t          j        t          j         t          j	        t          j	         t          t           fv rJ|t          u rt          j        }|t           u rt          j         } t	          t                    |          S d S r,   )r-   r.   rH   r/   getattrrO   r7   OverflowErrorr~   r  r   )r   r2   names     r3   r   z0make_opaque_unary_fn.<locals>.OpaqueUnaryFn.eval  s    !emU[9:: /3 ;':wtT':':588'D'DEEE % 3 3 3/75$//222223ux%(EI	z6F7SSS;;A<<	A+wud++A...4s   <A& &(BBN)r   r   r   r   _torch_handler_namer   r   )r   s   r3   OpaqueUnaryFnr  w  sJ        	 	 #		 	 	 	 
	 	 	r5   r  OpaqueUnaryFn_)r.   Functionr   )r   r  s   ` r3   make_opaque_unary_fnr  v  sO    ! ! ! ! ! ! ! ! ! !F .4Mr5   sqrtcoscoshsinsinhtantanhasinacosatanr  logasinh)Kr<   rO   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>   rC   rc   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_asinhr@   r5   r3   <module>r*     s         



                          + + + + + + 7 7 7 7 7 7 7 7 7 7 + + + + + + 9 9 9 9 9 9 9 9 & & & & & & % % % % % % * * * * * *      D  4
 
 
  % % %ta a a a au~ a a aH?6 ?6 ?6 ?6 ?6en ?6 ?6 ?6D    EN   :5: 5: 5: 5: 5: 5: 5: 5:r0 0 0 0 0%. 0 0 0f    x   ; ; ; ; ; ; ; ;< < < < < < < <; ; ; ; ;en ; ; ;     U^            U^      \? \? \? \? \?y \? \? \?~; ; ; ; ;*k ; ; ;": : : : :*k : : :$' ' '  4! ! ! ! !5> ! ! !2: : : : :u~ : : :(= = = = =5> = = =.9 9 9 9 9 9 9 9:4 4 4 4 4 4 4 4p
: 
: 
: 
: 
:5> 
: 
: 
:< < < < < < < <: : : : : : : :<C C C C C5> C C C    en    ' ' ' ' 'u~ ' ' '& & &T *)&11 ((// ))&11 ((// ))&11 ((// ))&11 ))&11 ))&11 ))&11 ((// ((// **733   r5   