
    iD                        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j`                  f   f   fdZ1dee.   dee.   dee.   fdZ2dejf                  d ejf                  dejf                  fd!Z4 G d" d#ejj                        Z6 G d$ d%ejj                        Z7 G d& d'ejj                        Z8 G d( d)ejj                        Z9 G d* d+ejj                        Z: G d, d-e6      Z; G d. d/ejj                        Z< G d0 d1ejj                        Z= G d2 d3ejj                        Z> G d4 d5ejj                        Z? G d6 d7ejj                        Z@ G d8 d9ee      ZA G d: d;eAe      ZB G d< d=eAe      ZCd> ZDd? ZE G d@ dAejj                        ZF G dB dCejj                        ZG G dD dEejj                        ZH G dF dGejj                        ZI G dH dIejj                        ZJ G dJ dKejj                        ZK G dL dMejj                        ZL G dN dOejj                        ZM G dP dQejj                        ZN G dR dSejj                        ZO G dT dUejj                        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      Zby)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                   xrn t        | j                        dk(  xrT | j                  d   j                  xr9 | j                  d   j                  xr | j                  d   | j                  d   uS )N   r   r   )is_Addlen_args	is_symbol)r6   s    V/var/www/html/engine/venv/lib/python3.12/site-packages/torch/utils/_sympy/functions.py_is_symbols_binary_summationr?   Z   sr     	 	/

Oq 	/JJqM##	/ JJqM##	/ JJqMA.    fc                      t        j                         dt        t           dt        t
        t        j                  f   f fd       }|S )Nargsr7   c                       |  }t        d | D              r8t        |t        j                        st        j                  t	        |            }|S )Nc              3   P   K   | ]  }t        |t        j                           y wN)
isinstancesympyFloat.0as     r>   	<genexpr>z-_keep_float.<locals>.inner.<locals>.<genexpr>k   s     8az!U[[)8   $&)anyrG   rH   rI   float)rC   rrA   s     r>   innerz_keep_float.<locals>.innerh   sD    $%tH8488u{{B
 E!H%Ar@   )	functoolswrapsr
   r   r   r   rH   rI   )rA   rR   s   ` r>   _keep_floatrU   e   sF     __QVC[ U2u{{?%;   Lr@   xyc                     d | |fv ry | |k(  S rF    )rV   rW   s     r>   fuzzy_eqrZ   t   s    1v~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                  j                  |                   }t         j                  j                  |      }|D ]  t        fd|D              s|z  } |S )a  
    Fast path for sympy.gcd, using a simple factoring strategy.

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

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

 yy-..+
