
    EdR                        d Z ddlmZmZ ddlmZ ddlmZm	Z	m
Z
mZ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 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$ 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. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 e2e&fd            Z7e2e&fd            Z8e2e&fd            Z9e2d             Z:i Z; G d de0          Z< G d d ee0e          Z=d!S )"z!Sparse rational function fields.     )AnyDict)reduce)addmulltlegtge)Expr)Mod)Exp1)S)Symbol)CantSympifysympify)ExpBase)DomainElementFractionField)PolynomialRing)construct_domain)lex)CoercionFailed)build_options)_parallel_dict_from_expr)PolyElement)DefaultPrinting)public)is_sequence)pollutec                 :    t          | ||          }|f|j        z   S )zFConstruct new rational function field returning (field, x1, ..., xn). 	FracFieldgenssymbolsdomainorder_fields       2lib/python3.11/site-packages/sympy/polys/fields.pyfieldr,      s$     w..F9v{""    c                 6    t          | ||          }||j        fS )zHConstruct new rational function field returning (field, (x1, ..., xn)). r#   r&   s       r+   xfieldr/   $   s"     w..FFK  r-   c                 p    t          | ||          }t          d |j        D             |j                   |S )zSConstruct new rational function field and inject generators into global namespace. c                     g | ]	}|j         
S  )name).0syms     r+   
<listcomp>zvfield.<locals>.<listcomp>.   s    2223ch222r-   )r$   r!   r'   r%   r&   s       r+   vfieldr7   *   s=     w..F22&.222FK@@@Mr-   c                    d}t          |           s| gd}} t          t          t          |                     } t	          ||          }g }| D ])}|                    |                                           *t          ||          \  }}|j        3t          d |D             g           }t          ||          \  |_        }	t          |j        |j        |j                  }
g }t          dt          |          d          D ]8}|                     |
t#          |||dz                                           9|r
|
|d         fS |
|fS )a  Construct a field deriving generators and domain
    from options and input expressions.

    Parameters
    ==========

    exprs   : py:class:`~.Expr` or sequence of :py:class:`~.Expr` (sympifiable)

    symbols : sequence of :py:class:`~.Symbol`/:py:class:`~.Expr`

    options : keyword arguments understood by :py:class:`~.Options`

    Examples
    ========

    >>> from sympy import exp, log, symbols, sfield

    >>> x = symbols("x")
    >>> K, f = sfield((x*log(x) + 4*x**2)*exp(1/x + log(x)/3)/x**2)
    >>> K
    Rational function field in x, exp(1/x), log(x), x**(1/3) over ZZ with lex order
    >>> f
    (4*x**2*(exp(1/x)) + x*(exp(1/x))*(log(x)))/((x**(1/3))**5)
    FTNc                 P    g | ]#}t          |                                          $S r2   )listvalues)r4   reps     r+   r6   zsfield.<locals>.<listcomp>Y   s(    999Sd3::<<((999r-   )optr      )r    r:   mapr   r   extendas_numer_denomr   r(   sumr   r$   r%   r)   rangelenappendtuple)exprsr'   optionssingler=   numdensexprrepscoeffs_r*   fracsis                r+   sfieldrQ   1   se   4 Fu &vWe$$%%E

)
)CG . .t**,,----(#66ID#
z : 99D9992>>(S999
AsxSY77FE1c$ii## 1 1VVE$q1u+..//0000 a!!r-   c                   ~    e Zd ZdZefdZd Zd Zd Zd Z	d Z
d Zdd
ZddZd Zd Zd ZeZd Zd Zd Zd Zd	S )r$   z2Multivariate distributed rational function field. c                    ddl m}  ||||          }|j        }|j        }|j        }|j        }| j        ||||f}t                              |          }|4t          
                    |           }||_        t          |          |_        ||_        t          dt           fd|i          |_        ||_        ||_        ||_        ||_        |                    |j                  |_        |                    |j                  |_        |                                |_        t-          |j        |j                  D ]B\  }	}
