
    QVjiD                     D   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZm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' ddl(m)Z) e	rd dlm*Z*  e
de          Z+ ed          Z,g dZ-dej        de.fdZ/deee,         ge+f         deee,         gee+ej0        f         f         fdZ1dee.         dee.         dee.         fdZ2dej3        d ej3        dej3        fd!Z4 G d" d#ej5                  Z6 G d$ d%ej5                  Z7 G d& d'ej5                  Z8 G d( d)ej5                  Z9 G d* d+ej5                  Z: G d, d-e6          Z; G d. d/ej5                  Z< G d0 d1ej5                  Z= G d2 d3ej5                  Z> G d4 d5ej5                  Z? G d6 d7ej5                  Z@ G d8 d9ee          ZA G d: d;eAe          ZB G d< d=eAe          ZCd> ZDd? ZE G d@ dAej5                  ZF G dB dCej5                  ZG G dD dEej5                  ZH G dF dGej5                  ZI G dH dIej5                  ZJ G dJ dKej5                  ZK G dL dMej5                  ZL G dN dOej5                  ZM G dP dQej5                  ZN G dR dSej5                  ZO G dT dUej5                  ZPdV ZQ eQdW          ZR eQdX          ZS eQdY          ZT eQdZ          ZU eQd[          ZV eQd\          ZW eQd]          ZX eQd^          ZY eQd_          ZZ eQd`          Z[ eQda          Z\ eQdb          Z] eQdc          Z^ eQdd          Z_de Z` e`dfdg          Za e`dhdi          ZbdS )j    N)Callable)OptionalSupportsFloatTYPE_CHECKINGTypeVarUnion)TypeVarTupleUnpack)Ssympify)Expr)Application)_torf	fuzzy_andfuzzy_or)equal_valued)	LatticeOpShortCircuit)ordered)walk)
PRECEDENCE)sift   )int_oo)Iterable_T)bound_Ts)FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDiv
IntTrueDivFloatTrueDivLShiftRShift!IsNonOverlappingAndDenseIndicatorTruncToFloat
TruncToInt
RoundToIntRoundDecimalToFloatFloatPowPowByNaturalIdentityexprreturnc                     | j         oUt          | j                  dk    o=| j        d         j        o+| j        d         j        o| j        d         | j        d         uS )N   r   r   )is_Addlen_args	is_symbol)r6   s    V/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/utils/_sympy/functions.py_is_symbols_binary_summationr?   Z   sb     	 	/
OOq 	/JqM#	/ JqM#	/ JqMA.    fc                      t          j                   dt          t                   dt          t
          t          j        f         f fd            }|S )Nargsr7   c                       |  }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     r>   	<genexpr>z-_keep_float.<locals>.inner.<locals>.<genexpr>k   s.      88az!U[))888888r@   )anyrG   rH   rI   float)rC   rrA   s     r>   innerz_keep_float.<locals>.innerh   sc    $%AtH88488888 	&u{B
 B
 	& E!HH%%Ar@   )	functoolswrapsr
   r   r   r   rH   rI   )rA   rQ   s   ` r>   _keep_floatrT   e   s\     _QVC[ U2u{?%;       Lr@   xyc                     d | |fv rd S | |k    S rF    )rU   rV   s     r>   fuzzy_eqrY   t   s    1v~~t6Mr@   pqc                    dt           j        dt          fddt           j        dt          f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.
    rU   r7   c                 |    d t           j                            |           D             }t          j        |          S )Nc                     g | ]?}t          |t          t          j        f          #t	          t          |                    @S rX   )rG   intrH   IntegerabsrK   args     r>   
<listcomp>zDsimple_floordiv_gcd.<locals>.integer_coefficient.<locals>.<listcomp>   sK     +
 +
 +
#U]344+
CMM+
 +
 +
r@   )rH   Mul	make_argsmathprod)rU   integer_coefficientss     r>   integer_coefficientz0simple_floordiv_gcd.<locals>.integer_coefficient   sD    +
 +
y**1--+
 +
 +

 y-...r@   r6   c                     t          t          j                            |                     }t	          j        t          j        |          S rF   )maprH   Addrf   rR   reducerg   gcd)r6   integer_factorsrj   s     r>   integer_factorz+simple_floordiv_gcd.<locals>.integer_factor   s>    ),!4!4T!:!:*
 *
 /:::r@   c              3       K   | ]}|v V  	d S rF   rX   )rK   
base_splitrU   s     r>   rM   z&simple_floordiv_gcd.<locals>.<genexpr>   s'      ==:qJ======r@   )rH   Basicr_   rg   ro   listrl   re   rf   rm   all)rZ   r[   rq   ro   base_splitsdivisor_splitrj   rU   s         @@r>   simple_floordiv_gcdry   z   s   "/u{ /s / / / /;U[ ;S ; ; ; ; ; ; xq))>>!+<+<==Cs7AGqA15EI!4!4Q!7!7882 2K .3Y-@-@-C-CM  ========= 	'CJr@   c            	          e Zd ZU dZdZeedf         ed<   dZeed<   dZ	e
ed<   ed	ej        fd
            Zed	ej        fd            Zdej        j        d	efdZedej        dej        d	eej        df         fd            Z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
    r9   .nargs#   
precedenceT
is_integerr7   c                     | j         d         S Nr   rC   selfs    r>   basezFloorDiv.base       y|r@   c                     | j         d         S Nr   r   r   s    r>   divisorzFloorDiv.divisor   r   r@   printerc                     |                     | j        t          d         dz
            }|                     | j        t          d         dz
            }d| d| dS )NAtom      ?(z//)parenthesizer   r   r   r   r   r   r   s       r>   	_sympystrzFloorDiv._sympystr   s]    ##DIz&/AC/GHH&&t|Z5G#5MNN%4%%7%%%%r@   r   r   Nc                    |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          |t          j                  rd}g }t          j                            |          D ](}||z  }|j        r|                    |           ||z  })t3          |          dk    r%t)          |t          j        |ddiz
  |          |z   S 	 t5          ||          }t          |d          r/t          |t          j                  rt          j        ||          }t          |d          s:t)          t          j        ||z            t          j        ||z                      S n# t          j        $ r Y nw xY wd S )Ndivision by zeror   r   evaluateF)is_zeroZeroDivisionErrorr   rH   oonanr   Zeror   r   re   rG   NumberrO   rg   infisnanr`   floorr_   r    rC   rm   rf   appendr;   ry   ro   simplifyPolynomialError)	clsr   r   rP   	quotientstermstermquotientro   s	            r>   evalzFloorDiv.eval   s    ? 	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 gu}-- 	IE	++D11 * *'>& *LL&&&)I5zzQ TEIu$Eu$E$EEwOO 
		%dG44CC## /