s   ;A4r6   c                     t        t        j                  j                  |             }t	        j
                  t        j                  |      S rF   )maprH   Addr`   rS   reducerd   gcd)r6   integer_factorsrh   s     r>   integer_factorz+simple_floordiv_gcd.<locals>.integer_factor   s:    ),!4!4T!:*
 /::r@   c              3   &   K   | ]  }|v  
 y wrF   rY   )rK   
base_splitrV   s     r>   rM   z&simple_floordiv_gcd.<locals>.<genexpr>   s     =:qJ=s   )rH   Basicra   rd   rm   listrj   r_   r`   rk   all)r[   r\   ro   rm   base_splitsdivisor_splitrh   rV   s         @@r>   simple_floordiv_gcdrw   z   s    "/u{{ /s /;U[[ ;S ; xxq)>!+<=Cs7AGqA15EII!4!4Q!782K .3YY-@-@-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y)r    a  
    We maintain this so that:
    1. We can use divisibility guards to simplify FloorDiv(a, b) to a / b.
    2. Printing out the expression is nicer (compared to say, representing a//b as (a - a % b) / b)

    NB: This is Python-style floor division, round to -Inf
    r9   .nargs#   
precedenceT
is_integerr7   c                      | j                   d   S Nr   rC   selfs    r>   basezFloorDiv.base       yy|r@   c                      | j                   d   S Nr   r   r   s    r>   divisorzFloorDiv.divisor   r   r@   printerc                     |j                  | j                  t        d   dz
        }|j                  | j                  t        d   dz
        }d| d| dS )NAtom      ?(z//)parenthesizer   r   r   r   r   r   r   s       r>   	_sympystrzFloorDiv._sympystr   sW    ##DIIz&/AC/GH&&t||Z5G#5MN4&7)1%%r@   r   r   Nc                 V   |j                   rt        d      |t        t         t        j                  t        j                   fv r>|t        t         t        j                  t        j                   fv rt        j
                  S |t        j
                  u s|t        j
                  u rt        j
                  S |j                   rt        j                  j                  S |j                  rt        |d      r|S |j                  r"t        |d      rt        j                  |d      S t        |t        j                        rt        |t        j                        r|t        t         t        j                  t        j                   fv s.|t        t         t        j                  t        j                   fv rt        |      t        |      z  }|t        j                  k(  rt        S |t        j                   k(  rt         S t        j                   |      rt        j
                  S t        j"                  t        j$                  |            S t        |t        j"                        rDt        |t        j"                        r*t        j"                  t'        |      t'        |      z        S t        |t(              r)t)        |j*                  d   |j*                  d   |z        S t        |t        j"                        rd}g }t        j,                  j/                  |      D ]*  }||z  }|j                  s|j1                  |       ||z  }, t3        |      dk7  r%t)        |t        j,                  |ddiz
  |      |z   S 	 t5        ||      }t        |d      r0t        |t        j,                        rt        j6                  ||      }t        |d      s8t)        t        j8                  ||z        t        j8                  ||z              S 	 y # t        j:                  $ r Y y w xY w)Ndivision by zeror   r   evaluateF)is_zeroZeroDivisionErrorr   rH   oonanr   Zeror}   r   r_   rG   NumberrP   rd   infisnanrb   floorra   r    rC   rk   r`   appendr;   rw   rm   simplifyPolynomialError)	clsr   r   rQ   	quotientstermstermquotientrm   s	            r>   evalzFloorDiv.eval   s    ??#$677FVGUXXy99gGHHXXI	J
 ?
 99599599 499<<77<<??|GQ7K??|GR899T2&&tU\\*7ELL1&%((UXXI>>vw588)DD deGn,ADHH}txxiwAyy }}TZZ]33dEMM*z'5==/Q==Tc'l!:;;dH%DIIaL$))A,*@AA gu}}-IE		++D1 *'>&&LL&)I* 5zQ TEIIu$Eu$EEwO 
		%dG4CC#
7EII(Fiig.Q'NN4#:.w}0M  (  $$ 		s   BP P('P(c                     |j                  | j                  t        d   dz
        }|j                  | j                  t        d   dz
        }d| d| dS )Nr   r   zfloor(/r   r   r   s       r>   _ccodezFloorDiv._ccode'  sW    ##DIIz&/AC/GH&&t||Z5G#5MNvQwiq))r@   )__name__
__module____qualname____doc__rz   tuplera   __annotations__r|   r}   boolpropertyrH   rr   r   r   printing
StrPrinterstrr   classmethodrb   r   r   r   rY   r@   r>   r    r       s     "E5c?!JJekk     &!:!: &s & P==P+0==P	u{{D 	!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y)r!   zK
    ModularIndexing(a, b, c) => (a // b) % c where % is the C modulus
       .rz   Tr}   r{   r|   r   r   modulusr7   c                 r   |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k7  rTt        j
                  ||      }|dk7  r9t        t        j                  ||z        t        j                  ||z        |      S t        |t         j                        rg }d}|j                  D ]  }t        j
                  |||z        ||z  k7  s#t        |t         j                        r|dk  sSt        |t         j                        r=t        |j                  d   t         j                        r|j                  d   dk  rd} n|j                  |        t        |      t        |j                        k7  r|rt        t        |      ||      S t        |t              r*t        |j                  d   |j                  d   |z  |      S y # t         j                  $ r Y `w xY w)Nr   r   TF)rH   r   r   rG   rb   rm   r!   r   r   rk   rC   r_   r   r;   sumr    )r   r   r   r   rm   	new_termsall_positiver   s           r>   r   zModularIndexing.eval6  s    19177<< tU]]+7EMM27EMM2GOw..
	!|iig.!8*tcz2w}5  dEII&-/I!%L		 /99T7W#4579JJ"47D1H"43&tyy|U]]C IIaL1, (-!((./  9~TYY/L&s9~wHHdH%"499Q<11GQQ9 $$ 		s   <AH H65H6c                 f    | j                   d d \  }}t        |j                  |j                        S )Nr9   )rC   rZ   is_nonnegative)r   r[   r\   s      r>   _eval_is_nonnegativez$ModularIndexing._eval_is_nonnegativek  s.    yy!}1((!*:*:;;r@   N)r   r   r   r   rz   r   ra   r   r}   r   r|   r   rH   rb   r   rr   r   r   rY   r@   r>   r!   r!   -  s     "E5c?!JJ2==2+0==2CH==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y)r"   z#
    Good ol' ternary operator
    r   .rz   r{   r|   r7   c                 n    | j                   d   j                  r| j                   d   j                  rdS d S Nr   r9   TrC   r}   r   s    r>   _eval_is_integerzWhere._eval_is_integerx  s.    yy|..499Q<3J3JtTPTTr@   c                 n    | j                   d   j                  r| j                   d   j                  rdS d S r   )rC   r   r   s    r>   r   zWhere._eval_is_nonnegative{  s9     yy|**tyy|/J/J 	
 	
r@   c                 n    | j                   d   j                  r| j                   d   j                  rdS d S r   rC   is_positiver   s    r>   _eval_is_positivezWhere._eval_is_positive  s.    yy|//DIIaL4L4LtVRVVr@   cr[   r\   c                 X    |t         j                  k(  r|S |t         j                  k(  r|S y rF   )rH   truefalse)r   r   r[   r\   s       r>   r   z
Where.eval  s(     

?H%++Hr@   N)r   r   r   r   rz   r   ra   r   r|   r   r   r   r   r   r   rH   rr   r   rY   r@   r>   r"   r"   p  s     "E5c?!JU(4. U
htn 
W8D> 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y)r#   ry   .rz   r{   r|   Tr}   r[   r\   r7   c                 B   |j                   rt        d      |t        j                  u s||| fv s|dk(  rt        j                  S |j                  r|j                  r||z  S |j                  r=|dk(  r8|j
                  rt        j                  S |j                  rt        j                  S ||z  }|j                  rt        j                  S ||k  }|j                  rt        |      r|j                  r|S t        j                  ||      dk(  rt        j                  S y )NModulo by zeror   r9   r   )r   r   r   r   	is_Numberis_evenis_oddOner}   