t/          |	t0                    r(|	j        }t5          ||          st7          |||
           C|t          |<   |S )Nr   PolyRingFracElementr,   )sympy.polys.ringsrU   r'   ngensr(   r)   __name___field_cachegetobject__new___hash_tuplehash_hashringtyperV   dtypezeroone_gensr%   zip
isinstancer   r3   hasattrsetattr)clsr'   r(   r)   rU   ra   rX   r^   objsymbol	generatorr3   s               r+   r]   zFracField.__new__k   s{   ......x//,

|WeVUC{++ 	,..%%C)CO[))CICH][NWcNKKCI!CKCICJCIyy++CHii))CGyy{{CH%(ch%?%? 6 6!	ff-- 6!;D"3-- 6T9555(+L%
r-   c                 N     t           fd j        j        D                       S )z(Return a list of polynomial generators. c                 :    g | ]}                     |          S r2   rc   )r4   genselfs     r+   r6   z#FracField._gens.<locals>.<listcomp>   s#    BBB3tzz#BBBr-   )rF   ra   r%   rs   s   `r+   rf   zFracField._gens   s*    BBBB$).BBBCCCr-   c                 *    | j         | j        | j        fS N)r'   r(   r)   rt   s    r+   __getnewargs__zFracField.__getnewargs__   s    dk4:66r-   c                     | j         S rv   )r`   rt   s    r+   __hash__zFracField.__hash__   s
    zr-   c                     t          || j                  r,| j                            |                                          S t          d| j        d|d          )Nzexpected a , got z instead)rh   rc   ra   indexto_poly
ValueError)rs   rr   s     r+   r|   zFracField.index   sR    c4:&& 	Q9??3;;==111*


333OPPPr-   c                     t          |t                    o5| j        | j        | j        | j        f|j        |j        |j        |j        fk    S rv   )rh   r$   r'   rX   r(   r)   rs   others     r+   __eq__zFracField.__eq__   sI    %++ D\4:t{DJ?]EKu{CD	Dr-   c                     | |k     S rv   r2   r   s     r+   __ne__zFracField.__ne__   s    5=  r-   Nc                 .    |                      ||          S rv   rq   rs   numerdenoms      r+   raw_newzFracField.raw_new   s    zz%'''r-   c                 z    || j         j        }|                    |          \  }}|                     ||          S rv   )ra   re   cancelr   r   s      r+   newzFracField.new   s9    /$)-%||E**u||E5)))r-   c                 6    | j                             |          S rv   )r(   convert)rs   elements     r+   
domain_newzFracField.domain_new   s    {""7+++r-   c                    	 |                      | j                            |                    S # t          $ r | j        }|j        s|j        r| j        }|                                }|                    |          }|                    |	                    |                    }|                    |
                    |                    }|                     ||          cY S  w xY wrv   )r   ra   