7EI(F(F /ig..Q'' N4#:..w}0M0M   $ 	 	 	D	 ts   BO- -O?>O?c                     |                     | j        t          d         dz
            }|                     | j        t          d         dz
            }d| d| dS )Nr   r   zfloor(/r   r   r   s       r>   _ccodezFloorDiv._ccode'  s]    ##DIz&/AC/GHH&&t|Z5G#5MNN)))w))))r@   )__name__
__module____qualname____doc__r|   tupler_   __annotations__r~   r   boolpropertyrH   rt   r   r   printing
StrPrinterstrr   classmethodr`   r   r   r   rX   r@   r>   r    r       s0          "E5c?!!!JJek    X     X&!: &s & & & & P=P+0=P	u{D 	!P P P [Pd* * * * *r@   r    c            
           e Zd ZU dZdZeedf         ed<   dZe	ed<   dZ
eed<   ed	ej        d
ej        dej        deej                 fd            Zdee	         fdZdS )r!   zK
    ModularIndexing(a, b, c) => (a // b) % c where % is the C modulus
       .r|   Tr   r}   r~   r   r   modulusr7   c                 z   |dk    s|dk    rt           j        j        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)rH   r   r   rG   r`   ro   r!   r   r   rm   rC   re   r   r;   sumr    )r   r   r   r   ro   	new_termsall_positiver   s           r>   r   zModularIndexing.eval6  s9    19917< 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ts   5AC C$#C$c                 Z    | j         d d         \  }}t          |j        |j                  S )Nr9   )rC   rY   is_nonnegative)r   rZ   r[   s      r>   _eval_is_nonnegativez$ModularIndexing._eval_is_nonnegativek  s+    y!}1(!*:;;;r@   N)r   r   r   r   r|   r   r_   r   r   r   r~   r   rH   r`   r   rt   r   r   rX   r@   r>   r!   r!   -  s           "E5c?!!!JJ2=2+0=2CH=2	%+	2 2 2 [2h<htn < < < < < <r@   r!   c            
           e Zd ZU dZdZeedf         ed<   dZeed<   de	e
         fdZde	e
         fd	Zde	e
         fd