is_Booleanr   r   rH   r$   r   r[   r\   rQ   lesss        r>   r   zPythonMod.eval  s     99#$455 ;!A2w,!q&66M ;;1;;q5L ;;16yyvvxxuu E<<66M
 1u??tDzammH99Q?a66Mr@   c                 <    | j                   d   j                  rdS d S Nr   Tr   r   s    r>   r   zPythonMod._eval_is_nonnegative      yy|//t9T9r@   c                 <    | j                   d   j                  rdS d S r   )rC   is_negativer   s    r>   _eval_is_nonpositivezPythonMod._eval_is_nonpositive  r   r@   c                 (   |j                  | j                  d   t        d   dz
        }|j                  | 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   r[   r\   abs_qs        r>   r   zPythonMod._ccode  s      1z&/AC/GH  1z&/AC/GH))A,22A$qc1#S8A3c!Cwc!CsCCr@   N)r   r   r   rz   r   ra   r   r|   r}   r   r   rH   r   r   r   r   r   r   rY   r@   r>   r#   r#     s    !E5c?!JJ*UZZ *EJJ *8EJJ3G * *Z:htn ::htn :Dr@   r#   c                   8    e Zd ZU dZdZeed<   dZdZe	d        Z
y)r$   ry   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(  r8|j
                  rt        j                  S |j                  rt        j                  S ||z  }|j                  rt        j                  S ||k  }|j                  rt        |      r|j                  r|S y y y )Nr   r   r   r9   )r   r   r   r   r   r   r   r   r}   r   r   r   r   s        r>   r   zMod.eval  s     99#$455 ;!A2w,!q&66M ;;1;;616616q5L ;;16yyvvxxuu E<<66M
 1u??tDzammH /<z?r@   N)r   r   r   rz   r|   ra   r   r}   r   r   r   rY   r@   r>   r$   r$     s-    EJJN) )r@   r$   c                       e Zd ZdZy)r%   zZ
    Div where we can assume no rounding.
    This is to enable future optimizations.
    N)r   r   r   r   rY   r@   r>   r%   r%     s    r@   r%   c                   &    e Zd ZdZed        Zd Zy)r&   Tc                    |t         j                  t        fv rt        S |t         j                   t         fv rt         S t        |t         j                        r1t        j
                  t        j                  t        |                  S y rF   )	rH   r   r   rG   r   rb   rd   ceilrP   r   numbers     r>   r   zCeilToInt.eval  se     ehh''Muxxi&))7Nfell+==5=!9:: ,r@   c                     |j                  | 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>    %%diilDIIaL4K4Kc4QRvha  r@   N)r   r   r   r}   r   r   r   rY   r@   r>   r&   r&     s    J; ;!r@   r&   c                        e Zd ZdZed        Zy)r'   Tc                 N   |t         j                  t        fv rt        S |t         j                   t        fv rt         S t        |t         j                        r|S t        |t         j
                        r1t        j                  t        j                  t        |                  S y rF   )	rH   r   r   rG   rb   r   rd   r   rP   r   s     r>   r   zFloorToInt.eval%  st    ehh''Muxxi((7Nfemm,Mfell+==E&M!:;; ,r@   Nr   r   r   r}   r   r   rY   r@   r>   r'   r'   "  s    J< <r@   r'   c                       e Zd ZdZdZd Zy)r(   z.
    Div used in indexing that rounds up.
    Tc                     t        j                  |      }t        j                  |      }t        j                  ||      |k(  rt        ||      S t	        ||dz
  z   |      S r   )rH   r   rm   r%   r    r   r   r   s      r>   __new__zCeilDiv.__new__8  sT    }}T"--(99T7#w.D'**DGaK0'::r@   N)r   r   r   r   r}   r   rY   r@   r>   r(   r(   1  s     J;r@   r(   c                        e Zd ZdZed        Zy)r+   Tc                 2    |dk  rt        d      |d|z  z  S Nr   znegative shift countr9   )