ground_newr   r(   is_Fieldhas_assoc_Field	get_fieldr   r   r   r   )rs   r   r(   ra   ground_fieldr   r   s          r+   r   zFracField.ground_new   s    	88DI0099::: 	 	 	[F? v'= y%//11&..w77(:(:7(C(CDD(:(:7(C(CDD||E511111	s   ,/ B5C(&C(c                 h   t          |t                    r| |j        k    r|S t          | j        t                    r*| j        j        |j        k    r|                     |          S t          | j        t                    r<| j        j                                        |j        k    r|                     |          S t          d          t          |t                    r|                                \  }}t          | j        t                    r0|j        | j        j        k    r| j                            |          }nvt          | j        t                    rB|j        | j        j                                        k    r| j                            |          }n|                    | j                  }| j                            |          }|                     ||          S t          |t                    rSt!          |          dk    r@t#          t%          | j        j        |                    \  }}|                     ||          S t          |t*                    rt          d          t          |t,                    r|                     |          S |                     |          S )N
conversionr>   parsing)rh   rV   r,   r(   r   r   r   ra   to_fieldNotImplementedErrorr   clear_denomsto_ringset_ringr   rF   rD   r:   r?   ring_newr   strr   	from_expr)rs   r   r   r   s       r+   	field_newzFracField.field_new   sQ   g{++ "	,w}$ $+}55 8!W]28w///DK88 8 ))++w}<8w///),777-- 	,"//11LE5$+~66 2
dk..2	,,U33DK77 2
dk/779992	,,U33ty11I((//E<<u---'' 	,CLLA,= 	,DI$6 @ @AALE588E5)))%% 	,%i000&& 	,>>'***??7+++r-   c                     | j         t          d                                 D                       fd |          S )Nc              3   z   K   | ]6}|j         st          |t                    ||                                fV  7d S rv   )is_Powrh   r   as_base_exp)r4   rr   s     r+   	<genexpr>z*FracField._rebuild_expr.<locals>.<genexpr>   s]       7 7Cz7'W557S__../ 7 7 7 7 7 7r-   c           	         	                     |           }||S | j        r5t          t          t	          t          | j                                      S | j        r5t          t          t	          t          | j                                      S | j	        st          | t          t          f          r|                                 \  }}
D ]L\  }\  }}||k    r>t          ||          dk    r*	                     |          t          ||z            z  c S M|j        r)|t"          j        ur |          t          |          z  S n3	                     d| z            d	                     d| z            z  S 	                     |           S # t(          $ r9 j        s0j        r)                                                    |           cY S  w xY w)Nr      )r[   is_Addr   r   r:   r?   argsis_Mulr   r   rh   r   r   r   r   int
is_Integerr   Oner   r   r   r   r   )rK   rn   berr   bgeg_rebuildr(   mappingpowerss          r+   r   z)FracField._rebuild_expr.<locals>._rebuild   s   D))I -   -c4Hdi(@(@#A#ABBB -c4Hdi(@(@#A#ABBB 	-
4'4 A A 	-''))1%+ ; ;MC"bQw ;3q"::? ;&{{3//QrT::::< /AQUN /#8A;;A..QtV$$ -QtV,,,,~~d+++!    6+A !++--55d;;;;;	s   F ?GG)r(   rF   keys)rs   rK   r   r   r(   r   s     `@@@r+   _rebuild_exprzFracField._rebuild_expr   sw     7 77<<>> 7 7 7 7 7	 	 	 	 	 	 	 	8 x~~r-   c                 "   t          t          t          | j        | j                                      }	 |                     t          |          |          }|                     |          S # t          $ r t          d| d|          w xY w)Nz=expected an expression convertible to a rational function in r{   )
dictr:   rg   r'   r%   r   r   r   r   r~   )rs   rK   r   fracs       r+   r   zFracField.from_expr  s    tCdi8899::	(%%gdmmW==D >>$'''  	w 	w 	w*jnjnjnptptuvvv	ws   #A. . Bc                      t          |           S rv   r   rt   s    r+   	to_domainzFracField.to_domain  s    T"""r-   c                 F    ddl m}  || j        | j        | j                  S )Nr   rT   )rW   rU   r'   r(   r)   )rs   rU   s     r+   r   zFracField.to_ring  s.    ......xdk4:>>>r-   rv   )rY   
__module____qualname____doc__r   r]   rf   rw   ry   r|   r   r   r   r   r   r   r   __call__r   r   r   r   r2   r-   r+   r$   r$   h   s/       <<,/ $ $ $ $LD D D7 7 7  Q Q QD D D
! ! !( ( ( (* * * *
, , ,   #, #, #,J H! ! !F( ( (# # #? ? ? ? ?r-   r$   c                       e Zd ZdZd'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 Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d'd$Z&d'd%Z'd'd&Z(dS )(rV   z=Element of multivariate distributed rational function field. Nc                 l    || j         j        j        }n|st          d          || _        || _        d S )Nzzero denominator)r,   ra   re   ZeroDivisionErrorr   r   r   s      r+   __init__zFracElement.__init__!  sA     	8JO'EE 	8#$6777



r-   c                 .    |                      ||          S rv   )	__class__fr   r   s      r+   r   zFracElement.raw_new*  s    {{5%(((r-   c                 <     | j         |                    |           S rv   )r   r   r   s      r+   r   zFracElement.new,  s    qy%,,u--..r-   c                 D    | j         dk    rt          d          | j        S )Nr   zf.denom should be 1)r   r~   r   r   s    r+   r}   zFracElement.to_poly/  s&    7a< 	42333wr-   c                 4    | j                                         S rv   )r,   r   rt   s    r+   parentzFracElement.parent4  s    z##%%%r-   c                 *    | j         | j        | j        fS rv   )r,   r   r   rt   s    r+   rw   zFracElement.__getnewargs__7  s    
DJ
33r-   c                 h    | j         }|(t          | j        | j        | j        f          x| _         }|S rv   )r`   r_   r,   r   r   )rs   r`   s     r+   ry   zFracElement.__hash__<  s8    
 	L!%tz4:tz&J!K!KKDJr-   c                     |                      | j                                        | j                                                  S rv   )r   r   copyr   rt   s    r+   r   zFracElement.copyB  s.    ||DJOO--tz/@/@AAAr-   c                     | j         |k    r| S |j        }| j                            |          }| j                            |          }|                    ||          S rv   )r,   ra   r   r   r   r   )rs   	new_fieldnew_ringr   r   s        r+   	set_fieldzFracElement.set_fieldE  s[    :" 	/K ~HJ''11EJ''11E==...r-   c                 @     | j         j        |  | j        j        | z  S rv   )r   as_exprr   )rs   r'   s     r+   r   zFracElement.as_exprN  s&    !tz!7+,>DJ,>,HHHr-   c                     t          |t                    r0| j        |j        k    r | j        |j        k    o| j        |j        k    S | j        |k    o| j        | j        j        j        k    S rv   )rh   rV   r,   r   r   ra   re   r   gs     r+   r   zFracElement.__eq__Q  sb    a%% 	@!'QW*< 	@7ag%<!'QW*<<7a<?AGqw|/?$??r-   c                     | |k     S rv   r2   r   s     r+   r   zFracElement.__ne__W  s    6zr-   c                 *    t          | j                  S rv   )boolr   r   s    r+   __bool__zFracElement.__bool__Z  s    AG}}r-   c                 f    | j                                         | j                                        fS rv   )r   sort_keyr   rt   s    r+   r   zFracElement.sort_key]  s)    
##%%tz':':'<'<==r-   c                     t          || j        j                  r0 ||                                 |                                          S t          S rv   )rh   r,   rc   r   NotImplemented)f1f2ops      r+   _cmpzFracElement._cmp`  s@    b"(.)) 	"2bkkmmR[[]]333!!r-   c                 8    |                      |t                    S rv   )r   r   r   r   s     r+   __lt__zFracElement.__lt__f      wwr2r-   c                 8    |                      |t                    S rv   )r   r	   r   s     r+   __le__zFracElement.__le__h  r   r-   c                 8    |                      |t                    S rv   )r   r
   r   s     r+   __gt__zFracElement.__gt__j  r   r-   c                 8    |                      |t                    S rv   )r   r   r   s     r+   __ge__zFracElement.__ge__l  r   r-   c                 B    |                      | j        | j                  S z"Negate all coefficients in ``f``. r   r   r   r   s    r+   __pos__zFracElement.__pos__o  s    yy!'***r-   c                 D    |                      | j         | j                  S r   r   r   s    r+   __neg__zFracElement.__neg__s  s    yy!'17+++r-   c                 \   | j         j        }	 |                    |          }d|d fS # t          $ ry |j        sn|j        rg|                                }	 |                    |          }d|                    |          |                    |          fcY S # t          $ r Y nw xY wY dS w xY w)Nr   )r   NN)	r,   r(   r   r   r   r   r   r   r   )rs   r   r(   r   s       r+   _extract_groundzFracElement._extract_groundw  s    "	$nnW--G gt##  	! 	! 	!? Xv'= X%//11X*227;;G |11'::L<N<Nw<W<WWWWW &   D
 !==	!s3   ( ,B+B*+B+
B$!B+#B$$B+*B+c                    | j         }|s| S | s|S t          ||j                  rx| j        |j        k    r(|                     | j        |j        z   | j                  S |                     | j        |j        z  | j        |j        z  z   | j        |j        z            S t          ||j        j                  r+|                     | j        | j        |z  z   | j                  S t          |t                    rt          |j        t                    r|j        j         |j         k    rnt          |j         j        t                    r*|j         j        j         |k    r|
                    |           S t          S t          |t                    rEt          |j        t                    r|j        j        |j        k    rn|
                    |           S | 
                    |          S )z(Add rational functions ``f`` and ``g``. )r,   rh   rc   r   r   r   ra   rV   r(   r   __radd__r   r   r   r   r   r,   s      r+   __add__zFracElement.__add__  s    	)H 	)H5;'' 	)w!'! QuuQWqw.888uuQWQW_qwqw>PPP5:+,, 	)551719,ag666![)) )elM:: *u|?QUVU\?\ *>> *17>CW[`C` *::a==())A{++ )elN;; )@QUVU[@[ )::a==(zz!}}r-   c                    t          || j        j        j                  r+|                     | j        | j        |z  z   | j                  S |                     |          \  }}}|dk    r+|                     | j        | j        |z  z   | j                  S |st          S |                     | j        |z  | j        |z  z   | j        |z            S Nr   	rh   r,   ra   rc   r   r   r   r   r   r   cr   g_numerg_denoms        r+   r   zFracElement.__radd__  s    a+,, 	7551719,ag666 0033GW7 	M55177?2AG<<< 	M!!55177?:AGGOLLLr-   c                    | j         }|s| S | s| S t          ||j                  rx| j        |j        k    r(|                     | j        |j        z
  | j                  S |                     | j        |j        z  | j        |j        z  z
  | j        |j        z            S t          ||j        j                  r+|                     | j        | j        |z  z
  | j                  S t          |t                    rt          |j        t                    r|j        j         |j         k    rnt          |j         j        t                    r*|j         j        j         |k    r|
                    |           S t          S t          |t                    rEt          |j        t                    r|j        j        |j        k    rn|
                    |           S |                     |          \  }}}|dk    r+|                     | j        | j        |z  z
  | j                  S |st          S |                     | j        |z  | j        |z  z
  | j        |z            S )z-Subtract rational functions ``f`` and ``g``. r   )r,   rh   rc   r   r   r   ra   rV   r(   r   __rsub__r   r   r   r   r   r   r,   r   r  r  s         r+   __sub__zFracElement.__sub__  s%    	)H 	)2I5;'' 	)w!'! QuuQWqw.888uuQWQW_qwqw>PPP5:+,, 	)551719,ag666![)) )elM:: *u|?QUVU\?\ *>> *17>CW[`C` *::a==())A{++ )elN;; )@QUVU[@[ )::a==( 0033GW7 	M55177?2AG<<< 	M!!55177?:AGGOLLLr-   c                    t          || j        j        j                  r,|                     | j         | j        |z  z   | j                  S |                     |          \  }}}|dk    r,|                     | j         | j        |z  z   | j                  S |st          S |                     | j         |z  | j        |z  z   | j        |z            S r  r  r  s        r+   r  zFracElement.__rsub__  s    a+,, 	855!'AGAI-qw777 0033GW7 	N55!'AGGO3QW=== 	N!!55!'')AGGO;QWW_MMMr-   c                 2   | j         }| r|s|j        S t          ||j                  r0|                     | j        |j        z  | j        |j        z            S t          ||j        j                  r#|                     | j        |z  | j                  S t          |t                    rt          |j	        t                    r|j	        j         |j         k    rnt          |j         j	        t                    r*|j         j	        j         |k    r|                    |           S t          S t          |t                    rEt          |j	        t                    r|j	        j        |j        k    rn|                    |           S |                     |          S )z-Multiply rational functions ``f`` and ``g``. )r,   rd   rh   rc   r   r   r   ra   rV   r(   r   __rmul__r   r   r   r   s      r+   __mul__zFracElement.__mul__  sg    	) 	):5;'' 	)55!'!'/:::5:+,, 	)55AG,,,![)) )elM:: *u|?QUVU\?\ *>> *17>CW[`C` *::a==())A{++ )elN;; )@QUVU[@[ )::a==(zz!}}r-   c                 h   t          || j        j        j                  r#|                     | j        |z  | j                  S |                     |          \  }}}|dk    r#|                     | j        |z  | j                  S |st          S |                     | j        |z  | j        |z            S r  r  r  s        r+   r  zFracElement.__rmul__  s    a+,, 	-55AG,,, 0033GW7 	;55!'222 	;!!55!''/:::r-   c                    | j         }|st          t          ||j                  r0|                     | j        |j        z  | j        |j        z            S t          ||j        j                  r#|                     | j        | j        |z            S t          |t                    rt          |j	        t                    r|j	        j         |j         k    rnt          |j         j	        t                    r*|j         j	        j         |k    r|                    |           S t          S t          |t                    rEt          |j	        t                    r|j	        j        |j        k    rn|                    |           S |                     |          \  }}}|dk    r#|                     | j        | j        |z            S |st          S |                     | j        |z  | j        |z            S )z0Computes quotient of fractions ``f`` and ``g``. r   )r,   r   rh   rc   r   r   r   ra   rV   r(   r   __rtruediv__r   r   r   r   r	  s         r+   __truediv__zFracElement.__truediv__  s    	-##5;'' 	-55!'!'/:::5:+,, 	-55!'!),,,![)) -elM:: *u|?QUVU\?\ *>> *17>CW[`C` *>>!,,,))A{++ -elN;; -@QUVU[@[ ->>!,,, 0033GW7 	;55!''/222 	;!!55!''/:::r-   c                 z   | st           t          || j        j        j                  r#|                     | j        |z  | j                  S |                     |          \  }}}|dk    r#|                     | j        |z  | j                  S |st          S |                     | j        |z  | j        |z            S r  )
