
    XhS                       d Z ddl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&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 e4e&fd            Z9e4e&fd            Z:e4e&fd            Z;e4d             Z< G d de2          Z= G d  d!ee2e          Z>d"S )#z!Sparse rational function fields.     )annotations)reduce)addmulltlegtge)Expr)Mod)Exp1)S)Symbol)CantSympifysympify)ExpBase)Domain)DomainElementFractionField)PolynomialRing)construct_domain)lexMonomialOrder)CoercionFailed)build_options)_parallel_dict_from_expr)PolyRing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       d/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/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-   xfieldr1   $   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-   vfieldr9   *   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 r4   )listvalues)r6   reps     r-   r8   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-   sfieldrS   1   sc   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U dZded<   ded<   ded<   ded	<   d
ed<   ded<   efdZ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. r   ringztuple[FracElement, ...]r'   ztuple[Expr, ...]r)   intngensr   r*   r   r+   c                   t          |||          }|j        }|j        }|j        }|j        }| j        ||||f}t                              |           }||_        t          |          |_
        ||_        ||_        ||_        ||_        ||_        t          ||j                  j        |_        |                    |j                  |_        |                    |j                  |_        |                                |_        t'          |j        |j                  D ]B\  }}	t)          |t*                    r(|j        }
t/          ||
          st1          ||
|	           C|S N)r   r)   rW   r*   r+   __name__object__new___hash_tuplehash_hashrU   FracElementzeroraw_newdtypeone_gensr'   zip
isinstancer   r5   hasattrsetattr)clsr)   r*   r+   rU   rW   r]   objsymbol	generatorr5   s              r-   r\   zFracField.__new__q   s?   //,

|WeVUCnnS!!%%%		
	TY//7	99TY''))DH%%99;;!$S[#(!;!; 	2 	2FI&&)) 2{sD)) 2Cy111
r/   c                N     t           fd j        j        D                       S )z(Return a list of polynomial generators. c                :    g | ]}                     |          S r4   rc   )r6   genselfs     r-   r8   z#FracField._gens.<locals>.<listcomp>   s#    BBB3tzz#BBBr/   )rH   rU   r'   rr   s   `r-   re   zFracField._gens   s*    BBBB$).BBBCCCr/   c                *    | j         | j        | j        fS rY   )r)   r*   r+   rs   s    r-   __getnewargs__zFracField.__getnewargs__   s    dk4:66r/   c                    | j         S rY   )r_   rs   s    r-   __hash__zFracField.__hash__   s
    zr/   c                    |                      |          r,| j                            |                                          S t	          d| j        d|d          )Nzexpected a , got z instead)