ValueErrorr   r   shifts      r>   r   zLShift.evalD  s#    19344ahr@   Nr   rY   r@   r>   r+   r+   A  s    J r@   r+   c                        e Zd ZdZed        Zy)r,   Tc                 @    |dk  rt        d      t        |d|z        S r   )r   r    r   s      r>   r   zRShift.evalN  s&    19344ah''r@   Nr   rY   r@   r>   r,   r,   K  s    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)y)%
MinMaxBasec                 &   ddl m} |j                  d|j                        }d |D        }|sd n| j	                  |      }|rC	 t        | j                  |            }|& | j                  |fi |} | j                  |fi |}t        |      }|s| j                  S t        |      dk(  rt        |      j                         S t        j                  | gt!        |      i |}||_        ||_        |S # t        $ r | j                  cY S w xY w)Nr   )global_parametersr   c              3   2   K   | ]  }t        |        y wrF   r   )rK   rf   s     r>   rM   z%MinMaxBase.__new__.<locals>.<genexpr>Z  s     66s   r   )sympy.core.parametersr   popr   "_satisfy_unique_summations_symbols	frozenset_new_args_filterr   zero_collapse_arguments_find_localzerosidentityr;   rs   r   r   r   _argsetunique_summations_symbols)r   original_argsassumptionsr   r   rC   r	  objs           r>   r   zMinMaxBase.__new__V  s   ;??:/@/I/IJ66
  77F 	"   !!5!5d!;< )0.s..tC{C ,s++D@K@<<t9>:>>## ll3>>+>(A%