r   rh   r,   ra   rc   r   r   r   r   r   r  s        r+   r  zFracElement.__rtruediv__2  s     	-##17<-.. 	-55AG,,, 0033GW7 	;55!'222 	;!!55!''/:::r-   c                     |dk    r&|                      | j        |z  | j        |z            S | st          |                      | j        | z  | j        | z            S )z+Raise ``f`` to a non-negative power ``n``. r   )r   r   r   r   )r   ns     r+   __pow__zFracElement.__pow__A  s`    6 	799QWaZ!444 	7##99QWqb[!'A2+666r-   c                     |                                 }|                     | j                            |          | j        z  | j        | j                            |          z  z
  | j        dz            S )a  Computes partial derivative in ``x``.

        Examples
        ========

        >>> from sympy.polys.fields import field
        >>> from sympy.polys.domains import ZZ

        >>> _, x, y, z = field("x,y,z", ZZ)
        >>> ((x**2 + y)/(z + 1)).diff(x)
        2*x/(z + 1)

        r>   )r}   r   r   diffr   )r   xs     r+   r  zFracElement.diffJ  sW     IIKKuuQW\\!__QW,qwqw||A/FFQR
SSSr-   c                    dt          |          cxk     r| j        j        k    r=n n:|                     t	          t          | j        j        |                              S t          d| j        j        dt          |                    )Nr   z expected at least 1 and at most z values, got )rD   r,   rX   evaluater:   rg   r%   r~   )r   r;   s     r+   r   zFracElement.__call__[  s    s6{{ 	q 	q 	q 	qagm 	q 	q 	q 	q 	q::d3qw|V#<#<==>>>*TUT[TaTaTacfgmcncncnopppr-   c                    t          |t                    rC|Ad |D             }| j                            |          | j                            |          }}nJ|                                }| j                            ||          | j                            ||          }}|j                                        }|                    ||          S )Nc                 @    g | ]\  }}|                                 |fS r2   r}   r4   Xas      r+   r6   z(FracElement.evaluate.<locals>.<listcomp>c  )    222tq!199;;"222r-   )	rh   r:   r   r  r   r}   ra   r   r   )r   r  r!  r   r   r,   s         r+   r  zFracElement.evaluatea  s    a 	J1 	J22q222A7++A..0@0@0C0C5EE		A7++Aq11173C3CAq3I3I5E
##%%yy&&&r-   c                 r   t          |t                    rC|Ad |D             }| j                            |          | j                            |          }}nJ|                                }| j                            ||          | j                            ||          }}|                     ||          S )Nc                 @    g | ]\  }}|                                 |fS r2   r  r  s      r+   r6   z$FracElement.subs.<locals>.<listcomp>n  r"  r-   )rh   r:   r   subsr   r}   r   )r   r  r!  r   r   s        r+   r%  zFracElement.subsl  s    a 	B1 	B22q222A7<<??AGLLOO5EE		A7<<1--qw||Aq/A/A5EuuUE"""r-   c                     t           rv   )r   )r   r  r!  s      r+   composezFracElement.composev  s    !!r-   rv   ))rY   r   r   r   r   r   r   r}   r   rw   r`   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r  r  r  r  r   r  r%  r'  r2   r-   r+   rV   rV     sk       GG   ) ) )/ / /  
& & &4 4 4 E  B B B/ / /I I I@ @ @    > > >" " "        + + +, , ,$ $ $(  >M M M$M $M $MLN N N  4; ; ;; ; ;B; ; ;7 7 7T T T"q q q	' 	' 	' 	'# # # #" " " " " "r-   rV   N)>r   typingr   r   tDict	functoolsr   operatorr   r   r   r	   r
   r   sympy.core.exprr   sympy.core.modr   sympy.core.numbersr   sympy.core.singletonr   sympy.core.symbolr   sympy.core.sympifyr   r   &sympy.functions.elementary.exponentialr   !sympy.polys.domains.domainelementr   !sympy.polys.domains.fractionfieldr   "sympy.polys.domains.polynomialringr   sympy.polys.constructorr   sympy.polys.orderingsr   sympy.polys.polyerrorsr   sympy.polys.polyoptionsr   sympy.polys.polyutilsr   rW   r   sympy.printing.defaultsr   sympy.utilitiesr   sympy.utilities.iterablesr    sympy.utilities.magicr!   r,   r/   r7   rQ   rZ   r$   rV   r2   r-   r+   <module>r?     s   ' ' & % % % % % % %       - - - - - - - - - - - - - - - -                   # # # # # # " " " " " " $ $ $ $ $ $ 3 3 3 3 3 3 3 3 : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; = = = = = = 4 4 4 4 4 4 % % % % % % 1 1 1 1 1 1 1 1 1 1 1 1 : : : : : : ) ) ) ) ) ) 3 3 3 3 3 3 " " " " " " 1 1 1 1 1 1 ) ) ) ) ) )!$ # # # #
 "% ! ! ! !
 "%     2 2 2h t? t? t? t? t? t? t? t?lY" Y" Y" Y" Y"-+ Y" Y" Y" Y" Y"r-   