is_elementrU   indexto_poly
ValueErrorrc   )rr   rq   s     r-   r{   zFracField.index   sR    ??3 	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 rY   )rg   r&   r)   rW   r*   r+   rr   others     r-   __eq__zFracField.__eq__   sI    %++ D\4:t{DJ?]EKu{CD	Dr/   c                    | |k     S rY   r4   r   s     r-   __ne__zFracField.__ne__   s    5=  r/   c                B    t          |t                    o
|j        | k    S )zBTrue if ``element`` is an element of this field. False otherwise. )rg   r`   r.   rr   elements     r-   rz   zFracField.is_element   s    ';//IGMT4IIr/   Nc                .    |                      ||          S rY   rp   rr   numerdenoms      r-   rb   zFracField.raw_new   s    zz%'''r/   c                z    || j         j        }|                    |          \  }}|                     ||          S rY   )rU   rd   cancelrb   r   s      r-   newzFracField.new   s8    =$)-%||E**u||E5)))r/   c                6    | j                             |          S rY   )r*   convertr   s     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rY   )r   rU   
ground_newr   r*   is_Fieldhas_assoc_Field	get_fieldr   r   r   rb   )rr   r   r*   rU   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)rg   r`   r.   r*   r   r   r   rU   to_fieldNotImplementedErrorr   clear_denomsto_ringset_ringrb   rH   rF   r<   rA   ring_newr   strr   	from_expr)rr   r   r   r   s       r-   	field_newzFracField.field_new   sE   g{++ "	,w}$$$+}55 8!W]22w///DK88 8 ))++w}<<w///),777-- 	,"//11LE5$+~66 2
dk...	,,U33DK77 2
dk/779999	,,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 rY   )is_Powrg   r   as_base_exp)r6   rq   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      )getis_Addr   r   r<   rA   argsis_Mulr   r   rg   r   r   r   r   rV   
is_Integerr   Oner   r   r   r   r   )rM   rm   berq   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Qww3q"::??&{{3//QrT::::< /AQUNN#8A;;A..QtV$$0QtV,,,,~~d+++!    6+A !++--55d;;;;;	s   F ?GG)r*   rH   keys)rr   rM   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 ry   )
dictr<   rf   r)   r'   r   r   r   r   r}   )rr   rM   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 rY   r   rs   s    r-   	to_domainzFracField.to_domain  s    T"""r/   c                B    t          | j        | j        | j                  S rY   )r   r)   r*   r+   rs   s    r-   r   zFracField.to_ring!  s    dk4:>>>r/   rY   )rZ   
__module____qualname____doc____annotations__r   r\   re   ru   rw   r{   r   r   rz   rb   r   r   r   r   __call__r   r   r   r   r4   r/   r-   r&   r&   g   s        <<NNN!!!!JJJNNN,/        DD D D7 7 7  Q Q QD D D
! ! !J J J( ( ( (* * * *
, , ,   #, #, #,J H! ! !F( ( (# # #? ? ? ? ?r/   r&   c                      e Zd ZdZd'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'd$Z&d'd%Z'd'd&Z(dS )(r`   z=Element of multivariate distributed rational function field. Nc                p    ||j         j        }n|st          d          || _        || _        || _        d S )Nzzero denominator)rU   rd   ZeroDivisionErrorr.   r   r   )rr   r.   r   r   s       r-   __init__zFracElement.__init__'  sB    =JNEE 	8#$6777




r/   c                :    |                      | j        ||          S rY   )	__class__r.   fr   r   s      r-   rb   zFracElement.raw_new1  s    {{17E5111r/   c                <     | j         |                    |           S rY   )rb   r   r   s      r-   r   zFracElement.new4  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_poly7  s#    7a<<2333wr/   c                4    | j                                         S rY   )r.   r   rs   s    r-   parentzFracElement.parent<  s    z##%%%r/   c                *    | j         | j        | j        fS rY   )r.   r   r   rs   s    r-   ru   zFracElement.__getnewargs__?  s    
DJ
33r/   c                h    | j         }|(t          | j        | j        | j        f          x| _         }|S rY   )r_   r^   r.   r   r   )rr   r_   s     r-   rw   zFracElement.__hash__D  s4    
=!%tz4:tz&J!K!KKDJr/   c                    |                      | j                                        | j                                                  S rY   )rb   r   copyr   rs   s    r-   r   zFracElement.copyJ  s.    ||DJOO--tz/@/@AAAr/   c                    | j         |k    r| S |j        }| j                            |          }| j                            |          }|                    ||          S rY   )r.   rU   r   r   r   r   )rr   	new_fieldnew_ringr   r   s        r-   	set_fieldzFracElement.set_fieldM  sY    :""K ~HJ''11EJ''11E==...r/   c                @     | j         j        |  | j        j        | z  S rY   )r   as_exprr   )rr   r)   s     r-   r   zFracElement.as_exprV  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 rY   )rg   r`   r.   r   r   rU   rd   r   gs     r-   r   zFracElement.__eq__Y  s_    a%% 	@!'QW*<*<7ag%<!'QW*<<7a<?AGqw|/?$??r/   c                    | |k     S rY   r4   r   s     r-   r   zFracElement.__ne___  s    6zr/   c                *    t          | j                  S rY   )boolr   r   s    r-   __bool__zFracElement.__bool__b  s    AG}}r/   c                f    | j                                         | j                                        fS rY   )r   sort_keyr   rs   s    r-   r   zFracElement.sort_keye  s)    
##%%tz':':'<'<==r/   c                    | j                             |          r0 ||                                 |                                          S t          S rY   )r.   rz   r   NotImplemented)f1f2ops      r-   _cmpzFracElement._cmph  sB    8r"" 	"2bkkmmR[[]]333!!r/   c                8    |                      |t                    S rY   )r   r   r   r   s     r-   __lt__zFracElement.__lt__n      wwr2r/   c                8    |                      |t                    S rY   )r   r   r   s     r-   __le__zFracElement.__le__p  r   r/   c                8    |                      |t                    S rY   )r   r	   r   s     r-   __gt__zFracElement.__gt__r  r   r/   c                8    |                      |t                    S rY   )r   r
   r   s     r-   __ge__zFracElement.__ge__t  r   r/   c                B    |                      | j        | j                  S z"Negate all coefficients in ``f``. rb   r   r   r   s    r-   __pos__zFracElement.__pos__w  s    yy!'***r/   c                D    |                      | j         | j                  S r   r   r   s    r-   __neg__zFracElement.__neg__{  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   )rr   r   r*   r   s       r-   _extract_groundzFracElement._extract_ground  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 |                    |          rx| j        |j        k    r(|                     | j        |j        z   | j                  S |                     | j        |j        z  | j        |j        z  z   | j        |j        z            S |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.   rz   r   r   r   rU   rg   r`   r*   r   __radd__r   r   r   r   r   r.   s      r-   __add__zFracElement.__add__  s    	)H 	)Ha   	)w!'!!uuQWqw.888uuQWQW_qwqw>PPPZ""1%% 	)551719,ag666![)) )elM:: *u|?QUVU\?\?\>> *17>CW[`C`C`::a==())A{++ )elN;; )@QUVU[@[@[::a==(zz!}}r/   c                   | 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   r.   rU   rz   r   r   r   r   r   r   cr   g_numerg_denoms        r-   r   zFracElement.__radd__  s    7<""1%% 	7551719,ag666 0033GW7755177?2AG<<< 	M!!55177?:AGGOLLLr/   c                   | j         }|s| S | s| S |                    |          rx| j        |j        k    r(|                     | j        |j        z
  | j                  S |                     | j        |j        z  | j        |j        z  z
  | j        |j        z            S |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.   rz   r   r   r   rU   rg   r`   r*   r   __rsub__r   r   r   r   r   r   r.   r   r  r  s         r-   __sub__zFracElement.__sub__  s    	)H 	)2Ia   	)w!'!!uuQWqw.888uuQWQW_qwqw>PPPZ""1%% 	)551719,ag666![)) )elM:: *u|?QUVU\?\?\>> *17>CW[`C`C`::a==())A{++ )elN;; )@QUVU[@[@[::a==( 0033GW7755177?2AG<<< 	M!!55177?:AGGOLLLr/   c                   | 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    7<""1%% 	855!'AGAI-qw777 0033GW7755!'AGGO3QW=== 	N!!55!'')AGGO;QWW_MMMr/   c                2   | j         }| r|s|j        S |                    |          r0|                     | j        |j        z  | j        |j        z            S |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.   ra   rz   r   r   r   rU   rg   r`   r*   r   __rmul__r   r   r   r   s      r-   __mul__zFracElement.__mul__  sd    	) 	):a   	)55!'!'/:::Z""1%% 	)55AG,,,![)) )elM:: *u|?QUVU\?\?\>> *17>CW[`C`C`::a==())A{++ )elN;; )@QUVU[@[@[::a==(zz!}}r/   c                h   | 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    7<""1%% 	-55AG,,, 0033GW7755!'222 	;!!55!''/:::r/   c                   | j         }|st          |                    |          r0|                     | j        |j        z  | j        |j        z            S |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   rz   r   r   r   rU   rg   r`   r*   r   __rtruediv__r   r   r   r   r
  s         r-   __truediv__zFracElement.__truediv__  s    	-##a   	-55!'!'/:::Z""1%% 	-55!'!),,,![)) -elM:: *u|?QUVU\?\?\>> *17>CW[`C`C`>>!,,,))A{++ -elN;; -@QUVU[@[@[>>!,,, 0033GW7755!''/222 	;!!55!''/:::r/   c                z   | st           | 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.   rU   rz   r   r   r   r   r   r  s        r-   r  zFracElement.__rtruediv__:  s     	-##W\$$Q'' 	-55AG,,, 0033GW77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   )rb   r   r   r   )r   ns     r-   __pow__zFracElement.__pow__I  s]    66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.diffR  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 )rF   r.   rW   evaluater<   rf   r'   r}   )r   r=   s     r-   r   zFracElement.__call__c  s    s6{{++++agm+++++::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 r4   r|   r6   Xas      r-   r8   z(FracElement.evaluate.<locals>.<listcomp>k  )    222tq!199;;"222r/   )	rg   r<   r   r  r   r|   rU   r   r   )r   r  r"  r   r   r.   s         r-   r  zFracElement.evaluatei  s    a 	J19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 r4   r  r   s      r-   r8   z$FracElement.subs.<locals>.<listcomp>v  r#  r/   )rg   r<   r   subsr   r|   r   )r   r  r"  r   r   s        r-   r&  zFracElement.subst  s    a 	B1922q222A7<<??AGLLOO5EE		A7<<1--qw||Aq/A/A5EuuUE"""r/   c                    t           rY   )r   )r   r  r"  s      r-   composezFracElement.compose~  s    !!r/   rY   ))rZ   r   r   r   r   rb   r   r|   r   ru   r_   rw   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(  r4   r/   r-   r`   r`   $  sp       GG   2 2 2 2/ / /  
& & &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/   r`   N)?r   
__future__r   	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.domainr   !sympy.polys.domains.domainelementr   !sympy.polys.domains.fractionfieldr   "sympy.polys.domains.polynomialringr   sympy.polys.constructorr   sympy.polys.orderingsr   r   sympy.polys.polyerrorsr   sympy.polys.polyoptionsr   sympy.polys.polyutilsr   sympy.polys.ringsr   r   sympy.printing.defaultsr    sympy.utilitiesr!   sympy.utilities.iterablesr"   sympy.utilities.magicr#   r.   r1   r9   rS   r&   r`   r4   r/   r-   <module>rA     s   ' ' " " " " " "       - - - - - - - - - - - - - - - -                   # # # # # # " " " " " " $ $ $ $ $ $ 3 3 3 3 3 3 3 3 : : : : : : - - - - - - ; ; ; ; ; ; ; ; ; ; ; ; = = = = = = 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 1 1 1 1 1 1 1 1 1 1 : : : : : : 3 3 3 3 3 3 3 3 3 3 3 3 3 3 " " " " " " 1 1 1 1 1 1 ) ) ) ) ) )!$ # # # #
 "% ! ! ! !
 "%     2 2 2j{? {? {? {? {? {? {? {?z[" [" [" [" ["-+ [" [" [" [" ["r/   