3    xx s   C8 8DDr7   c                 *   t        |      dk7  ryt        |d   t              r
|d   |d   fn	|d   |d   f\  }}t        |      syt        |      r| j	                  |      S t        |t              r"t        |dd      }|| j	                  |g|      S y)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    < t9> $q':. !Wd1gq'47# 	c ,C0 (,&&t,, c:&,30$-) -8**C52OPPr@   Ninitial_setc                     |
t               n|}|D ]`  }|j                         D ]K  }t        |t        j                  j
                  j                        s  y||v r  y|j                  |       M b |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_symbolsrf   elements         r>   r  zMinMaxBase._unique_symbols  st     !, 3su 	.C99; .!'5::+<+<+C+CD, $$W-.	. r@   c                     |s|S t        t        |            } t        u rt        nt        |d   j                  rg g fx}\  }}|D ]X  }t        |t        t              D ]>  }|j                  d   j                  s|t        |t                 j                  |       @ Z t        j                  }|D ])  }|j                  d   }|j                  s||k  dk(  s(|}+ t        j                  }	|D ])  }|j                  d   }|j                  s||	kD  dk(  s(|}	+  t        u r!|D ]  }
|
j                  s n7|
|k  dk(  s|
} n) t        k(  r |D ]  }
|
j                  s n|
|	kD  dk(  s|
}	 d} t        u r|t        j                  k7  r$t        |}n|	t        j                  k7  rt        |	}|`t        t        |            D ]I  }||   }t        |      s|j                  d   }t        k(  r||kD  n||k  dk(  s; j                  ||<   K  fdt        |      D ](  \  }}||dz   d D cg c]  } ||       c}||dz   d *  fd}t        |      dkD  r ||      }|S c c}w )a}  Remove redundant args.

        Examples
        ========

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

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

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

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

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

        first standard filter, for cls.zero and cls.identity.
        Also reshape ``Max(a, Max(b, c))`` to ``Max(a, b, c)``,
        and check arguments for comparability
        FzThe argument 'z' is not comparable.N)rG   r   is_extended_realr8  r9  r   r  r   r  r!  rC   )r   arg_sequencerf   s      r>   r  zMinMaxBase._new_args_filterV  s        	C sD)''50MM#*;*; >#6J!KLLchh"3''$S88##	!	 $s   BB$B"B$c                    t               }d}|D ]\  }|j                  r=||}| t        u rt        ||      })| t        u rt        ||      }>t        d|        |j                  |       ^ ||S t        |      dk(  r|hS t        |      dk(  rOt        t        |            }|dv r|j                  r| t        u r|S |hS |dk(  r|j                  r| t        u r|S |hS |j                  |       |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_valuerf   other_values          r>   r  zMinMaxBase._find_localzerosq  s    u	 	&C}}$ #Icz$'	3$7	$'	3$7	,{3%-@AA  %	& |!;|!tL12KH$)C)C'*cz|B	{BA~+"9"9'*cz|B	{B#r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_algebraicrK   r$  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>       (HA(H   r   rC   r4  s    r>   r)  zMinMaxBase.<lambda>      5(H(H#H r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_antihermitianrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>        - 	
-rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>      u -- ( r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_commutativerU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>        + 	
+rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>      U ++ & r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )
is_complexrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>       &Dq||&DrW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>      &DQVV&D!D r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_compositerU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rV  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  rZ  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )r   rU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>       #>!AII#>rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>      e#>qvv#>> r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )	is_finiterU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s     %Baakk%BrW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  s    %B166%B B r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_hermitianrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rV  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  rZ  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_imaginaryrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rV  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  rZ  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_infiniterU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>       'F!'FrW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>      %'Fqvv'F"F r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )r}   rU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rh  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  ri  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_irrationalrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>       )Ja!//)JrW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>      E)J166)J$J r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r   rU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r}  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  r~  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_nonintegerrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  r  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r   rU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rc  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  rd  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_nonpositiverU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rc  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  rd  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )
is_nonzerorU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  rh  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  ri  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )r   rU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s     "<188"<rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  s    U"<QVV"<< r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_polarrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>       $@AQZZ$@rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>      u$@$@@ r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r   rU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r}  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  r~  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_primerU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  r  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_rationalrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r}  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  r~  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_realrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ro  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  rp  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )rE  rU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  r^  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  r_  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )is_transcendentalrU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  s      . 	
.rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  s     .. ) r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   )r   rU  s     r>   rM   z&MinMaxBase.<lambda>.<locals>.<genexpr>  ro  rW  rX  rY  s    r>   r)  zMinMaxBase.<lambda>  rp  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_zerorY   r@   r>   r   r   U  s   +Z 5	#ejj''../	05 5n JN (UZZ->->-E-E)F G	#ejj''../	0 $ E EN  4 , ,\ I EH>MBOHHFDJFJ E<L@NF@NF>M ?Mr@   r   c                   R    e Zd ZdZej
                  Zej                  Zd Z	d Z
