
    \hS                       S r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
Jr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-  SSK.J/r/J0r0  SSK1J2r2  SSK3J4r4  SSK5J6r6  SSK7J8r8  \4\&4S j5       r9\4\&4S j5       r:\4\&4S j5       r;\4S 5       r< " S S\25      r= " S  S!\\2\5      r>g")#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                :    [        XU5      nU4UR                  -   $ )zFConstruct new rational function field returning (field, x1, ..., xn). 	FracFieldgenssymbolsdomainorder_fields       J/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/fields.pyfieldr.      s!     w.F9v{{""    c                4    [        XU5      nX3R                  4$ )zHConstruct new rational function field returning (field, (x1, ..., xn)). r%   r(   s       r-   xfieldr1   $   s     w.FKK  r/   c                    [        XU5      n[        UR                   Vs/ s H  oDR                  PM     snUR                  5        U$ s  snf )zSConstruct new rational function field and inject generators into global namespace. )r&   r#   r)   namer'   )r)   r*   r+   r,   syms        r-   vfieldr5   *   s=     w.F&..2.3hh.2FKK@M 3s   A	c                   Sn[        U 5      (       d  U /Sp0[        [        [        U 5      5      n [	        X5      n/ nU  H"  nUR                  UR                  5       5        M$     [        XT5      u  ptUR                  cE  [        U Vs/ s H  n[        UR                  5       5      PM     sn/ 5      n	[        XS9u  Ul        n
[        UR                  UR                  UR                  5      n/ n[        S[!        U5      S5       H(  nUR#                  U" [%        X}US-    5      5      5        M*     U(       a  XS   4$ X4$ s  snf )ak  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)
FT)optr      )r"   listmapr   r   extendas_numer_denomr   r*   sumvaluesr   r&   r'   r+   rangelenappendtuple)exprsr)   optionssingler7   numdensexprrepsrepcoeffs_r,   fracsis                 r-   sfieldrN   1   s   4 FuvWe$%E

)CGt**,- (6ID
zz D9DSd3::<(D92>(9
AsxxSYY7FE1c$i#VE$1+./0 $ a!! :s   #Ec                      \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   \4S jrS rS r	S r
S rS rS rS rS"S jrS"S jrS rS rS r\rS rS rS rS  rS!rg)#r&   g   z2Multivariate distributed rational function field. r   ringztuple[FracElement, ...]r'   ztuple[Expr, ...]r)   intngensr   r*   r   r+   c                   [        XU5      nUR                  nUR                  nUR                  nUR                  nU R
                  XX#4n[        R                  U 5      nXgl        [        U5      Ul
        XGl        Xl        XWl        X'l        X7l        [        XtR                  5      R                  Ul        UR                  UR                  5      Ul        UR                  UR                   5      Ul        UR#                  5       Ul        ['        UR                  UR$                  5       HF  u  p[)        U[*        5      (       d  M  UR,                  n
[/        Xz5      (       a  M:  [1        XzU	5        MH     U$ N)r   r)   rS   r*   r+   __name__object__new___hash_tuplehash_hashrQ   FracElementzeroraw_newdtypeone_gensr'   zip
isinstancer   r3   hasattrsetattr)clsr)   r*   r+   rQ   rS   rY   objsymbol	generatorr3   s              r-   rX   FracField.__new__q   s   /,,



||WVCnnS!%%		
	YY/77	99TYY'))DHH%99;!$S[[#((!;F&&)){{s))Cy1 "< 
r/   c                    [        U R                  R                   Vs/ s H  oR                  U5      PM     sn5      $ s  snf )z(Return a list of polynomial generators. )rB   rQ   r'   r_   selfgens     r-   ra   FracField._gens   s-    $))..B.3zz#.BCCBs   ?c                H    U R                   U R                  U R                  4$ rU   )r)   r*   r+   rm   s    r-   __getnewargs__FracField.__getnewargs__   s    dkk4::66r/   c                    U R                   $ rU   )r[   rq   s    r-   __hash__FracField.__hash__   s    zzr/   c                    U R                  U5      (       a)  U R                  R                  UR                  5       5      $ [	        SU R
                  < SU< S35      e)Nzexpected a , got z instead)
is_elementrQ   indexto_poly
ValueErrorr_   rl   s     r-   rz   FracField.index   s>    ??399??3;;=11

3OPPr/   c                    [        U[        5      =(       a]    U R                  U R                  U R                  U R
                  4UR                  UR                  UR                  UR
                  4:H  $ rU   )rc   r&   r)   rS   r*   r+   rm   others     r-   __eq__FracField.__eq__   sV    %+ D\\4::t{{DJJ?]]EKKu{{CD	Dr/   c                    X:X  + $ rU    r   s     r-   __ne__FracField.__ne__   s      r/   c                N    [        U[        5      =(       a    UR                  U :H  $ )zBTrue if ``element`` is an element of this field. False otherwise. )rc   r\   r.   rm   elements     r-   ry   FracField.is_element   s    ';/IGMMT4IIr/   Nc                $    U R                  X5      $ rU   )r_   rm   numerdenoms      r-   r^   FracField.raw_new   s    zz%''r/   c                |    Uc  U R                   R                  nUR                  U5      u  pU R                  X5      $ rU   )rQ   r`   cancelr^   r   s      r-   newFracField.new   s2    =$))--%||E*||E))r/   c                8    U R                   R                  U5      $ rU   )r*   convertr   s     r-   
domain_newFracField.domain_new   s    {{""7++r/   c                    U R                  U R                  R                  U5      5      $ ! [         a    U R                  nUR
                  (       d  UR                  (       a  U R                  nUR                  5       nUR                  U5      nUR                  UR                  U5      5      nUR                  UR                  U5      5      nU R                  XV5      s $ e f = frU   )r   rQ   
ground_newr   r*   is_Fieldhas_assoc_Field	get_fieldr   r   r   r^   )rm   r   r*   rQ   ground_fieldr   r   s          r-   r   FracField.ground_new   s    	88DII009:: 	[[F??v'='=yy%//1&..w7(:(:7(CD(:(:7(CD||E11	s   ), B6C&$C&c                   [        U[        5      (       a  XR                  :X  a  U$ [        U R                  [        5      (       a5  U R                  R                  UR                  :X  a  U R                  U5      $ [        U R                  [        5      (       aC  U R                  R                  R                  5       UR                  :X  a  U R                  U5      $ [        S5      e[        U[        5      (       Ga%  UR                  5       u  p#[        U R                  [        5      (       a@  UR                  U R                  R                  :X  a  U R                  R                  U5      nO[        U R                  [        5      (       aN  UR                  U R                  R                  R                  5       :X  a  U R                  R                  U5      nOUR                  U R                  5      nU R                  R                  U5      nU R                  X25      $ [        U[        5      (       aK  [!        U5      S:X  a<  [#        [%        U R                  R&                  U5      5      u  p2U R)                  X25      $ [        U[*        5      (       a  [        S5      e[        U[,        5      (       a  U R/                  U5      $ U R                  U5      $ )N
conversionr8   parsing)rc   r\   r.   r*   r   r   r   rQ   to_fieldNotImplementedErrorr   clear_denomsto_ringset_ringr^   rB   r@   r9   r:   ring_newr   strr   	from_expr)rm   r   r   r   s       r-   	field_newFracField.field_new   s   g{++}}$$++}55!!W]]2w//DKK88  ))+w}}<w//),77--"//1LE$++~66

dkk...		,,U3DKK77

dkk//7799		,,U3tyy1II((/E<<--''CLA,=DII$6$6 @ALE88E))%%%i00&&>>'**??7++r/   c                   ^^^^ U R                   m[        S TR                  5        5       5      mUUUU4S jmT" U5      $ )Nc              3     #    U  H>  nUR                   (       d  [        U[        5      (       d  M+  XR                  5       4v   M@     g 7frU   )is_Powrc   r   as_base_exp).0rn   s     r-   	<genexpr>*FracField._rebuild_expr.<locals>.<genexpr>   s1      7>CzzZW5 0__./>s
   *AAc           	       > T	R                  U 5      nUb  U$ U R                  (       a-  [        [        [	        [        TU R                  5      5      5      $ U R                  (       a-  [        [        [	        [        TU R                  5      5      5      $ U R                  (       d  [        U [        [        45      (       a  U R                  5       u  p#T
 H?  u  nu  pVXR:X  d  M  [        X65      S:X  d  M   T	R                  U5      [        X6-  5      -  s  $    UR                   (       a'  U["        R$                  La  T" U5      [        U5      -  $ O,T	R                  SU -  5      b  ST	R                  SU -  5      -  $  TR'                  U 5      $ ! [(         aE    TR*                  (       d2  TR,                  (       a!  TR/                  5       R'                  U 5      s $ e f = f)Nr      )getis_Addr   r   r9   r:   argsis_Mulr   r   rc   r   r   r   r   rR   
is_Integerr   Oner   r   r   r   r   )rG   ri   bern   bgeg_rebuildr*   mappingpowerss          r-   r   )FracField._rebuild_expr.<locals>._rebuild   sf   D)I$  c4Hdii(@#ABBc4Hdii(@#ABB
4'4 A A'')%+MC"w3q:?&{{3/QT:: &, <<AQUUN#A;A..QtV$0QtV,,,~~d++! 6+A+A!++-55d;;	s   =F AGG)r*   rB   keys)rm   rG   r   r   r*   r   s     `@@@r-   _rebuild_exprFracField._rebuild_expr   s>     77<<> 7 7	 	8 ~r/   c                   [        [        [        U R                  U R                  5      5      5      n U R                  [        U5      U5      nU R                  U5      $ ! [         a    [        SU < SU< 35      ef = f)Nz=expected an expression convertible to a rational function in rx   )
dictr9   rb   r)   r'   r   r   r   r   r|   )rm   rG   r   fracs       r-   r   FracField.from_expr  sq    tCdii89:	(%%gdmW=D >>$''  	wjnptuvv	ws   A   A>c                    [        U 5      $ rU   r   rq   s    r-   	to_domainFracField.to_domain  s    T""r/   c                X    [        U R                  U R                  U R                  5      $ rU   )r   r)   r*   r+   rq   s    r-   r   FracField.to_ring!  s    dkk4::>>r/   r   rU   )rV   
__module____qualname____firstlineno____doc____annotations__r   rX   ra   rr   ru   rz   r   r   ry   r^   r   r   r   r   __call__r   r   r   r   __static_attributes__r   r/   r-   r&   r&   g   s    <
N
!!JN,/  DD7QD
!J(*
, #,J H!F(#?r/   r&   c                     \ rS rSrSrS)S jrS)S jrS rS rS r	S	 r
SrS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S)S% jr'S)S& jr(S)S' jr)S(r*g)*r\   i$  z=Element of multivariate distributed rational function field. Nc                    Uc  UR                   R                  nOU(       d  [        S5      eXl        X l        X0l        g )Nzzero denominator)rQ   r`   ZeroDivisionErrorr.   r   r   )rm   r.   r   r   s       r-   __init__FracElement.__init__'  s2    =JJNNE#$677


r/   c                :    U R                  U R                  X5      $ rU   )	__class__r.   fr   r   s      r-   r^   FracElement.raw_new1  s    {{177E11r/   c                >    U R                   " UR                  U5      6 $ rU   )r^   r   r   s      r-   r   FracElement.new4  s    yy%,,u-..r/   c                P    U R                   S:w  a  [        S5      eU R                  $ )Nr   zf.denom should be 1)r   r|   r   r   s    r-   r{   FracElement.to_poly7  s"    77a<233wwr/   c                6    U R                   R                  5       $ rU   )r.   r   rq   s    r-   parentFracElement.parent<  s    zz##%%r/   c                H    U R                   U R                  U R                  4$ rU   )r.   r   r   rq   s    r-   rr   FracElement.__getnewargs__?  s    

DJJ

33r/   c                    U R                   nUc3  [        U R                  U R                  U R                  45      =U l         nU$ rU   )r[   rZ   r.   r   r   )rm   r[   s     r-   ru   FracElement.__hash__D  s9    

=!%tzz4::tzz&J!KKDJr/   c                    U R                  U R                  R                  5       U R                  R                  5       5      $ rU   )r^   r   copyr   rq   s    r-   r   FracElement.copyJ  s)    ||DJJOO-tzz/@AAr/   c                    U R                   U:X  a  U $ UR                  nU R                  R                  U5      nU R                  R                  U5      nUR                  X45      $ rU   )r.   rQ   r   r   r   r   )rm   	new_fieldnew_ringr   r   s        r-   	set_fieldFracElement.set_fieldM  sS    ::"K ~~HJJ''1EJJ''1E==..r/   c                h    U R                   R                  " U6 U R                  R                  " U6 -  $ rU   )r   as_exprr   )rm   r)   s     r-   r   FracElement.as_exprV  s+    zz!!7+DJJ,>,>,HHHr/   c                X   [        U[        5      (       aS  U R                  UR                  :X  a9  U R                  UR                  :H  =(       a    U R                  UR                  :H  $ U R                  U:H  =(       a-    U R                  U R                  R
                  R                  :H  $ rU   )rc   r\   r.   r   r   rQ   r`   r   gs     r-   r   FracElement.__eq__Y  sm    a%%!''QWW*<77agg%<!''QWW*<<77a<?AGGqww||/?/?$??r/   c                    X:X  + $ rU   r   r   s     r-   r   FracElement.__ne___  s
    zr/   c                ,    [        U R                  5      $ rU   )boolr   r   s    r-   __bool__FracElement.__bool__b  s    AGG}r/   c                j    U R                   R                  5       U R                  R                  5       4$ rU   )r   sort_keyr   rq   s    r-   r  FracElement.sort_keye  s'    

##%tzz':':'<==r/   c                    U R                   R                  U5      (       a%  U" U R                  5       UR                  5       5      $ [        $ rU   )r.   ry   r  NotImplemented)f1f2ops      r-   _cmpFracElement._cmph  s6    88r""bkkmR[[]33!!r/   c                .    U R                  U[        5      $ rU   )r	  r   r  r  s     r-   __lt__FracElement.__lt__n      wwr2r/   c                .    U R                  U[        5      $ rU   )r	  r   r  s     r-   __le__FracElement.__le__p  r  r/   c                .    U R                  U[        5      $ rU   )r	  r	   r  s     r-   __gt__FracElement.__gt__r  r  r/   c                .    U R                  U[        5      $ rU   )r	  r
   r  s     r-   __ge__FracElement.__ge__t  r  r/   c                N    U R                  U R                  U R                  5      $ z"Negate all coefficients in ``f``. r^   r   r   r   s    r-   __pos__FracElement.__pos__w  s    yy!''**r/   c                P    U R                  U R                  * U R                  5      $ r  r  r   s    r-   __neg__FracElement.__neg__{  s    yy!''177++r/   c                n   U R                   R                  n UR                  U5      nSUS 4$ ! [         a|    UR                  (       dh  UR
                  (       aW  UR                  5       n UR                  U5      nSUR                  U5      UR                  U5      4s $ ! [         a     Of = f gf = f)Nr   )r   NN)	r.   r*   r   r   r   r   r   r   r   )rm   r   r*   r   s       r-   _extract_groundFracElement._extract_ground  s    ""	$nnW-G gt##  	!??v'='=%//1X*227;G |11':L<N<Nw<WWW & 
 !	!s3   . <B4+B!<#B4!
B.+B4-B..B43B4c                   U R                   nU(       d  U $ U (       d  U$ UR                  U5      (       a  U R                  UR                  :X  a3  U R                  U R                  UR                  -   U R                  5      $ U R                  U R                  UR                  -  U R                  UR                  -  -   U R                  UR                  -  5      $ UR
                  R                  U5      (       a6  U R                  U R                  U R                  U-  -   U R                  5      $ [        U[        5      (       a  [        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  O[        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $ [        U[        5      (       aU  [        UR                  [        5      (       a%  UR                  R
                  UR
                  :X  a  OUR                  U 5      $ U R                  U5      $ )z(Add rational functions ``f`` and ``g``. )r.   ry   r   r   r   rQ   rc   r\   r*   r   __radd__r  r   r   r   r   r.   s      r-   __add__FracElement.__add__  s   HHa  ww!''!uuQWWqww.88uuQWWQWW_qwwqww>PPZZ""1%%5517719,agg66![))ellM::u||?Q?QUVU\U\?\>>177>>CWCW[`C`::a=())A{++ellN;;@Q@QUVU[U[@[::a=(zz!}r/   c                   U R                   R                  R                  U5      (       a6  U R                  U R                  U R
                  U-  -   U R
                  5      $ U R                  U5      u  p#nUS:X  a6  U R                  U R                  U R
                  U-  -   U R
                  5      $ U(       d  [        $ U R                  U R                  U-  U R
                  U-  -   U R
                  U-  5      $ Nr   r.   rQ   ry   r   r   r   r#  r  r   cr  g_numerg_denoms        r-   r&  FracElement.__radd__  s    77<<""1%%5517719,agg66 003W7551777?2AGG<<!!551777?:AGGGOLLr/   c                   U R                   nU(       d  U $ U (       d  U* $ UR                  U5      (       a  U R                  UR                  :X  a3  U R                  U R                  UR                  -
  U R                  5      $ U R                  U R                  UR                  -  U R                  UR                  -  -
  U R                  UR                  -  5      $ UR
                  R                  U5      (       a6  U R                  U R                  U R                  U-  -
  U R                  5      $ [        U[        5      (       a  [        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  O[        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $ [        U[        5      (       aU  [        UR                  [        5      (       a%  UR                  R
                  UR
                  :X  a  OUR                  U 5      $ U R                  U5      u  p4nUS:X  a6  U R                  U R                  U R                  U-  -
  U R                  5      $ U(       d  [        $ U R                  U R                  U-  U R                  U-  -
  U R                  U-  5      $ )z-Subtract rational functions ``f`` and ``g``. r   )r.   ry   r   r   r   rQ   rc   r\   r*   r   __rsub__r  r   r   r#  r   r   r.   r  r/  r0  s         r-   __sub__FracElement.__sub__  s   H2Ia  ww!''!uuQWWqww.88uuQWWQWW_qwwqww>PPZZ""1%%5517719,agg66![))ellM::u||?Q?QUVU\U\?\>>177>>CWCW[`C`::a=())A{++ellN;;@Q@QUVU[U[@[::a=( 003W7551777?2AGG<<!!551777?:AGGGOLLr/   c                   U R                   R                  R                  U5      (       a7  U R                  U R                  * U R
                  U-  -   U R
                  5      $ U R                  U5      u  p#nUS:X  a7  U R                  U R                  * U R
                  U-  -   U R
                  5      $ U(       d  [        $ U R                  U R                  * U-  U R
                  U-  -   U R
                  U-  5      $ r+  r,  r-  s        r-   r3  FracElement.__rsub__  s    77<<""1%%55!''AGGAI-qww77 003W755!''AGGGO3QWW==!!55!''')AGGGO;QWWW_MMr/   c                   U R                   nU (       a  U(       d  UR                  $ UR                  U5      (       a@  U R                  U R                  UR                  -  U R
                  UR
                  -  5      $ UR                  R                  U5      (       a)  U R                  U R                  U-  U R
                  5      $ [        U[        5      (       a  [        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  O[        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $ [        U[        5      (       aU  [        UR                  [        5      (       a%  UR                  R                  UR                  :X  a  OUR                  U 5      $ U R                  U5      $ )z-Multiply rational functions ``f`` and ``g``. )r.   r]   ry   r   r   r   rQ   rc   r\   r*   r   __rmul__r  r   r   r'  s      r-   __mul__FracElement.__mul__  sS   ::a  55!''!''/::ZZ""1%%55AGG,,![))ellM::u||?Q?QUVU\U\?\>>177>>CWCW[`C`::a=())A{++ellN;;@Q@QUVU[U[@[::a=(zz!}r/   c                   U R                   R                  R                  U5      (       a)  U R                  U R                  U-  U R
                  5      $ U R                  U5      u  p#nUS:X  a)  U R                  U R                  U-  U R
                  5      $ U(       d  [        $ U R                  U R                  U-  U R
                  U-  5      $ r+  r,  r-  s        r-   r:  FracElement.__rmul__  s    77<<""1%%55AGG,, 003W755!''22!!55!'''/::r/   c                   U R                   nU(       d  [        eUR                  U5      (       a@  U R                  U R                  UR
                  -  U R
                  UR                  -  5      $ UR                  R                  U5      (       a)  U R                  U R                  U R
                  U-  5      $ [        U[        5      (       a  [        UR                  [        5      (       a%  UR                  R                   UR                   :X  a  O[        UR                   R                  [        5      (       a5  UR                   R                  R                   U:X  a  UR                  U 5      $ [        $ [        U[        5      (       aU  [        UR                  [        5      (       a%  UR                  R                  UR                  :X  a  OUR                  U 5      $ U R                  U5      u  p4nUS:X  a)  U R                  U R                  U R
                  U-  5      $ U(       d  [        $ U R                  U R                  U-  U R
                  U-  5      $ )z0Computes quotient of fractions ``f`` and ``g``. r   )r.   r   ry   r   r   r   rQ   rc   r\   r*   r   __rtruediv__r  r   r   r#  r4  s         r-   __truediv__FracElement.__truediv__  s   ##a  55!''!''/::ZZ""1%%55!''!),,![))ellM::u||?Q?QUVU\U\?\>>177>>CWCW[`C`>>!,,))A{++ellN;;@Q@QUVU[U[@[>>!,, 003W755!'''/22!!55!'''/::r/   c                   U (       d  [         eU R                  R                  R                  U5      (       a)  U R	                  U R
                  U-  U R                  5      $ U R                  U5      u  p#nUS:X  a)  U R	                  U R
                  U-  U R                  5      $ U(       d  [        $ U R	                  U R
                  U-  U R                  U-  5      $ r+  )	r   r.   rQ   ry   r   r   r   r#  r  r-  s        r-   r@  FracElement.__rtruediv__:  s    ##WW\\$$Q''55AGG,, 003W755!''22!!55!'''/::r/   c                    US:  a,  U R                  U R                  U-  U R                  U-  5      $ U (       d  [        eU R                  U R                  U* -  U R                  U* -  5      $ )z+Raise ``f`` to a non-negative power ``n``. r   )r^   r   r   r   )r   ns     r-   __pow__FracElement.__pow__I  sX    699QWWaZ!44##99QWWqb[!''A2+66r/   c                    UR                  5       nU R                  U R                  R                  U5      U R                  -  U R                  U R                  R                  U5      -  -
  U R                  S-  5      $ )zComputes 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)

r8   )r{   r   r   diffr   )r   xs     r-   rJ  FracElement.diffR  sX     IIKuuQWW\\!_QWW,qwwqww||A/FFQR
SSr/   c                ,   S[        U5      s=:  a  U R                  R                  ::  a;  O  O8U R                  [	        [        U R                  R                  U5      5      5      $ [        SU R                  R                  < S[        U5      < 35      e)Nr   z expected at least 1 and at most z values, got )r@   r.   rS   evaluater9   rb   r'   r|   )r   r>   s     r-   r   FracElement.__call__c  sb    s6{+aggmm+::d3qww||V#<=>>TUT[T[TaTacfgmcnoppr/   c                   [        U[        5      (       a_  Uc\  U VVs/ s H  u  p2UR                  5       U4PM     nnnU R                  R	                  U5      U R
                  R	                  U5      pTOEUR                  5       nU R                  R	                  X5      U R
                  R	                  X5      pTUR                  R                  5       nUR                  XE5      $ s  snnf rU   )	rc   r9   r{   r   rN  r   rQ   r   r   )r   rK  aXr   r   r.   s          r-   rN  FracElement.evaluatei  s    a19/02qtq199;"qA277++A.0@0@0C5		A77++A11773C3CA3I5

##%yy&& 3s   C%c                   [        U[        5      (       a_  Uc\  U VVs/ s H  u  p2UR                  5       U4PM     nnnU R                  R	                  U5      U R
                  R	                  U5      pTOEUR                  5       nU R                  R	                  X5      U R
                  R	                  X5      pTU R                  XE5      $ s  snnf rU   )rc   r9   r{   r   subsr   r   )r   rK  rQ  rR  r   r   s         r-   rU  FracElement.subst  s    a19/02qtq199;"qA277<<?AGGLLO5		A77<<-qww||A/A5uuU"" 3s   Cc                    [         erU   )r   )r   rK  rQ  s      r-   composeFracElement.compose~  s    !!r/   )r[   r   r.   r   rU   )+rV   r   r   r   r   r   r^   r   r{   r   rr   r[   ru   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r#  r(  r&  r5  r3  r;  r:  rA  r@  rG  rJ  r   rN  rU  rX  r   r   r/   r-   r\   r\   $  s    G2/
&4 EB/I@>"+,$(>M$MLN4;;B;7T"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   r5   rN   r&   r\   r   r/   r-   <module>rr     s    ' "  - -    # " $ 3 : - ; ; = 4 4 1 1 : 3 3 " 1 )!$ # #
 "% ! !
 "%   2 2j{? {?z["-+ ["r/   