Ticket #9880: trac_9880-fix_doctests_symbolic.take2.patch

File trac_9880-fix_doctests_symbolic.take2.patch, 35.3 KB (added by burcin, 10 years ago)
  • sage/symbolic/expression.pyx

    # HG changeset patch
    # User Volker Braun <vbraun@stp.dias.ie>
    # Date 1308366050 25200
    # Node ID d78cf5ad0709bfedb67054eff2242d5c15a90f65
    # Parent  787875a79bb28246097f5bc2241d570ff93b71e6
    Trac #9880: Fix doctests in expression.pyx and random_tests.py
    
    diff --git a/sage/symbolic/expression.pyx b/sage/symbolic/expression.pyx
    a b  
    1515::
    1616
    1717    sage: eqn^2
    18     (x - 1)^4 <= (x^2 - 2*x + 3)^2
     18    (x - 1)^4 <= (-x^2 + 2*x - 3)^2
    1919    sage: eqn.expand()
    2020    x^2 - 2*x + 1 <= x^2 - 2*x + 3
    2121
     
    7878    sage: var('a,b,c')
    7979    (a, b, c)
    8080    sage: expand((u + v + a + b + c)^2)
    81     a^2 + 2*a*b + 2*a*c + 2*a*u + 2*a*v + b^2 + 2*b*c + 2*b*u + 2*b*v + c^2 + 2*c*u + 2*c*v + u^2 + 2*u*v + v^2
     81    a^2 + b^2 + 2*a*b + c^2 + 2*a*c + 2*b*c + u^2 + 2*a*u + 2*b*u + 2*c*u + v^2 + 2*a*v + 2*b*v + 2*c*v + 2*u*v
    8282
    8383TESTS:
    8484
     
    108108    sage: t*u
    109109    1
    110110    sage: t + u
    111     e^sqrt(x) + e^(-sqrt(x))
     111    e^(-sqrt(x)) + e^sqrt(x)
    112112    sage: t
    113113    e^sqrt(x)
    114114
     
    207207
    208208        OUTPUT:
    209209
    210         The python object corresponding to this expression, assuming
    211         this expression is a single numerical value. Otherwise, a
    212         TypeError is raised.
     210        The Python object corresponding to this expression, assuming
     211        this expression is a single numerical value or an infinity
     212        representable in Python. Otherwise, a ``TypeError`` is raised.
    213213
    214214        EXAMPLES::
    215215       
     
    233233            sage: SR(I*oo).pyobject()
    234234            Traceback (most recent call last):
    235235            ...
    236             ValueError: Python infinity cannot have complex phase.
     236            TypeError: Python infinity cannot have complex phase.
    237237        """
    238238        cdef GConstant* c
    239239        if is_a_constant(self._gobj):
     
    328328            sage: t = 2*x*y^z+3
    329329            sage: u = loads(dumps(t)) # indirect doctest
    330330            sage: u
    331             2*y^z*x + 3
     331            2*x*y^z + 3
    332332            sage: bool(t == u)
    333333            True
    334334            sage: u.subs(x=z)
     
    370370       
    371371        EXAMPLES::
    372372       
    373             sage: (1+x)._dbgprint()
     373            sage: (1+x)._dbgprint()   # random output
    374374            x + 1
    375375        """
    376376        self._gobj.dbgprint();
     
    557557        EXAMPLES::
    558558       
    559559            sage: gap(e + pi^2 + x^3)
    560             pi^2 + x^3 + e
     560            x^3 + pi^2 + e
    561561        """
    562562        return '"%s"'%repr(self)
    563563
     
    569569        EXAMPLES::
    570570       
    571571            sage: singular(e + pi^2 + x^3)
    572             pi^2 + x^3 + e
     572            x^3 + pi^2 + e
    573573        """
    574574        return '"%s"'%repr(self)
    575575
     
    585585            sage: x = var('x')                     
    586586            sage: f = sin(cos(x^2) + log(x))
    587587            sage: f._magma_init_(magma)
    588             '"sin(log(x) + cos(x^2))"'
     588            '"sin(cos(x^2) + log(x))"'
    589589            sage: magma(f)                         # optional - magma
    590590            sin(log(x) + cos(x^2))
    591591            sage: magma(f).Type()                  # optional - magma
     
    604604            sage: latex(y + 3*(x^(-1)))
    605605            y + \frac{3}{x}
    606606            sage: latex(x^(y+z^(1/y)))
    607             x^{z^{\left(\frac{1}{y}\right)} + y}
     607            x^{y + z^{\left(\frac{1}{y}\right)}}
    608608            sage: latex(1/sqrt(x+y))
    609609            \frac{1}{\sqrt{x + y}}
    610610            sage: latex(sin(x*(z+y)^x))
    611             \sin\left({\left(y + z\right)}^{x} x\right)
     611            \sin\left(x {\left(y + z\right)}^{x}\right)
    612612            sage: latex(3/2*(x+y)/z/y)
    613613            \frac{3 \, {\left(x + y\right)}}{2 \, y z}
    614614            sage: latex((2^(x^y)))
     
    618618            sage: latex((x*y).conjugate())
    619619            \overline{x} \overline{y}
    620620            sage: latex(x*(1/(x^2)+sqrt(x^7)))
    621             {\left(\sqrt{x^{7}} + \frac{1}{x^{2}}\right)} x
     621            x {\left(\sqrt{x^{7}} + \frac{1}{x^{2}}\right)}
    622622
    623623        Check spacing of coefficients of mul expressions (#3202)::
    624624
     
    683683            sage: latex((x+2)*(x+1)/(x^3+1))
    684684            \frac{{\left(x + 1\right)} {\left(x + 2\right)}}{x^{3} + 1}
    685685            sage: latex((x+2)/(x^3+1)/(x+1))
    686             \frac{x + 2}{{\left(x + 1\right)} {\left(x^{3} + 1\right)}}
     686            \frac{x + 2}{{\left(x^{3} + 1\right)} {\left(x + 1\right)}}
    687687
    688688        Check that the sign is correct (#9086)::
    689689
     
    12101210            sage: x^3 -y == y + x
    12111211            x^3 - y == x + y
    12121212            sage: x^3 - y^10 >= y + x^10
    1213             x^3 - y^10 >= x^10 + y
     1213            -y^10 + x^3 >= x^10 + y
    12141214            sage: x^2 > x
    12151215            x^2 > x
    12161216        """
     
    12901290            sage: v,c = var('v,c')
    12911291            sage: assume(c != 0)
    12921292            sage: integral((1+v^2/c^2)^3/(1-v^2/c^2)^(3/2),v)
    1293             -75/8*sqrt(c^2)*arcsin(sqrt(c^2)*v/c^2) - 17/8*v^3/(sqrt(-v^2/c^2 + 1)*c^2) - 1/4*v^5/(sqrt(-v^2/c^2 + 1)*c^4) + 83/8*v/sqrt(-v^2/c^2 + 1)
     1293            -75/8*sqrt(c^2)*arcsin(sqrt(c^2)*v/c^2) - 1/4*v^5/(c^4*sqrt(-v^2/c^2 + 1)) - 17/8*v^3/(c^2*sqrt(-v^2/c^2 + 1)) + 83/8*v/sqrt(-v^2/c^2 + 1)
    12941294            sage: forget()
    12951295        """
    12961296        from sage.symbolic.assumptions import _assumptions
     
    22252225            sage: nsr(oo) - nsr(oo)
    22262226            Traceback (most recent call last):
    22272227            ...
    2228             RuntimeError: indeterminate expression: Infinity - Infinity encountered.
     2228            RuntimeError: indeterminate expression: infinity - infinity encountered.
    22292229            sage: nsr(-oo) - nsr(-oo)
    22302230            Traceback (most recent call last):
    22312231            ...
    2232             RuntimeError: indeterminate expression: Infinity - Infinity encountered.
     2232            RuntimeError: indeterminate expression: infinity - infinity encountered.
    22332233
    22342234            sage: nsr(unsigned_infinity) + nsr(oo)
    22352235            Traceback (most recent call last):
    22362236            ...
    2237             RuntimeError: indeterminate expression: unsigned_infinity + x where x is Infinity, -Infinity or unsigned infinity encountered.
     2237            RuntimeError: indeterminate expression: unsigned_infinity +- infinity encountered.
    22382238            sage: nsr(unsigned_infinity) - nsr(oo)
    22392239            Traceback (most recent call last):
    22402240            ...
    2241             RuntimeError: indeterminate expression: unsigned_infinity + x where x is Infinity, -Infinity or unsigned infinity encountered.
     2241            RuntimeError: indeterminate expression: unsigned_infinity +- infinity encountered.
    22422242            sage: nsr(oo) + nsr(unsigned_infinity)
    22432243            Traceback (most recent call last):
    22442244            ...
    2245             RuntimeError: indeterminate expression: unsigned_infinity + x where x is Infinity, -Infinity or unsigned infinity encountered.
     2245            RuntimeError: indeterminate expression: unsigned_infinity +- infinity encountered.
    22462246            sage: nsr(oo) - nsr(unsigned_infinity)
    22472247            Traceback (most recent call last):
    22482248            ...
    2249             RuntimeError: indeterminate expression: unsigned_infinity + x where x is Infinity, -Infinity or unsigned infinity encountered.
     2249            RuntimeError: indeterminate expression: unsigned_infinity +- infinity encountered.
    22502250            sage: nsr(unsigned_infinity) + nsr(unsigned_infinity)
    2251             Traceback (most recent call last):
    2252             ...
    2253             RuntimeError: indeterminate expression: unsigned_infinity + x where x is Infinity, -Infinity or unsigned infinity encountered.
    2254 
    2255 
     2251            Infinity
    22562252        """
    22572253        cdef GEx x
    22582254        cdef Expression _right = <Expression>right
     
    24082404        ::
    24092405
    24102406            sage: x*oo
    2411             +Infinity
    2412             sage: -x*oo
    2413             -Infinity
     2407            Traceback (most recent call last):
     2408            ...
     2409            ArithmeticError: indeterminate expression: infinity * f(x) encountered.
    24142410            sage: x*unsigned_infinity
    24152411            Traceback (most recent call last):
    24162412            ...
     
    24832479            sage: x/oo
    24842480            0
    24852481            sage: oo/x
    2486             +Infinity
     2482            Traceback (most recent call last):
     2483            ...
     2484            RuntimeError: indeterminate expression: infinity * f(x) encountered.
    24872485
    24882486            sage: SR(oo)/SR(oo)
    24892487            Traceback (most recent call last):
    24902488            ...
    2491             RuntimeError: indeterminate expression: 0*infinity encountered.
     2489            RuntimeError: indeterminate expression: 0 * infinity encountered.
    24922490
    24932491            sage: SR(-oo)/SR(oo)
    24942492            Traceback (most recent call last):
    24952493            ...
    2496             RuntimeError: indeterminate expression: 0*infinity encountered.
     2494            RuntimeError: indeterminate expression: 0 * infinity encountered.
    24972495
    24982496            sage: SR(oo)/SR(-oo)
    24992497            Traceback (most recent call last):
    25002498            ...
    2501             RuntimeError: indeterminate expression: 0*infinity encountered.
     2499            RuntimeError: indeterminate expression: 0 * infinity encountered.
    25022500
    25032501            sage: SR(oo)/SR(unsigned_infinity)
    25042502            Traceback (most recent call last):
    25052503            ...
    2506             RuntimeError: indeterminate expression: 0*infinity encountered.
     2504            RuntimeError: indeterminate expression: 0 * infinity encountered.
    25072505
    25082506            sage: SR(unsigned_infinity)/SR(oo)
    25092507            Traceback (most recent call last):
    25102508            ...
    2511             RuntimeError: indeterminate expression: 0*infinity encountered.
     2509            RuntimeError: indeterminate expression: 0 * infinity encountered.
    25122510
    25132511            sage: SR(0)/SR(oo)
    25142512            0
     
    26212619            sage: a = sqrt(3)
    26222620            sage: b = x^2+1
    26232621            sage: a.__cmp__(b)   # indirect doctest
    2624             -1
     2622            1
    26252623        """
    26262624        return print_order_compare(left._gobj, (<Expression>right)._gobj)
    26272625
     
    27272725            sage: x^oo
    27282726            Traceback (most recent call last):
    27292727            ...
    2730             RuntimeError: power::eval(): pow(x, Infinity) for non numeric x is not defined.
     2728            RuntimeError: power::eval(): pow(f(x), infinity) is not defined.
    27312729            sage: SR(oo)^2
    27322730            +Infinity
    27332731            sage: SR(-oo)^2
     
    28212819            (x, y)
    28222820            sage: u = (sin(x) + cos(y))*(cos(x) - sin(y))
    28232821            sage: derivative(u,x,y)
    2824             sin(x)*sin(y) - cos(x)*cos(y)           
     2822            -cos(x)*cos(y) + sin(x)*sin(y)
    28252823            sage: f = ((x^2+1)/(x^2-1))^(1/4)
    28262824            sage: g = derivative(f, x); g # this is a complex expression
    28272825            1/2*(x/(x^2 - 1) - (x^2 + 1)*x/(x^2 - 1)^2)/((x^2 + 1)/(x^2 - 1))^(3/4)
     
    28332831            sage: y = var('y')
    28342832            sage: f = y^(sin(x))
    28352833            sage: derivative(f, x)
    2836             y^sin(x)*log(y)*cos(x)
     2834            y^sin(x)*cos(x)*log(y)
    28372835       
    28382836        ::
    28392837       
     
    28512849       
    28522850            sage: g = 1/(sqrt((x^2-1)*(x+5)^6))
    28532851            sage: derivative(g, x)
    2854             -((x + 5)^6*x + 3*(x + 5)^5*(x^2 - 1))/((x + 5)^6*(x^2 - 1))^(3/2)
     2852            -((x + 5)^6*x + 3*(x^2 - 1)*(x + 5)^5)/((x^2 - 1)*(x + 5)^6)^(3/2)
    28552853
    28562854        TESTS::
    28572855       
     
    30253023            sage: g = f.series(x==1, 4); g
    30263024            (-sin(y) - 1) + (-2*sin(y) - 2)*(x - 1) + (-sin(y) + 3)*(x - 1)^2 + 1*(x - 1)^3
    30273025            sage: h = g.truncate(); h
    3028             -(sin(y) - 3)*(x - 1)^2 + (x - 1)^3 - 2*(sin(y) + 1)*(x - 1) - sin(y) - 1
     3026            (x - 1)^3 - (x - 1)^2*(-sin(y) - 3) - 2*(x - 1)*(-2*sin(y) + 1) - sin(y) - 1
    30293027            sage: h.expand()
    30303028            x^3 - x^2*sin(y) - 5*x + 3
    30313029
     
    30353033            sage: f.series(x,7)
    30363034            1*x^(-1) + (-1/6)*x + 1/120*x^3 + (-1/5040)*x^5 + Order(x^7)
    30373035            sage: f.series(x==1,3)
    3038             (sin(1)) + (-2*sin(1) + cos(1))*(x - 1) + (5/2*sin(1) - 2*cos(1))*(x - 1)^2 + Order((x - 1)^3)
     3036            (sin(1)) + (cos(1) - 2*sin(1))*(x - 1) + (-2*cos(1) + 5/2*sin(1))*(x - 1)^2 + Order((x - 1)^3)
    30393037            sage: f.series(x==1,3).truncate().expand()
    3040             5/2*x^2*sin(1) - 2*x^2*cos(1) - 7*x*sin(1) + 5*x*cos(1) + 11/2*sin(1) - 3*cos(1)
     3038            -2*x^2*cos(1) + 5/2*x^2*sin(1) + 5*x*cos(1) - 7*x*sin(1) - 3*cos(1) + 11/2*sin(1)
    30413039
    30423040        Following the GiNaC tutorial, we use John Machin's amazing
    30433041        formula `\pi = 16 \tan^{-1}(1/5) - 4 \tan^{-1}(1/239)` to compute
     
    30883086            sage: var('a, x, z')
    30893087            (a, x, z)
    30903088            sage: taylor(a*log(z), z, 2, 3)
    3091             1/24*(z - 2)^3*a - 1/8*(z - 2)^2*a + 1/2*(z - 2)*a + a*log(2)
     3089            1/24*a*(z - 2)^3 - 1/8*a*(z - 2)^2 + 1/2*a*(z - 2) + a*log(2)
    30923090
    30933091        ::
    30943092
     
    31243122        Ticket #7472 fixed (Taylor polynomial in more variables) ::
    31253123 
    31263124            sage: x,y=var('x y'); taylor(x*y^3,(x,1),(y,1),4)
    3127             (y - 1)^3*(x - 1) + (y - 1)^3 + 3*(y - 1)^2*(x - 1) + 3*(y - 1)^2 + 3*(y - 1)*(x - 1) + x + 3*y - 3
     3125            (x - 1)*(y - 1)^3 + (y - 1)^3 + 3*(x - 1)*(y - 1)^2 + 3*(y - 1)^2 + 3*(x - 1)*(y - 1) + x + 3*y - 3
    31283126            sage: expand(_)
    31293127            x*y^3
    31303128
     
    31693167            sage: f.series(x,7).truncate()
    31703168            -1/5040*x^5 + 1/120*x^3 - 1/6*x + 1/x
    31713169            sage: f.series(x==1,3).truncate().expand()
    3172             5/2*x^2*sin(1) - 2*x^2*cos(1) - 7*x*sin(1) + 5*x*cos(1) + 11/2*sin(1) - 3*cos(1)
     3170            -2*x^2*cos(1) + 5/2*x^2*sin(1) + 5*x*cos(1) - 7*x*sin(1) - 3*cos(1) + 11/2*sin(1)
    31733171        """
    31743172        if not is_a_series(self._gobj):
    31753173            return self
     
    31923190            sage: x,y = var('x,y')
    31933191            sage: a = (x-y)^5
    31943192            sage: a.expand()
    3195             x^5 - 5*x^4*y + 10*x^3*y^2 - 10*x^2*y^3 + 5*x*y^4 - y^5
     3193            x^5 - y^5 + 5*x*y^4 - 10*x^2*y^3 + 10*x^3*y^2 - 5*x^4*y
    31963194            sage: expand(a)
    3197             x^5 - 5*x^4*y + 10*x^3*y^2 - 10*x^2*y^3 + 5*x*y^4 - y^5
     3195            x^5 - y^5 + 5*x*y^4 - 10*x^2*y^3 + 10*x^3*y^2 - 5*x^4*y
    31983196           
    31993197        We expand some other expressions::
    32003198       
    32013199            sage: expand((x-1)^3/(y-1))
    32023200            x^3/(y - 1) - 3*x^2/(y - 1) + 3*x/(y - 1) - 1/(y - 1)
    32033201            sage: expand((x+sin((x+y)^2))^2)
    3204             x^2 + 2*x*sin((x + y)^2) + sin((x + y)^2)^2
     3202            x^2 + sin((x + y)^2)^2 + 2*x*sin((x + y)^2)
    32053203
    32063204        We can expand individual sides of a relation::
    32073205
     
    32183216            sage: var('x,y')
    32193217            (x, y)
    32203218            sage: ((x + (2/3)*y)^3).expand()
    3221             x^3 + 2*x^2*y + 4/3*x*y^2 + 8/27*y^3
     3219            x^3 + 8/27*y^3 + 4/3*x*y^2 + 2*x^2*y
    32223220            sage: expand( (x*sin(x) - cos(y)/x)^2 )
    3223             x^2*sin(x)^2 - 2*sin(x)*cos(y) + cos(y)^2/x^2
     3221            x^2*sin(x)^2 - 2*cos(y)*sin(x) + cos(y)^2/x^2
    32243222            sage: f = (x-y)*(x+y); f
    32253223            (x - y)*(x + y)
    32263224            sage: f.expand()
     
    32793277        EXAMPLES::
    32803278       
    32813279            sage: sin(5*x).expand_trig()
    3282             sin(x)^5 - 10*sin(x)^3*cos(x)^2 + 5*sin(x)*cos(x)^4
     3280            sin(x)^5 - 10*cos(x)^2*sin(x)^3 + 5*cos(x)^4*sin(x)
    32833281            sage: cos(2*x + var('y')).expand_trig()
    3284             -sin(2*x)*sin(y) + cos(2*x)*cos(y)
     3282            cos(2*x)*cos(y) - sin(2*x)*sin(y)
    32853283       
    32863284        We illustrate various options to this function::
    32873285       
    32883286            sage: f = sin(sin(3*cos(2*x))*x)
    32893287            sage: f.expand_trig()
    3290             sin(-(sin(cos(2*x))^3 - 3*sin(cos(2*x))*cos(cos(2*x))^2)*x)
     3288            sin(-(sin(cos(2*x))^3 - 3*cos(cos(2*x))^2*sin(cos(2*x)))*x)
    32913289            sage: f.expand_trig(full=True)
    3292             sin(((sin(sin(x)^2)*cos(cos(x)^2) - sin(cos(x)^2)*cos(sin(x)^2))^3 - 3*(sin(sin(x)^2)*cos(cos(x)^2) - sin(cos(x)^2)*cos(sin(x)^2))*(sin(sin(x)^2)*sin(cos(x)^2) + cos(sin(x)^2)*cos(cos(x)^2))^2)*x)
     3290            sin(-((cos(sin(x)^2)*sin(cos(x)^2) - cos(cos(x)^2)*sin(sin(x)^2))^3 - 3*(cos(cos(x)^2)*cos(sin(x)^2) + sin(cos(x)^2)*sin(sin(x)^2))^2*(cos(sin(x)^2)*sin(cos(x)^2) - cos(cos(x)^2)*sin(sin(x)^2)))*x)
    32933291            sage: sin(2*x).expand_trig(times=False)
    32943292            sin(2*x)
    32953293            sage: sin(2*x).expand_trig(times=True)
    3296             2*sin(x)*cos(x)
     3294            2*cos(x)*sin(x)
    32973295            sage: sin(2 + x).expand_trig(plus=False)
    32983296            sin(x + 2)
    32993297            sage: sin(2 + x).expand_trig(plus=True)
    3300             sin(2)*cos(x) + sin(x)*cos(2)
     3298            cos(x)*sin(2) + cos(2)*sin(x)
    33013299            sage: sin(x/2).expand_trig(half_angles=False)
    33023300            sin(1/2*x)
    33033301            sage: sin(x/2).expand_trig(half_angles=True)
    3304             1/2*sqrt(-cos(x) + 1)*sqrt(2)*(-1)^floor(1/2*x/pi)
     3302            1/2*sqrt(2)*(-1)^floor(1/2*x/pi)*sqrt(-cos(x) + 1)
    33053303
    33063304        ALIASES:
    33073305
     
    33423340            sage: y=var('y')
    33433341            sage: f=sin(x)*cos(x)^3+sin(y)^2
    33443342            sage: f.reduce_trig()
    3345             1/4*sin(2*x) + 1/8*sin(4*x) - 1/2*cos(2*y) + 1/2
     3343            -1/2*cos(2*y) + 1/4*sin(2*x) + 1/8*sin(4*x) + 1/2
    33463344
    33473345        To reduce only the expressions involving x we use optional parameter::
    33483346
     
    34033401            {$0: x + y}
    34043402            sage: t = ((a+b)*(a+c)).match((a+w0)*(a+w1))
    34053403            sage: t[w0], t[w1]
    3406             (b, c)
     3404            (c, b)
    34073405            sage: ((a+b)*(a+c)).match((w0+b)*(w0+c))
    34083406            {$0: a}
    3409             sage: print ((a+b)*(a+c)).match((w0+w1)*(w0+w2))    # surprising?
    3410             None
     3407            sage: print ((a+b)*(a+c)).match((w0+w1)*(w0+w2))
     3408            {$2: b, $0: a, $1: c}
    34113409            sage: t = (a*(x+y)+a*z+b).match(a*w0+w1)
    34123410            sage: t[w0], t[w1]
    3413             (x + y, a*z + b)
     3411            (z, a*(x + y) + b)
    34143412            sage: print (a+b+c+d+e+f).match(c)
    34153413            None
    34163414            sage: (a+b+c+d+e+f).has(c)
     
    35673565            (x + y)^3 + b^2 + c
    35683566
    35693567            sage: t.subs({w0^2: w0^3})
    3570             (x + y)^3 + a^3 + b^3
     3568            a^3 + b^3 + (x + y)^3
    35713569
    35723570            # substitute with a relational expression
    35733571            sage: t.subs(w0^2 == w0^3)
    3574             (x + y)^3 + a^3 + b^3
     3572            a^3 + b^3 + (x + y)^3
    35753573
    35763574            sage: t.subs(w0==w0^2)
    35773575            (x^2 + y^2)^18 + a^16 + b^16           
     
    36113609            sage: (x/y).subs(y=oo)
    36123610            0
    36133611            sage: (x/y).subs(x=oo)
    3614             +Infinity
    3615             sage: (x*y).subs(x=oo)
    3616             +Infinity
     3612            Traceback (most recent call last):
     3613            ...
     3614            RuntimeError: indeterminate expression: infinity * f(x) encountered.
    36173615            sage: (x^y).subs(x=oo)
    36183616            Traceback (most recent call last):
    36193617            ...
    3620             RuntimeError: power::eval(): pow(Infinity, x) for non numeric x is not defined.
     3618            RuntimeError: power::eval(): pow(Infinity, f(x)) is not defined.
    36213619            sage: (x^y).subs(y=oo)
    36223620            Traceback (most recent call last):
    36233621            ...
    3624             RuntimeError: power::eval(): pow(x, Infinity) for non numeric x is not defined.
     3622            RuntimeError: power::eval(): pow(f(x), infinity) is not defined.
    36253623            sage: (x+y).subs(x=oo)
    36263624            +Infinity
    36273625            sage: (x-y).subs(y=oo)
     
    36763674            (x, y, z, a, b, c, d, e, f)
    36773675            sage: w0 = SR.wild(0); w1 = SR.wild(1)
    36783676            sage: (a^2 + b^2 + (x+y)^2)._subs_expr(w0^2 == w0^3)
    3679             (x + y)^3 + a^3 + b^3
     3677            a^3 + b^3 + (x + y)^3
    36803678            sage: (a^4 + b^4 + (x+y)^4)._subs_expr(w0^2 == w0^3)
    3681             (x + y)^4 + a^4 + b^4
     3679            a^4 + b^4 + (x + y)^4
    36823680            sage: (a^2 + b^4 + (x+y)^4)._subs_expr(w0^2 == w0^3)
    3683             (x + y)^4 + a^3 + b^4
     3681            b^4 + (x + y)^4 + a^3
    36843682            sage: ((a+b+c)^2)._subs_expr(a+b == x)
    36853683            (a + b + c)^2
    36863684            sage: ((a+b+c)^2)._subs_expr(a+b+w0 == x+w0)
     
    37043702            sage: (sin(x)^2 + cos(x)^2)._subs_expr(sin(w0)^2+cos(w0)^2==1)
    37053703            1
    37063704            sage: (1 + sin(x)^2 + cos(x)^2)._subs_expr(sin(w0)^2+cos(w0)^2==1)
    3707             sin(x)^2 + cos(x)^2 + 1
     3705            cos(x)^2 + sin(x)^2 + 1
    37083706            sage: (17*x + sin(x)^2 + cos(x)^2)._subs_expr(w1 + sin(w0)^2+cos(w0)^2 == w1 + 1)
    37093707            17*x + 1
    37103708            sage: ((x-1)*(sin(x)^2 + cos(x)^2)^2)._subs_expr(sin(w0)^2+cos(w0)^2 == 1)
     
    37513749            x^4 + x
    37523750            sage: f = cos(x^2) + sin(x^2)
    37533751            sage: f.subs_expr(x^2 == x)
    3754             sin(x) + cos(x)
     3752            cos(x) + sin(x)
    37553753       
    37563754        ::
    37573755       
    37583756            sage: f(x,y,t) = cos(x) + sin(y) + x^2 + y^2 + t
    37593757            sage: f.subs_expr(y^2 == t)
    3760             (x, y, t) |--> x^2 + 2*t + sin(y) + cos(x)
     3758            (x, y, t) |--> x^2 + 2*t + cos(x) + sin(y)
    37613759       
    37623760        The following seems really weird, but it *is* what Maple does::
    37633761       
    37643762            sage: f.subs_expr(x^2 + y^2 == t)
    3765             (x, y, t) |--> x^2 + y^2 + t + sin(y) + cos(x)
     3763            (x, y, t) |--> x^2 + y^2 + t + cos(x) + sin(y)
    37663764            sage: maple.eval('subs(x^2 + y^2 = t, cos(x) + sin(y) + x^2 + y^2 + t)')          # optional requires maple
    37673765            'cos(x)+sin(y)+x^2+y^2+t'
    37683766            sage: maxima.quit()
     
    38113809            sage: var('x,y,z')
    38123810            (x, y, z)
    38133811            sage: (x+y)(x=z^2, y=x^y)
    3814             x^y + z^2
     3812            z^2 + x^y
    38153813        """
    38163814        return self._parent._call_element_(self, *args, **kwds)
    38173815
     
    39493947            sage: var('a,b,c,x,y')
    39503948            (a, b, c, x, y)
    39513949            sage: (a^2 + b^2 + (x+y)^2).operands()
    3952             [(x + y)^2, a^2, b^2]
     3950            [a^2, b^2, (x + y)^2]
    39533951            sage: (a^2).operands()
    39543952            [a, 2]
    39553953            sage: (a*b^2*c).operands()
     
    43554353            sage: x.add(x, hold=True)
    43564354            x + x
    43574355            sage: x.add(x, (2+x), hold=True)
    4358             x + x + (x + 2)
     4356            (x + 2) + x + x
    43594357            sage: x.add(x, (2+x), x, hold=True)
    4360             x + x + (x + 2) + x
     4358            (x + 2) + x + x + x
    43614359            sage: x.add(x, (2+x), x, 2*x, hold=True)
    4362             x + x + (x + 2) + x + 2*x
     4360            (x + 2) + 2*x + x + x + x
    43634361
    43644362        To then evaluate again, we currently must use Maxima via
    43654363        :meth:`simplify`::
     
    43884386            sage: x.mul(x, hold=True)
    43894387            x*x
    43904388            sage: x.mul(x, (2+x), hold=True)
    4391             x*x*(x + 2)
     4389            (x + 2)*x*x
    43924390            sage: x.mul(x, (2+x), x, hold=True)
    4393             x*x*(x + 2)*x
     4391            (x + 2)*x*x*x
    43944392            sage: x.mul(x, (2+x), x, 2*x, hold=True)
    4395             x*x*(x + 2)*x*(2*x)
     4393            (2*x)*(x + 2)*x*x*x
    43964394
    43974395        To then evaluate again, we currently must use Maxima via
    43984396        :meth:`simplify`::
     
    44524450            sage: f.coefficient(sin(x*y))
    44534451            x^3 + 2/x
    44544452            sage: f.collect(sin(x*y))
    4455             (x^3 + 2/x)*sin(x*y) + a*x + x*y + x/y + 100
     4453            a*x + x*y + (x^3 + 2/x)*sin(x*y) + x/y + 100
    44564454
    44574455            sage: var('a, x, y, z')
    44584456            (a, x, y, z)
     
    46394637            sage: bool(p.poly(a) == (x-a*sqrt(2))^2 + x + 1)
    46404638            True           
    46414639            sage: p.poly(x)
    4642             -(2*sqrt(2)*a - 1)*x + 2*a^2 + x^2 + 1
     4640            2*a^2 + x^2 - (-2*sqrt(2)*a - 1)*x + 1
    46434641        """
    46444642        from sage.symbolic.ring import SR
    46454643        f = self._maxima_()
     
    47854783            sage: R = SR[x]
    47864784            sage: a = R(sqrt(2) + x^3 + y)
    47874785            sage: a
    4788             y + sqrt(2) + x^3
     4786            x^3 + y + sqrt(2)
    47894787            sage: type(a)
    47904788            <class 'sage.rings.polynomial.polynomial_element_generic.Polynomial_generic_dense_field'>
    47914789            sage: a.degree()
     
    49394937            (x, y, z)
    49404938            sage: f = 4*x*y + x*z + 20*y^2 + 21*y*z + 4*z^2 + x^2*y^2*z^2
    49414939            sage: f.collect(x)
    4942             x^2*y^2*z^2 + (4*y + z)*x + 20*y^2 + 21*y*z + 4*z^2
     4940            x^2*y^2*z^2 + 20*y^2 + x*(4*y + z) + 4*z^2 + 21*y*z
    49434941            sage: f.collect(y)
    4944             (x^2*z^2 + 20)*y^2 + (4*x + 21*z)*y + x*z + 4*z^2
     4942            (x^2*z^2 + 20)*y^2 + (4*x + 21*z)*y + 4*z^2 + x*z
    49454943            sage: f.collect(z)
    4946             (x^2*y^2 + 4)*z^2 + (x + 21*y)*z + 4*x*y + 20*y^2
     4944            (x^2*y^2 + 4)*z^2 + 20*y^2 + 4*x*y + (x + 21*y)*z
    49474945        """
    49484946        cdef Expression s0 = self.coerce_in(s)
    49494947        cdef GEx x
     
    52765274            (a, b)
    52775275            sage: f = log(a + b*I)
    52785276            sage: f.imag_part()
    5279             arctan2(real_part(b) + imag_part(a), real_part(a) - imag_part(b))
     5277            arctan2(imag_part(a) + real_part(b), -imag_part(b) + real_part(a))
    52805278
    52815279        Using the ``hold`` parameter it is possible to prevent automatic
    52825280        evaluation::
     
    57535751            sage: SR(1).arctan2(CDF(0,1))
    57545752            arctan2(1, 1.0*I)
    57555753
     5754            sage: arctan2(0,oo)                       
     5755            0
    57565756            sage: SR(oo).arctan2(oo)
    5757             Traceback (most recent call last):
    5758             ...
    5759             RuntimeError: arctan2_eval(): arctan2(infinity, infinity) encountered
     5757            1/4*pi
    57605758            sage: SR(oo).arctan2(0)
    5761             0
     5759            1/2*pi
    57625760            sage: SR(-oo).arctan2(0)
     5761            -1/2*pi
     5762            sage: SR(-oo).arctan2(-2)
    57635763            pi
    5764             sage: SR(-oo).arctan2(-2)
    5765             -pi
    57665764            sage: SR(unsigned_infinity).arctan2(2)
    57675765            Traceback (most recent call last):
    57685766            ...
    5769             RuntimeError: arctan2_eval(): arctan2(unsigned_infinity, x) encountered
     5767            RuntimeError: arctan2_eval(): arctan2(x, unsigned_infinity) encountered
    57705768            sage: SR(2).arctan2(oo)
    57715769            1/2*pi
    57725770            sage: SR(2).arctan2(-oo)
     
    57745772            sage: SR(2).arctan2(SR(unsigned_infinity))
    57755773            Traceback (most recent call last):
    57765774            ...
    5777             RuntimeError: arctan2_eval(): arctan2(x, unsigned_infinity) encountered
     5775            RuntimeError: arctan2_eval(): arctan2(unsigned_infinity, x) encountered
    57785776        """
    57795777        cdef Expression nexp = self.coerce_in(x)
    57805778        return new_Expression_from_GEx(self._parent,
     
    62966294            sage: x.factorial()
    62976295            factorial(x)
    62986296            sage: (x^2+y^3).factorial()
    6299             factorial(x^2 + y^3)
     6297            factorial(y^3 + x^2)
    63006298
    63016299        To prevent automatic evaluation use the ``hold`` argument::
    63026300
     
    69676965        EXAMPLES::
    69686966       
    69696967            sage: f = sin(x)^2 + cos(x)^2; f
    6970             sin(x)^2 + cos(x)^2
     6968            cos(x)^2 + sin(x)^2
    69716969            sage: f.simplify()
    6972             sin(x)^2 + cos(x)^2
     6970            cos(x)^2 + sin(x)^2
    69736971            sage: f.simplify_trig()
    69746972            1
    69756973            sage: h = sin(x)*csc(x)
     
    69836981
    69846982            sage: f=tan(3*x)
    69856983            sage: f.simplify_trig()
    6986             (4*cos(x)^2 - 1)*sin(x)/(4*cos(x)^3 - 3*cos(x))
     6984            -(4*cos(x)^2 - 1)*sin(x)/(-4*cos(x)^3 + 3*cos(x))
    69876985            sage: f.simplify_trig(False)           
    69886986            sin(3*x)/cos(3*x)
    69896987       
     
    70647062            sage: y = var('y')
    70657063            sage: g = (x^(y/2) + 1)^2*(x^(y/2) - 1)^2/(x^y - 1)
    70667064            sage: g.simplify_rational(algorithm='simple')
    7067             -(2*x^y - x^(2*y) - 1)/(x^y - 1)
     7065            (x^(2*y) - 2*x^y + 1)/(x^y - 1)
    70687066            sage: g.simplify_rational()
    70697067            x^y - 1
    70707068
     
    70757073            sage: f.simplify_rational()
    70767074            (2*x^2 + 5*x + 4)/(x^3 + 5*x^2 + 8*x + 4)
    70777075            sage: f.simplify_rational(algorithm='noexpand')
    7078             ((x + 1)*x + (x + 2)^2)/((x + 1)*(x + 2)^2)
    7079 
     7076            ((x + 2)^2 + (x + 1)*x)/((x + 1)*(x + 2)^2)
    70807077        """
    70817078        self_m = self._maxima_()
    70827079        if algorithm == 'full':
     
    71287125        ::
    71297126
    71307127            sage: f = binomial(n, k)*factorial(k)*factorial(n-k); f
    7131             factorial(-k + n)*factorial(k)*binomial(n, k)
     7128            binomial(n, k)*factorial(-k + n)*factorial(k)
    71327129            sage: f.simplify_factorial()
    71337130            factorial(n)
    71347131       
     
    73237320
    73247321            sage: f = log(x)+log(y)-1/3*log((x+1))
    73257322            sage: f.simplify_log()
    7326             -1/3*log(x + 1) + log(x*y)
     7323            log(x*y) - 1/3*log(x + 1)
    73277324
    73287325            sage: f.simplify_log('ratios')
    73297326            log(x*y/(x + 1)^(1/3))
     
    75057502       
    75067503            sage: x,y,z = var('x, y, z')
    75077504            sage: (x^3-y^3).factor()
    7508             (x - y)*(x^2 + x*y + y^2)
     7505            (x^2 + y^2 + x*y)*(x - y)
    75097506            sage: factor(-8*y - 4*x + z^2*(2*y + x))
    7510             (z - 2)*(z + 2)*(x + 2*y)
     7507            (x + 2*y)*(z - 2)*(z + 2)
    75117508            sage: f = -1 - 2*x - x^2 + y^2 + 2*x*y^2 + x^2*y^2
    75127509            sage: F = factor(f/(36*(1 + 2*y + y^2)), dontfactor=[x]); F
    7513             1/36*(y - 1)*(x^2 + 2*x + 1)/(y + 1)
     7510            1/36*(x^2 + 2*x + 1)*(y - 1)/(y + 1)
    75147511
    75157512        If you are factoring a polynomial with rational coefficients (and
    75167513        dontfactor is empty) the factorization is done using Singular
     
    75207517            sage: var('x,y')
    75217518            (x, y)
    75227519            sage: (x^99 + y^99).factor()
    7523             (x + y)*(x^2 - x*y + y^2)*(x^6 - x^3*y^3 + y^6)*...
     7520            (x^60 + y^60 + x^3*y^57 - x^9*y^51 - x^12*y^48 + x^18*y^42
     7521            + x^21*y^39 - x^27*y^33 - x^30*y^30 - x^33*y^27 + x^39*y^21
     7522            + x^42*y^18 - x^48*y^12 - x^51*y^9 + x^57*y^3)*(x^20 + y^20
     7523            + x*y^19 - x^3*y^17 - x^4*y^16 + x^6*y^14 + x^7*y^13 - x^9*y^11
     7524            - x^10*y^10 - x^11*y^9 + x^13*y^7 + x^14*y^6 - x^16*y^4
     7525            - x^17*y^3 + x^19*y)*(x^10 + y^10 - x*y^9 + x^2*y^8 - x^3*y^7
     7526            + x^4*y^6 - x^5*y^5 + x^6*y^4 - x^7*y^3 + x^8*y^2 - x^9*y)*(x^6
     7527            + y^6 - x^3*y^3)*(x^2 + y^2 - x*y)*(x + y)
    75247528        """
    75257529        from sage.calculus.calculus import symbolic_expression_from_maxima_string, symbolic_expression_from_string
    75267530        if len(dontfactor) > 0:
     
    75617565            (x, y, z)
    75627566            sage: f = x^3-y^3
    75637567            sage: f.factor()
    7564             (x - y)*(x^2 + x*y + y^2)
     7568            (x^2 + y^2 + x*y)*(x - y)
    75657569       
    75667570        Notice that the -1 factor is separated out::
    75677571       
    75687572            sage: f.factor_list()
    7569             [(x - y, 1), (x^2 + x*y + y^2, 1)]
     7573            [(x^2 + y^2 + x*y, 1), (x - y, 1)]
    75707574       
    75717575        We factor a fairly straightforward expression::
    75727576       
    75737577            sage: factor(-8*y - 4*x + z^2*(2*y + x)).factor_list()
    7574             [(z - 2, 1), (z + 2, 1), (x + 2*y, 1)]
     7578            [(x + 2*y, 1), (z - 2, 1), (z + 2, 1)]
    75757579
    75767580        A more complicated example::
    75777581       
     
    75797583            (x, u, v)
    75807584            sage: f = expand((2*u*v^2-v^2-4*u^3)^2 * (-u)^3 * (x-sin(x))^3)
    75817585            sage: f.factor()
    7582             -(x - sin(x))^3*(4*u^3 - 2*u*v^2 + v^2)^2*u^3
     7586            (-4*u^3 + 2*u*v^2 - v^2)^2*u^3*(-x + sin(x))^3
    75837587            sage: g = f.factor_list(); g                     
    7584             [(x - sin(x), 3), (4*u^3 - 2*u*v^2 + v^2, 2), (u, 3), (-1, 1)]
     7588            [(4*u^3 - 2*u*v^2 + v^2, 2), (u, 3), (x - sin(x), 3), (-1, 1)]
    75857589
    75867590        This function also works for quotients::
    75877591       
     
    75897593            sage: g = f/(36*(1 + 2*y + y^2)); g
    75907594            1/36*(x^2*y^2 + 2*x*y^2 - x^2 + y^2 - 2*x - 1)/(y^2 + 2*y + 1)
    75917595            sage: g.factor(dontfactor=[x])
    7592             1/36*(y - 1)*(x^2 + 2*x + 1)/(y + 1)
     7596            1/36*(x^2 + 2*x + 1)*(y - 1)/(y + 1)
    75937597            sage: g.factor_list(dontfactor=[x])
    7594             [(y - 1, 1), (y + 1, -1), (x^2 + 2*x + 1, 1), (1/36, 1)]
     7598            [(x^2 + 2*x + 1, 1), (y - 1, 1), (y + 1, -1), (1/36, 1)]
    75957599                   
    75967600        This example also illustrates that the exponents do not have to be
    75977601        integers::
     
    76147618        EXAMPLES::
    76157619       
    76167620            sage: g = factor(x^3 - 1); g
    7617             (x - 1)*(x^2 + x + 1)
     7621            (x^2 + x + 1)*(x - 1)
    76187622            sage: v = g._factor_list(); v
    7619             [(x - 1, 1), (x^2 + x + 1, 1)]
     7623            [(x^2 + x + 1, 1), (x - 1, 1)]
    76207624            sage: type(v)
    76217625            <type 'list'>
    76227626        """
     
    77597763        A complicated example::
    77607764       
    77617765            sage: f = expand((x^2 - 1)^3*(x^2 + 1)*(x-a)); f
    7762             -a*x^8 + x^9 + 2*a*x^6 - 2*x^7 - 2*a*x^2 + 2*x^3 + a - x
     7766            x^9 - a*x^8 - 2*x^7 + 2*a*x^6 + 2*x^3 - 2*a*x^2 + a - x
    77637767       
    77647768        The default variable is `a`, since it is the first in
    77657769        alphabetical order::
     
    77987802            sage: var('a,b,c,x')
    77997803            (a, b, c, x)
    78007804            sage: (a*x^2 + b*x + c).roots(x)
    7801             [(-1/2*(b + sqrt(-4*a*c + b^2))/a, 1), (-1/2*(b - sqrt(-4*a*c + b^2))/a, 1)]
     7805            [(-1/2*(b + sqrt(b^2 - 4*a*c))/a, 1), (-1/2*(b - sqrt(b^2 - 4*a*c))/a, 1)]
    78027806
    78037807        By default, all the roots are required to be explicit rather than
    78047808        implicit. To get implicit roots, pass ``explicit_solutions=False``
     
    78127816            ...
    78137817            RuntimeError: no explicit roots found
    78147818            sage: f.roots(explicit_solutions=False)
    7815             [((2^(8/9) - 2^(1/9) + x^(8/9) - x^(1/9))/(2^(8/9) - 2^(1/9)), 1)]
     7819            [((2^(8/9) + x^(8/9) - 2^(1/9) - x^(1/9))/(2^(8/9) - 2^(1/9)), 1)]
    78167820
    78177821        Another example, but involving a degree 5 poly whose roots don't
    78187822        get computed explicitly::
     
    78587862            (f6, f5, f4, x)
    78597863            sage: e=15*f6*x^2 + 5*f5*x + f4
    78607864            sage: res = e.roots(x); res
    7861             [(-1/30*(sqrt(-12*f4*f6 + 5*f5^2)*sqrt(5) + 5*f5)/f6, 1), (1/30*(sqrt(-12*f4*f6 + 5*f5^2)*sqrt(5) - 5*f5)/f6, 1)]
     7865            [(-1/30*(sqrt(5)*sqrt(5*f5^2 - 12*f4*f6) + 5*f5)/f6, 1),
     7866             (1/30*(sqrt(5)*sqrt(5*f5^2 - 12*f4*f6) - 5*f5)/f6, 1)]
    78627867            sage: e.subs(x=res[0][0]).is_zero()
    78637868            True
    78647869        """
     
    86688673        ::
    86698674
    86708675            sage: (k * binomial(n, k)).sum(k, 1, n)
    8671             n*2^(n - 1)
     8676            2^(n - 1)*n
    86728677
    86738678        ::
    86748679
     
    88868891            sage: f*(-2/3)
    88878892            -2/3*x - 2 < -2/3*y + 4/3
    88888893            sage: f*(-pi)
    8889             -(x + 3)*pi < -(y - 2)*pi
     8894            -pi*(x + 3) < -pi*(y - 2)
    88908895
    88918896        Since the direction of the inequality never changes when doing
    88928897        arithmetic with equations, you can multiply or divide the
  • sage/symbolic/random_tests.py

    diff --git a/sage/symbolic/random_tests.py b/sage/symbolic/random_tests.py
    a b  
    260260        sage: from sage.symbolic.random_tests import *
    261261        sage: set_random_seed(2)
    262262        sage: random_expr(50, nvars=3, coeff_generator=CDF.random_element)
    263         (euler_gamma - v3^(-e) + (v2 - factorial(-e/v2))^(((2.85879036573 - 1.18163393202*I)*v2 + (2.85879036573 - 1.18163393202*I)*v3)*pi - 0.247786879678 + 0.931826724898*I)*arccsc((0.891138386848 - 0.0936820840629*I)/v1) - (0.553423153995 - 0.5481180572*I)*v3 + 0.149683576515 - 0.155746451854*I)*v1 + arccsch(pi + e)*elliptic_f(khinchin*v2, 1.4656989704 + 0.863754357069*I)
     263        (euler_gamma + (v2 - factorial(-e/v2))^(pi*((2.85879036573 - 1.18163393202*I)*v2 + (2.85879036573 - 1.18163393202*I)*v3) - 0.247786879678 + 0.931826724898*I)*arccsc((0.891138386848 - 0.0936820840629*I)/v1) - (0.553423153995 - 0.5481180572*I)*v3 - v3^(-e) + 0.149683576515 - 0.155746451854*I)*v1 + arccsch(pi + e)*elliptic_f(khinchin*v2, 1.4656989704 + 0.863754357069*I)
    264264        sage: random_expr(5, verbose=True)
    265265        About to apply dirac_delta to [1]
    266266        About to apply arccsch to [0]
     
    333333        sage: for i,j in CartesianProduct(range(0,3),range(0,3)):
    334334        ...       cmp[i,j] = x[i].__cmp__(x[j])
    335335        sage: cmp
    336         [ 0  1  1]
    337         [-1  0 -1]
    338         [-1  1  0]
     336        [ 0 -1 -1]
     337        [ 1  0 -1]
     338        [ 1  1  0]
    339339    """
    340340    from sage.matrix.constructor import matrix
    341341    from sage.combinat.cartesian_product import CartesianProduct