d Zy)r   z=
    Return, if possible, the maximum value of the list.
    c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r  rJ   s     r>   rM   z(Max._eval_is_positive.<locals>.<genexpr>       9!9rW  r   rC   r   s    r>   r   zMax._eval_is_positive      9tyy999r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r  rJ   s     r>   rM   z+Max._eval_is_nonnegative.<locals>.<genexpr>  s     <Q((<rW  r  r   s    r>   r   zMax._eval_is_nonnegative  s    <$))<<<r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r  rJ   s     r>   rM   z(Max._eval_is_negative.<locals>.<genexpr>       :1:rW  r   rC   r   s    r>   r  zMax._eval_is_negative      :		:::r@   N)r   r   r   r   r   Infinityr  NegativeInfinityr  r   r   r  rY   r@   r>   r   r     s,     ::D!!H:=;r@   r   c                   R    e Zd ZdZej
                  Zej                  Zd Z	d Z
d Zy)r  z=
    Return, if possible, the minimum value of the list.
    c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r  rJ   s     r>   rM   z(Min._eval_is_positive.<locals>.<genexpr>  r  rW  r  r   s    r>   r   zMin._eval_is_positive  r  r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r  rJ   s     r>   rM   z+Min._eval_is_nonnegative.<locals>.<genexpr>  s     =a))=rW  r  r   s    r>   r   zMin._eval_is_nonnegative  s    =499===r@   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wrF   r  rJ   s     r>   rM   z(Min._eval_is_negative.<locals>.<genexpr>  r  rW  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  rY   r@   r>   r  r    s,     DzzH;>:r@   r  c                 L    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    s8    Daxu!GqLqb)D#&&&r@   c                     |dk  rt        d      |dk(  ryt        | |dz        }|t        u rt        S ||z  }|t        j                  kD  rt        S |dz  dk(  r|| z  }|t        j                  kD  rt        S |S )Nr   zExponent must be non-negative.r   r9   )r   r  r   sysmaxsize)r   exponenthalf_expresults       r>   r  r    s    !|9::1}h!m,H6
  F!|q$CKKMMr@   c                   0    e Zd ZU dZdZeed<   ed        Zy)r4   T2   r|   c                    t        |t        j                        rLt        |t        j                        r2t        ||      }|t         t        fv r|S t        j                  |      S t        |t        j                        rt        j
                  ||      S |t        t        j                  fv r/|j                  rt        S |j                  rt        j                  S y y rF   )
rG   rH   rb   r  r   Powr   r   r   zoo)r   r   r  rQ   s       r>   r   zPowByNatural.eval  s    dEMM*z#u}}/Ms#AfWf%%==##c5==) 99T3''6588$$""!!yy  " %r@   N)	r   r   r   r}   r|   ra   r   r   r   rY   r@   r>   r4   r4     s#    JJ! !r@   r4   c                   0    e Zd ZU dZdZeed<   ed        Zy)r3   T<   r|   c                     t        |t        j                        rEt        |t        j                        r*t        j                  t	        |      t	        |      z        S y y rF   )rG   rH   r   rI   rP   )r   r   r  s      r>   r   zFloatPow.eval5  sD     dELL)jell.K;;uT{eCj899 /L)r@   N	r   r   r   r  r|   ra   r   r   r   rY   r@   r>   r3   r3   0  s#    GJ: :r@   r3   c                   0    e Zd ZU dZdZeed<   ed        Zy)r*   Tr{   r|   c                     |j                   rt        d      t        |t        j                        rEt        |t        j                        r*t        j
                  t        |      t        |      z        S y y Nr   )r   r   rG   rH   r   rI   rP   r   s      r>   r   zFloatTrueDiv.evalK  sW    
 ??#$677dELL)j%,,.O;;uT{U7^;<< /P)r@   Nr  rY   r@   r>   r*   r*   F  s#    GJ= =r@   r*   c                   6    e Zd ZU dZdZeed<   ed        Zd Z	y)r)   Tr{   r|   c                 d   |j                   rt        d      t        |t        j                        rt        |t        j                        r|t
        t
         t        j                  t        j                   fv s.|t
        t
         t        j                  t        j                   fv r*t        j                  t        |      t        |      z        S t        |t        j                        rEt        |t        j                        r*t        j                  t        |      t        |      z        S y y r  )r   r   rG   rH   r   r   r   rI   rP   rb   ra   r   s      r>   r   zIntTrueDiv.evald  s    ??#$677 tU\\*7ELL1&%((UXXI>>vw588)DD
 ;;uT{U7^;<<dEMM*z'5==/Q;;s4y3w<788 0R*r@   c                     |j                  | j                  d   t        d   dz
        }|j                  | 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  s_    ##DIIaL*V2Ds2JK&&tyy|Z5G#5MNvVG9A..r@   N)