Zedej        dej        dej        de	ej                 fd            ZdS )r"   z#
    Good ol' ternary operator
    r   .r|   r}   r~   r7   c                 R    | j         d         j        r| j         d         j        rdnd S Nr   r9   TrC   r   r   s    r>   _eval_is_integerzWhere._eval_is_integerx  s)    y|.T49Q<3JTttPTTr@   c                 R    | j         d         j        r| j         d         j        rdnd S r   )rC   r   r   s    r>   r   zWhere._eval_is_nonnegative{  s2     y|*/3y|/JDD	
r@   c                 R    | j         d         j        r| j         d         j        rdnd S r   rC   is_positiver   s    r>   _eval_is_positivezWhere._eval_is_positive  s)    y|/VDIaL4LVttRVVr@   crZ   r[   c                 N    |t           j        k    r|S |t           j        k    r|S d S rF   )rH   truefalse)r   r   rZ   r[   s       r>   r   z
Where.eval  s+     
??H%+Htr@   N)r   r   r   r   r|   r   r_   r   r~   r   r   r   r   r   r   rH   rt   r   rX   r@   r>   r"   r"   p  s           "E5c?!!!JU(4. U U U U
htn 
 
 
 
W8D> W W W W  %05	%+	   [  r@   r"   c                       e Zd ZU dZeedf         ed<   dZeed<   dZe	ed<   e
dej        d	ej        d
eej                 fd            Zd
ee	         fdZd
ee	         fdZd ZdS )r#   r{   .r|   r}   r~   Tr   rZ   r[   r7   c                    |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   r9   r   )r   r   r   r   	is_Numberis_evenis_oddOner   
is_Booleanr   r   rH   r$   r   rZ   r[   rP   lesss        r>   r   zPythonMod.eval  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tr@   c                 .    | j         d         j        rdnd S Nr   Tr   r   s    r>   r   zPythonMod._eval_is_nonnegative      y|/9ttT9r@   c                 .    | j         d         j        rdnd S r   )rC   is_negativer   s    r>   _eval_is_nonpositivezPythonMod._eval_is_nonpositive  r   r@   c                 :   |                     | j        d         t          d         dz
            }|                     | j        d         t          d         dz
            }| j        d         j        rt	          |          nd| d}d| d| d	| d| d