r   r   r   r  r|   ra   r   r   r   r   rY   r@   r>   r)   r)   _  s(    GJ9 9$/r@   r)   c                        e Zd ZdZed        Zy)r-   Tc           	         t        |      dz  dk(  sJ t        |      dz  }|d| }||d  }ddlm} t        d |D              r7 ||D cg c]  }t	        |       c}|D cg c]  }t	        |       c}      S |dk(  r0|d   j
                  r	|d   dk(  ry|d   j
                  r	|d   dk  ryt        d |D              r|dk7  sJ t        t        t        ||d      t        j                  d      	      d
di\  }}t        d |d d D              r?|d d dz   } ||D cg c]  }t	        |       c}|D cg c]  }t	        |       c}      S y c c}w c c}w c c}w c c}w )Nr9   r   )!eval_is_non_overlapping_and_densec              3   P   K   | ]  }t        |t        j                           y wrF   rG   rH   rb   rJ   s     r>   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s     :z!U]]+:rN   r   c              3   P   K   | ]  }t        |t        j                           y wrF   r  rJ   s     r>   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s     =z!U]]+=rN   F)strict)keyr  c              3   P   K   | ]  }t        |t        j                           y wrF   r  rJ   s     r>   rM   z9IsNonOverlappingAndDenseIndicator.eval.<locals>.<genexpr>  s     FA:a/FrN   r   )*   )
r;   %torch.fx.experimental.symbolic_shapesr  rt   ra   r   zipsortedoperator
itemgetter)	r   rC   dimsizesstridesr  rL   s_sizes	s_stridess	            r>   r   z&IsNonOverlappingAndDenseIndicator.eval  s   4y1}!!!$i1nQsst*	
 :T::4!&'AQ'')BQ#a&)B  !8qz##
aQx!!eAhl =W==!8O8 "%E759x?R?RST?UV""GY
 F"FF!#2,. 9%,-SV-	/J1A/J  I ()BB ./Js   
E"E
$E <E%
Nr   rY   r@   r>   r-   r-     s    J1 1r@   r-   c                        e Zd ZdZed        Zy)r.   Tc                     t        |t        j                        r1t        j                  t	        j
                  t        |                  S y rF   )rG   rH   r   rI   rd   truncrP   r   s     r>   r   zTruncToFloat.eval  s5     fell+ ;;tzz%-899	 ,r@   Nr   r   r   r  r   r   rY   r@   r>   r.   r.     s    G: :r@   r.   c                        e Zd ZdZed        Zy)r/   Tc                    |t         j                  t        fv rt        S |t         j                   t         fv rt         S t        |t         j                        r1t        j
                  t        j                  t        |                  S y rF   )	rH   r   r   rG   r   rb   rd   r  rP   r   s     r>   r   zTruncToInt.eval  se     ehh''Muxxi&))7Nfell+==E&M!:;; ,r@   Nr   rY   r@   r>   r/   r/     s    J< <r@   r/   c                        e Zd ZdZed        Zy)r0   Tc                     |t         j                  u rt        S |t         j                   u rt         S t        |t         j                        r(t        j
                  t        t        |      d            S y r   )rH   r   r   rG   r   rb   roundrP   r   s     r>   r   zRoundToInt.eval  sW     UXXMehhY7Nfell+==uV}a!899 ,r@   Nr   rY   r@   r>   r0   r0     s    J: :r@   r0   c                        e Zd ZdZed        Zy)r1   Tc                     t        |t        j                        rLt        |t        j                        r1t        j                  t        t        |      t        |                  S y y rF   )rG   rH   r   rb   rI   r  rP   ra   )r   r   ndigitss      r>   r   zRoundDecimal.eval  sF     fell+
7EMM0R;;uU6]CLABB 1S+r@   Nr  rY   r@   r>   r1   r1     s    GC Cr@   r1   c                        e Zd ZdZed        Zy)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 y rF   )rH   r   rG   rb   rI   ra   r   r   s     r>   r   zToFloat.eval  sk    ehh	**Mfemm,;;s6{++V88OfWHH9 r@   Nr  rY   r@   r>   r2   r2     s    G	 	r@   r2   c                   D    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y
)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    499Q<.**r@   c                 4    | j                   d   j                  S r   )rC   r  r   s    r>   r  zIdentity._eval_is_real  s    yy|###r@   c                 4    | j                   d   j                  S r   r   r   s    r>   r   zIdentity._eval_is_integer  s    yy|&&&r@   c                      | j                   d   S r   r   )r   hintss     r>   _eval_expand_identityzIdentity._eval_expand_identity!  r   r@   r7   c                 2    t        | j                  d         S r   )ra   rC   r   s    r>   __int__zIdentity.__int__%  s    499Q<  r@   c                 2    t        | j                  d         S r   )rP   rC   r   s    r>   	__float__zIdentity.__float__(  s    TYYq\""r@   N)r   r   r   r   r|   r  r  r   r  ra   r!  rP   r#  rY   r@   r>   r5   r5     s:     J+$'! !#5 #r@   r5   c                 d      G  fddt         j                        }d z   }||_        ||_        |S )Nc                   0    e Zd ZdZW  ZeZe fd       Zy)+make_opaque_unary_fn.<locals>.OpaqueUnaryFna  
        Unlike the builtin sympy functions on real numbers like sympy.sqrt,
        these equivalents do not do any nontrivial reasoning besides
        constant propagation.  This helps avoid performing transformations
        that are valid for real numbers but are invalid for floating point;
        in particular, while we are willing to make optimizations that change
        numerics for Tensor compute, we are NOT willing to make optimizations
        that change numerics for size compute.
        c                 j   t        |t        j                  t        j                  f      r3	 t        j                   t	        t
              t        |                  S |t        j                  t        j                   t        j                  t        j                   t        t         fv rc|t        u rt        j                  }|t         u rt        j                   }dk(  rt        j                  |d      S  t	        t              |      S y # t        $ r  t	        t              |      cY S w xY w)Nlog2r9   )rG   rH   rb   rI   r  rd   rP   OverflowErrorr   r  r   log)r   rL   names     r>   r   z0make_opaque_unary_fn.<locals>.OpaqueUnaryFn.eval;  s    !emmU[[9:3 ;;':wtT':58'DEE
 uxx%((EII		z6F7SS;A<	A6> 99Q?*+wud+A.. % 3/75$/223s   1D D21D2N)	r   r   r   r   _torch_handler_namemake_opaque_unary_fn_torch_unpicklerr   r   )r+  s   r>   OpaqueUnaryFnr&  -  s(    	 #/		 
	r@   r/  OpaqueUnaryFn_)rH   Functionr   r   )r+  r/  nms   `  r>   r-  r-  ,  s6    $ $L 
D	 BM!#Mr@   sqrtcoscoshsinsinhtantanhasinacosatanr  r*  asinhr(  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                   d    e Zd ZU W  ZW Zeed<    ej                  e	W       Z
efd       Zy))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      r\t        |t        j                  t        f      r<t        j                   t        t              t        |      t        |                  S y )Nr   r   )r   r  r  rH   rb   rG   ra   )r   rL   brE  s      r>   r   z.make_opaque_bitwise_fn.<locals>.BitwiseFn.evalz  s    ||6wx6q!<<||MMq!a0||MMq!a0!emmS12zEMM3'8 }}%DWX|%DSVSQRV%TUUr@   N)r   r   r   r,  r|   ra   r   rS   partialmake_opaque_bitwise_fnr.  r   r   )r+  precrE  s   r>   	BitwiseFnrD  s  s?    "
C,9,,"
 
	 
	r@   rK  
BitwiseFn_)r   rJ  rH   r1  r   r   )r+  rE  rK  r2  rJ  s   ``  @r>   rI  rI  k  sp    },'		+&}TF344 ENN * 
	BIIr@   r?  and_rA  or_)crS   rd   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   rU   rZ   rr   rw   r1  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_log2rI  BitwiseFn_bitwise_andBitwiseFn_bitwise_orrY   r@   r>   <module>rn     s{      
 $ I I 2      + 7 7 + 9 & % 0 *  ( T'5B4uzz d r!"vc{mU2u{{?334 8D> htn )5;; )5;; )5;; )|r*u~~ r*j@<enn @<FENN B>D >DD1%.. 1hx ! !$< <;enn ; U^^ (U^^ (v?y v?r;*k ;$:*k :$'4!5>> !6:u~~ :,=5>> =2/ /H5 5r
:5>> 
:< <: :<C5>> Cenn  #u~~ #6+^ *&1 (/ )&1 (/ )&1 (/ )&1 )&1 )&1 )&1 (/ (/ *73 )&1 !H /}fE -lEB r@   