| d| d| S )Nr   r   r   r   zabs(r   r   z % z) < 0 ? z + z : )r   rC   r   r   r   )r   r   rZ   r[   abs_qs        r>   r   zPythonMod._ccode  s      1z&/AC/GHH  1z&/AC/GHH)A,2CAqC1CCCCACC!CCCC!CCCCCr@   N)r   r   r   r|   r   r_   r   r~   r   r   r   rH   r   r   r   r   r   r   rX   r@   r>   r#   r#     s         !E5c?!!!JJ*UZ *EJ *8EJ3G * * * [*Z:htn : : : ::htn : : : :D D D D Dr@   r#   c                   @    e Zd ZU dZdZeed<   dZdZe	d             Z
dS )r$   r{   r}   r~   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   r9   )r   r   r   r   r   r   r   r   r   r   r   r   r   s        r>   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	 	 	 	 	 	r@   N)r   r   r   r|   r~   r_   r   r   r   r   r   rX   r@   r>   r$   r$     sN         EJJN) ) [) ) )r@   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   rX   r@   r>   r%   r%     s           r@   r%   c                   .    e Zd ZdZed             Z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 rF   )	rH   r   r   rG   r   r`   rg   ceilrO   r   numbers     r>   r   zCeilToInt.eval  sv     eh'''Muxi&)))7Nfel++ 	;=5==!9!9:::	; 	;r@   c                 v    |                     | j        d         | j        d         j        dz
            }d| dS )Nr   r   zceil(r   )r   rC   r~   )r   r   r   s      r>   r   zCeilToInt._ccode  s<    %%dilDIaL4Kc4QRR v    r@   N)r   r   r   r   r   r   r   rX   r@   r>   r&   r&     sA        J; ; [;! ! ! ! !r@   r&   c                   (    e Zd ZdZed             ZdS )r'   Tc                 L   |t           j        t          fv rt          S |t           j         t          fv rt           S t          |t           j                  r|S t          |t           j                  r3t          j        t          j        t          |                              S d S rF   )	rH   r   r   rG   r`   r   rg   r   rO   r   s     r>   r   zFloorToInt.eval%  s    eh'''Muxi(((7Nfem,, 	Mfel++ 	<=E&MM!:!:;;;	< 	<r@   Nr   r   r   r   r   r   rX   r@   r>   r'   r'   "  s2        J< < [< < <r@   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 r   )rH   r   ro   r%   r    r   r   r   s      r>   __new__zCeilDiv.__new__8  s`    }T""-((9T7##w..D'***DGaK0':::r@   N)r   r   r   r   r   r   rX   r@   r>   r(   r(   1  s4          J; ; ; ; ;r@   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 countr9   )
ValueErrorr   r   shifts      r>   r   zLShift.evalD  s(    1993444ahr@   Nr   rX   r@   r>   r+   r+   A  s2        J  [  r@   r+   c                   (    e Zd ZdZed             ZdS )r,   Tc                 R    |dk     rt          d          t          |d|z            S r   )r   r    r   s      r>   r   zRShift.evalN  s.    1993444ah'''r@   Nr   rX   r@   r>   r,   r,   K  s2        J( ( [( ( (r@   r,   c                      e Zd Zd Zedeeej        j	        j
                          fd            Ze	 d$deeej        j	        j
                          deeej        j	        j
                          f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             }|sd n|                     |          }|rY	 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_parametersr   c              3   4   K   | ]}t          |          V  d S rF   r   rb   s     r>   rM   z%MinMaxBase.__new__.<locals>.<genexpr>Z  s(      66666666r@   r   )sympy.core.parametersr   popr   "_satisfy_unique_summations_symbols	frozenset_new_args_filterr   zero_collapse_arguments_find_localzerosidentityr;   ru   r   r   r   _argsetunique_summations_symbols)r   original_argsassumptionsr   r   rC   r  objs           r>   r   zMinMaxBase.__new__V  sq   ;;;;;;??:/@/IJJ66666
 GDD77FF 	"  	A  !!5!5d!;!;<<      x 
 )0.s.tCC{CC ,s+D@@K@@ 	 <t99>>::>>### l3>>>>+>>(A%
s   
"A- -B Br7   c                    t          |          dk    rdS t          |d         t                    r|d         |d         fn|d         |d         f\  }}t          |          sdS t          |          r|                     |          S t          |t                    r*t          |dd          }||                     |g|          S dS )a  
        One common case in some models is building expressions of the form
        max(max(max(a+b...), c+d), e+f) which is simplified to max(a+b, c+d, e+f, ...).
        For such expressions, we call the Max constructor X times (once for each nested
        max) and the expression gets flattened.

        An expensive cost in constructing those expressions is running _collapse_arguments
        and _find_localzeros. However, those two optimizations are unnecessary when the args
        to max are all of the form a+b, c+d, ..etc where each term uses a unique set of symbols.

        This function is used to detect such properties of the expressions we are building
        and if so inform that we do not need to run those optimizations. To detect those,
        we store a property in the expression that tells that this expression is a min/max
        operation over terms that use unique symbols "unique_summations_symbols". This property
        also memoize the set of symbols used in all the terms to make it faster to detect this
        property inductively.

        When we apply max to add a new term, all we need to do is check if the new term uses
        unique symbols (with respect to existing terms and itself).
        Example:
        t = Max(a+b, c+d) ==> satisfies the property
        Max(t, h+j)       ==> h,j not in [a,b,c,d] => satisfy the property.

        The function returns None if the new expression does not satisfy the unique_summations_symbols
        property. Otherwise, it returns a new set of unique symbols.
        r9   Nr   r   r  )r;   rG   r   r?   _unique_symbolsgetattr)r   rC   lhsrhslhs_unique_summations_symbolss        r>   r  z-MinMaxBase._satisfy_unique_summations_symbols  s    < t99>>4 $q':..$T!Wd1gq'47# 	c ,C00 	4 (,, 	-&&t,,, c:&& 	Q,30$- -) -8**C52OPPPtr@   Ninitial_setc                     |t                      n|}|D ]^}|                                D ]G}t          |t          j        j        j                  s  dS ||v r  dS |                    |           H_|S )z
        Return seen_symbols if all atoms in all args are all unique symbols,
        else returns None. initial_set can be used to represent initial value for seen_symbols
        N)setatomsrG   rH   coresymbolSymboladd)r   rC   r  seen_symbolsrc   elements         r>   r  zMinMaxBase._unique_symbols  s     !, 3suuu 	. 	.C99;; . .!'5:+<+CDD .444,,444 $$W----. r@   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 rX   rX   rK   irL   dos     r>   rd   z>MinMaxBase._collapse_arguments.<locals>.do.<locals>.<listcomp>*  s#     ; ; ;aAq ; ; ;r@   r   Fc                 4    g | ]}|k     |          S rX   rX   r"  s     r>   rd   z>MinMaxBase._collapse_arguments.<locals>.do.<locals>.<listcomp>,  s(     E E Eaa1ffAqfffr@   )rG   MinMaxrC   func)airL   condr   r$  s    ` r>   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Hr@   c                 (    g | ]} |          S rX   rX   )rK   r)  rL   r$  s     r>   rd   z2MinMaxBase._collapse_arguments.<locals>.<listcomp>0  s#    ???2RRAYY???r@   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 rF   )rG   )rc   others    r>   <lambda>zGMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<lambda>:  s    :c5#9#9 r@   T)binaryc                 6    g | ]}t          |j                  S rX   )r  rC   rb   s     r>   rd   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>@  s     <<<#CH<<<r@   c                     g | ]}|z
  S rX   rX   )rK   arg_setcommons     r>   rd   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>F  s    FFF'Wv-FFFr@   c                      g | ]
} |d diS )r   FrX   )rK   sr.  s     r>   rd   zIMinMaxBase._collapse_arguments.<locals>.factor_minmax.<locals>.<listcomp>K  s(    "T"T"T55!#<e#<#<"T"T"Tr@   r   F)r   r  intersectionru   rv   r   )rC   is_other
other_argsremaining_argsarg_setsnew_other_argsarg_sets_diffother_args_diffother_args_factoredr4  r   r.  s            @r>   factor_minmaxz5MinMaxBase._collapse_arguments.<locals>.factor_minmax9  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9r@   )ru   r   r&  r'  	is_numberr   rC   is_comparablerG   r   r	  ranger;   	enumerate)r   rC   r  siftedminsmaxsr#  vsmallbigrc   Ta0r@  rL   r$  r.  s   `             @@@r>   r  zMinMaxBase._collapse_arguments  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r@   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)rG   r   is_extended_realrA  rB  r   r  r   r	  r(  rC   )r   arg_sequencerc   s      r>   r  zMinMaxBase._new_args_filterV  s         	 	C sD))M'500M 1*-*; 1 !!K#!K!K!KLLLch"3'''$$S8########				!	 	r@   c                 "   t                      }d}|D ]i}|j        rK||}| t          u rt          ||          }(| t          u rt          ||          }Bt          d|            |                    |           j||S t          |          dk    r|hS t          |          dk    rPt          t          |                    }|dv r|j        r| t          u r|n|hS |dk    r|j        r| t          u r|n|hS |                    |           |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.

        Unlike the sympy implementation, we only look for zero and one, we don't
        do generic is connected test pairwise which is slow
        Nzimpossible r   r   )g        r   )r  r   r'  maxr&  minAssertionErrorr  r;   nextiterr   r   )r   valuesoptionsother_values	num_valuerc   other_values          r>   r  zMinMaxBase._find_localzerosq  sP    uu	 	& 	&C} &$ #IIczz$'	3$7$7		$'	3$7$7		,-@3-@-@AAA  %%%% |!!;|!!tL1122KH$$)C$'*czz||	{BA~~+"9~'*czz||	{B###r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_algebraicrK   r#  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      (H(HA(H(H(H(H(H(Hr@   r   rC   r6  s    r>   r/  zMinMaxBase.<lambda>      5(H(H(H(H(H#H#H r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_antihermitianr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  9       - - 	
- - - - - -r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  .    u - -- - - ( ( r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_commutativer^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  9       + + 	
+ + + + + +r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  .    U + ++ + + & & r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )
is_complexr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      &D&Dq|&D&D&D&D&D&Dr@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>      &D&DQV&D&D&D!D!D r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_compositer^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r_  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rb  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )r   r^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      #>#>!AI#>#>#>#>#>#>r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>      e#>#>qv#>#>#>>> r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )	is_finiter^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s$      %B%Baak%B%B%B%B%B%Br@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  s    %B%B16%B%B%B B B r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_hermitianr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r_  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rb  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_imaginaryr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r_  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rb  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_infiniter^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      'F'F!'F'F'F'F'F'Fr@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>      %'F'Fqv'F'F'F"F"F r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )r   r^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rp  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rq  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_irrationalr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      )J)Ja!/)J)J)J)J)J)Jr@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>      E)J)J16)J)J)J$J$J r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   r   r^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  r  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_nonintegerr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  r  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   r   r^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rk  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rl  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_nonpositiver^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rk  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rl  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )
is_nonzeror^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rp  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rq  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )r   r^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s$      "<"<18"<"<"<"<"<"<r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  s    U"<"<QV"<"<"<<< r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_polarr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  $      $@$@AQZ$@$@$@$@$@$@r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>      u$@$@$@$@$@@@ r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   r   r^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  r  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_primer^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  r  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_rationalr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  r  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_realr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rw  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rx  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )rN  r^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rf  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rg  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )is_transcendentalr^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s9       . . 	
. . . . . .r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  s.     . .. . . ) ) r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   )r   r^  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rw  r@   r`  ra  s    r>   r/  zMinMaxBase.<lambda>  rx  r@   rF   )*r   r   r   r   r   r   r  rH   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_zerorX   r@   r>   r   r   U  s       + + +Z 5	#ej'./	05 5 5 [5n JN  (UZ->-E)F G	#ej'./	0   [$ E E [EN   [4 , , [,\ 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   ?>MMMr@   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 rF   r  rJ   s     r>   rM   z(Max._eval_is_positive.<locals>.<genexpr>  $      99!999999r@   r   rC   r   s    r>   r   zMax._eval_is_positive  !    99ty999999r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   r  rJ   s     r>   rM   z+Max._eval_is_nonnegative.<locals>.<genexpr>  s%      <<Q(<<<<<<r@   r  r   s    r>   r   zMax._eval_is_nonnegative  s!    <<$)<<<<<<r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   r  rJ   s     r>   rM   z(Max._eval_is_negative.<locals>.<genexpr>  $      ::1::::::r@   r   rC   r   s    r>   r  zMax._eval_is_negative  !    ::	::::::r@   N)r   r   r   r   r   Infinityr  NegativeInfinityr	  r   r   r  rX   r@   r>   r'  r'    s\          :D!H: : := = =; ; ; ; ;r@   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 rF   r  rJ   s     r>   rM   z(Min._eval_is_positive.<locals>.<genexpr>  r  r@   r  r   s    r>   r   zMin._eval_is_positive  r  r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   r  rJ   s     r>   rM   z+Min._eval_is_nonnegative.<locals>.<genexpr>  s%      ==a)======r@   r  r   s    r>   r   zMin._eval_is_nonnegative  s!    ==49======r@   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S rF   r  rJ   s     r>   rM   z(Min._eval_is_negative.<locals>.<genexpr>  r  r@   r  r   s    r>   r  zMin._eval_is_negative  r  r@   N)r   r   r   r   r   r  r  r  r	  r   r   r  rX   r@   r>   r&  r&    s\          DzH; ; ;> > >: : : : :r@   r&  c                 X    d}| dk     r|  } |dz  dk    rdnd}|t          | |          z  S )Nr   r   r9   r   )	_safe_pow)r   expsigns      r>   safe_powr    sA    Daxxu!GqLLqqb)D#&&&&r@   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   r9   )r   r  r   sysmaxsize)r   exponenthalf_expresults       r>   r  r    s    !||9:::1}}qh!m,,H6
  F!|q$CKMMr@   c                   8    e Zd ZU dZdZeed<   ed             ZdS )r4   T2   r~   c                    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 rF   )
rG   rH   r`   r  r   Powr   r   r   zoo)r   r   r  rP   s       r>   r   zPowByNatural.eval  s    dEM** 	$z#u}/M/M 	$s##AfWf%%%=###c5=)) 	( 9T3'''658$$$" !! !y 	 %$! !r@   N)	r   r   r   r   r~   r_   r   r   r   rX   r@   r>   r4   r4     sD         JJ! ! [! ! !r@   r4   c                   8    e Zd ZU dZdZeed<   ed             ZdS )r3   T<   r~   c                     t          |t          j                  rKt          |t          j                  r3t          j        t	          |          t	          |          z            S d S d S rF   )rG   rH   r   rI   rO   )r   r   r  s      r>   r   zFloatPow.eval5  s`     dEL)) 	:jel.K.K 	:;uT{{eCjj8999	: 	: 	: 	:r@   N	r   r   r   r  r~   r_   r   r   r   rX   r@   r>   r3   r3   0  sD         GJ: : [: : :r@   r3   c                   8    e Zd ZU dZdZeed<   ed             ZdS )r*   Tr}   r~   c                     |j         rt          d          t          |t          j                  rKt          |t          j                  r3t          j        t          |          t          |          z            S d S d S Nr   )r   r   rG   rH   r   rI   rO   r   s      r>   r   zFloatTrueDiv.evalK  sy    
 ? 	8#$6777dEL)) 	=j%,.O.O 	=;uT{{U7^^;<<<	= 	= 	= 	=r@   Nr  rX   r@   r>   r*   r*   F  sD         GJ= = [= = =r@   r*   c                   >    e Zd ZU dZdZeed<   ed             Zd Z	dS )r)   Tr}   r~   c                 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   rG   rH   r   r   r   rI   rO   r`   r_   r   s      r>   r   zIntTrueDiv.evald  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 	9r@   c                     |                     | j        d         t          d         dz
            }|                     | j        d         t          d         dz
            }d| d| dS )Nr   r   r   r   z((int)z/(int)r   )r   rC   r   r   s       r>   r   zIntTrueDiv._ccodew  se    ##DIaL*V2Ds2JKK&&ty|Z5G#5MNN...G....r@   N)
r   r   r   r  r~   r_   r   r   r   r   rX   r@   r>   r)   r)   _  sS         GJ9 9 [9$/ / / / /r@   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          ||d	
          t          j        d                    dd	i\  }}t          d |d d         D                       r-|d d         dz   } |d |D             d |D                       S d S )Nr9   r   )!eval_is_non_overlapping_and_densec              3   J   K   | ]}t          |t          j                  V  d S rF   rG   rH   r`   rJ   s     r>   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s.      ::z!U]++::::::r@   c                 ,    g | ]}t          |          S rX   r_   rJ   s     r>   rd   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>  s    '''AQ'''r@   c                 ,    g | ]}t          |          S rX   r  rJ   s     r>   rd   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>  s    )B)B)BQ#a&&)B)B)Br@   r   c              3   J   K   | ]}t          |t          j                  V  d S rF   r  rJ   s     r>   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s.      ==z!U]++======r@   F)strict)keyr  c              3   J   K   | ]}t          |t          j                  V  d S rF   r  rJ   s     r>   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s.      FFA:a//FFFFFFr@   r   )*   c                 ,    g | ]}t          |          S rX   r  rJ   s     r>   rd   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>  s    ---SVV---r@   c                 ,    g | ]}t          |          S rX   r  rJ   s     r>   rd   z:IsNonOverlappingAndDenseIndicator.eval.<locals>.<listcomp>  s    /J/J/J1A/J/J/Jr@   )	r;   %torch.fx.experimental.symbolic_shapesr  rv   r   zipsortedoperator
itemgetter)r   rC   dimsizesstridesr  s_sizes	s_stridess           r>   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 "%E75999x?RST?U?UVVV"" "GY
 FF"FFFFF !#2#,. 98--W---/J/J	/J/J/J   tr@   Nr   rX   r@   r>   r-   r-     s2        J1 1 [1 1 1r@   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 rF   )rG   rH   r   rI   rg   truncrO   r   s     r>   r   zTruncToFloat.eval  sD     fel++ 	: ;tz%--88999		: 	:r@   Nr   r   r   r  r   r   rX   r@   r>   r.   r.     s2        G: : [: : :r@   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 rF   )	rH   r   r   rG   r   r`   rg   r  rO   r   s     r>   r   zTruncToInt.eval  sv     eh'''Muxi&)))7Nfel++ 	<=E&MM!:!:;;;	< 	<r@   Nr   rX   r@   r>   r/   r/     s2        J< < [< < <r@   r/   c                   (    e Zd ZdZed             ZdS )r0   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 r   )rH   r   r   rG   r   r`   roundrO   r   s     r>   r   zRoundToInt.eval  sj     UXMehY7Nfel++ 	:=uV}}a!8!8999	: 	:r@   Nr   rX   r@   r>   r0   r0     s2        J: : [: : :r@   r0   c                   (    e Zd ZdZed             ZdS )r1   Tc                     t          |t          j                  rVt          |t          j                  r>t          j        t          t          |          t          |                              S d S d S rF   )rG   rH   r   r`   rI   r  rO   r_   )r   r   ndigitss      r>   r   zRoundDecimal.eval  sk     fel++ 	C
7EM0R0R 	C;uU6]]CLLAABBB	C 	C 	C 	Cr@   Nr  rX   r@   r>   r1   r1     s7        GC C [C C Cr@   r1   c                   (    e Zd ZdZed             ZdS )r2   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 rF   )rH   r   rG   r`   rI   r_   r   r   s     r>   r   zToFloat.eval  sx    eh	***Mfem,, 	,;s6{{+++V8OfWH9 r@   Nr  rX   r@   r>   r2   r2     s2        G	 	 [	 	 	r@   r2   c                   F    e Zd ZdZdZd Zd Zd Zd Zde	fdZ
defd	Zd
S )r5   z4
    Prevents expansion and other optimizations
    
   c                 $    d| j         d          dS )Nz	Identity(r   r   r   r   s    r>   __repr__zIdentity.__repr__  s    *49Q<****r@   c                 &    | j         d         j        S r   )rC   r  r   s    r>   r  zIdentity._eval_is_real  s    y|##r@   c                 &    | j         d         j        S r   r   r   s    r>   r   zIdentity._eval_is_integer  s    y|&&r@   c                     | j         d         S r   r   )r   hintss     r>   _eval_expand_identityzIdentity._eval_expand_identity!  r   r@   r7   c                 6    t          | j        d                   S r   )r_   rC   r   s    r>   __int__zIdentity.__int__%  s    49Q<   r@   c                 6    t          | j        d                   S r   )rO   rC   r   s    r>   	__float__zIdentity.__float__(  s    TYq\"""r@   N)r   r   r   r   r~   r'  r  r   r,  r_   r.  rO   r0  rX   r@   r>   r5   r5     s          J+ + +$ $ $' ' '  ! ! ! ! !#5 # # # # # #r@   r5   c                 b      G  fddt           j                  }d z   }||_        ||_        |S )Nc                   6    e Zd ZdZ Ze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 optimizations
        that change numerics for size compute.
        c                 t   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 re|t          u rt          j        }|t           u rt          j         }dk    rt          j        |d          S  t	          t                    |          S d S )Nlog2r9   )rG   rH   r`   rI   r  rg   rO   OverflowErrorr   r  r   log)r   rL   names     r>   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6>> 9Q??*+wud++A...4s   <A& &(BBN)	r   r   r   r   _torch_handler_namemake_opaque_unary_fn_torch_unpicklerr   r   )r8  s   r>   OpaqueUnaryFnr3  -  sP        	 	 #/		 	 	 	 
	 	 	r@   r<  OpaqueUnaryFn_)rH   Functionr   r   )r8  r<  nms   `  r>   r:  r:  ,  s\    $ $ $ $ $ $ $ $ $ $L 
D	 BM!#Mr@   sqrtcoscoshsinsinhtantanhasinacosatanr  r7  asinhr5  c                       dk    rt           d         n& dk    rt           d         nt          d             G  fddt          j                  }d z   }||_        ||_        |S )	Nbitwise_and
BitwiseAnd
bitwise_or	BitwiseOrzunrecognized c                   b    e Zd ZU  ZZeed<    ej        e	          Z
efd            ZdS ))make_opaque_bitwise_fn.<locals>.BitwiseFnr~   )real_op_namec                    |j         r&|j         r t          t                    ||          S |j         rt          j        |rdnd          }|j         rt          j        |rdnd          }t          |t          j        t          f          rlt          |t          j        t          f          rKt          j         t          t                    t          |          t          |                              S d S )Nr   r   )r   r  r  rH   r`   rG   r_   )r   rL   brR  s      r>   r   z.make_opaque_bitwise_fn.<locals>.BitwiseFn.evalz  s    | = =6wx66q!<<<| 1Mq-!!a00| 1Mq-!!a00!emS122 VzEM3'8 8 V }%DWX|%D%DSVVSQRVV%T%TUUU4r@   N)r   r   r   r9  r~   r_   r   rR   partialmake_opaque_bitwise_fnr;  r   r   )r8  precrR  s   r>   	BitwiseFnrQ  s  sq         "
C,9,"
 
 
 
	 	 	 	 
	 	 	r@   rX  
BitwiseFn_)r   rS  rH   r>  r   r   )r8  rR  rX  r?  rW  s   ``  @r>   rV  rV  k  s    },'			+&3T33444        EN   * 
	BIIr@   rL  and_rN  or_)crR   rg   r  r  collections.abcr   typingr   r   r   r   r   typing_extensionsr	   r
   rH   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.printing.precedencer   sympy.utilities.iterablesr   numbersr   r   r   r   __all__r   r?   rI   rT   rY   rt   ry   r>  r    r!   r"   r#   r$   r%   r&   r'   r(   r+   r,   r   r'  r&  r  r  r4   r3   r*   r)   r-   r.   r/   r0   r1   r2   r5   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_asinhOpaqueUnaryFn_log2rV  BitwiseFn_bitwise_andBitwiseFn_bitwise_orrX   r@   r>   <module>r{     st         



 $ $ $ $ $ $ I I I I I I I I I I I I I I 2 2 2 2 2 2 2 2                          + + + + + + 7 7 7 7 7 7 7 7 7 7 + + + + + + 9 9 9 9 9 9 9 9 & & & & & & % % % % % % 0 0 0 0 0 0 * * * * * *        )(((((( WT'''l5B  4uz d    r!"vc{mU2u{?334    8D> htn    )5; )5; )5; ) ) ) )|r* r* r* r* r*u~ r* r* r*j@< @< @< @< @<en @< @< @<F    EN   B>D >D >D >D >D >D >D >DD1 1 1 1 1%. 1 1 1h    x   ! ! ! ! ! ! ! !$< < < < < < < <; ; ; ; ;en ; ; ;     U^   ( ( ( ( (U^ ( ( (v? v? v? v? v?y v? v? v?r; ; ; ; ;*k ; ; ;$: : : : :*k : : :$' ' '  4! ! ! ! !5> ! ! !6: : : : :u~ : : :,= = = = =5> = = =2/ / / / / / / /H5 5 5 5 5 5 5 5r
: 
: 
: 
: 
:5> 
: 
: 
:< < < < < < < <: : : : : : : :<C C C C C5> C C C    en    # # # # #u~ # # #6+ + +^ *)&11 ((// ))&11 ((// ))&11 ((// ))&11 ))&11 ))&11 ))&11 ((// ((// **733 ))&11 ! ! !H /.}fEE --lEBB   r@   