#1773: piecewise functions and integration / arithmetic do not play well 
together
----------------------------+------------------------
       Reporter:  was       |        Owner:  gfurnish
           Type:  defect    |       Status:  new
       Priority:  major     |    Milestone:  sage-7.3
      Component:  calculus  |   Resolution:
       Keywords:            |    Merged in:
        Authors:            |    Reviewers:
Report Upstream:  N/A       |  Work issues:
         Branch:            |       Commit:
   Dependencies:  #14801    |     Stopgaps:
----------------------------+------------------------
Changes (by mkoeppe):

 * cc: vbraun, slelievre, mkoeppe, eviatarbach, rws (added)
 * milestone:  sage-6.4 => sage-7.3


Comment:

 While all the examples appearing in the comments are fixed with the new
 `piecewise` of #14801, the original bug example still fails (but with a
 different error message).

 Cc'ing #14801's cc list.

 {{{
 sage: f1(x) = -abs(x) + 1
 sage: f2(x) = abs(x - 2) - 1
 sage: tri_wave = piecewise([ [(-1,1), f1], [(1,3), f2]])
 sage: tri_wave.plot()
 Launched png viewer for Graphics object consisting of 1 graphics primitive
 sage: integrate(tri_wave(x)^2, x, -1, 3)
 ---------------------------------------------------------------------------
 TypeError                                 Traceback (most recent call
 last)
 <ipython-input-8-9387c34a513c> in <module>()
 ----> 1 integrate(tri_wave(x)**Integer(2), x, -Integer(1), Integer(3))

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/misc/functional.py in integral(x, *args, **kwds)
     663     """
     664     if hasattr(x, 'integral'):
 --> 665         return x.integral(*args, **kwds)
     666     else:
     667         from sage.symbolic.ring import SR

 /Users/mkoeppe/cvs/sage/src/sage/symbolic/expression.pyx in
 sage.symbolic.expression.Expression.integral
 
(/Users/mkoeppe/cvs/sage/src/build/cythonized/sage/symbolic/expression.cpp:60225)()
   11484                     R = ring.SR
   11485             return R(integral(f, v, a, b, **kwds))
 > 11486         return integral(self, *args, **kwds)
   11487
   11488     integrate = integral

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/symbolic/integration/integral.py in integrate(expression, v,
 a, b, algorithm, hold)
     763         return indefinite_integral(expression, v, hold=hold)
     764     else:
 --> 765         return definite_integral(expression, v, a, b, hold=hold)
     766
     767 integral = integrate

 /Users/mkoeppe/cvs/sage/src/sage/symbolic/function.pyx in
 sage.symbolic.function.BuiltinFunction.__call__
 
(/Users/mkoeppe/cvs/sage/src/build/cythonized/sage/symbolic/function.cpp:11170)()
     970             res = self._evalf_try_(*args)
     971             if res is None:
 --> 972                 res = super(BuiltinFunction, self).__call__(
     973                         *args, coerce=coerce, hold=hold)
     974

 /Users/mkoeppe/cvs/sage/src/sage/symbolic/function.pyx in
 sage.symbolic.function.Function.__call__
 
(/Users/mkoeppe/cvs/sage/src/build/cythonized/sage/symbolic/function.cpp:6921)()
     481             for i from 0 <= i < len(args):
     482                 vec.push_back((<Expression>args[i])._gobj)
 --> 483             res = g_function_evalv(self._serial, vec, hold)
     484         elif self._nargs == 1:
     485             res = g_function_eval1(self._serial,

 /Users/mkoeppe/cvs/sage/src/sage/symbolic/function.pyx in
 sage.symbolic.function.BuiltinFunction._evalf_or_eval_
 
(/Users/mkoeppe/cvs/sage/src/build/cythonized/sage/symbolic/function.cpp:12417)()
    1059         res = self._evalf_try_(*args)
    1060         if res is None:
 -> 1061             return self._eval0_(*args)
    1062         else:
    1063             return res

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/symbolic/integration/integral.py in _eval_(self, f, x, a, b)
     176         for integrator in self.integrators:
     177             try:
 --> 178                 return integrator(*args)
     179             except NotImplementedError:
     180                 pass

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/symbolic/integration/external.py in
 maxima_integrator(expression, v, a, b)
      22         result = maxima.sr_integral(expression,v)
      23     else:
 ---> 24         result = maxima.sr_integral(expression, v, a, b)
      25     return result._sage_()
      26

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/interfaces/maxima_lib.py in sr_integral(self, *args)
     796         """
     797         try:
 --> 798             return
 max_to_sr(maxima_eval(([max_integrate],[sr_to_max(SR(a)) for a in args])))
     799         except RuntimeError as error:
     800             s = str(error)

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/interfaces/maxima_lib.py in max_to_sr(expr)
    1634         op_max=caar(expr)
    1635         if op_max in special_max_to_sage:
 -> 1636             return special_max_to_sage[op_max](expr)
    1637         if not(op_max in max_op_dict):
    1638             op_max_str=maxprint(op_max).python()[1:-1]

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/interfaces/maxima_lib.py in dummy_integrate(expr)
    1428         integrate(f(x), x, 0, 10)
    1429     """
 -> 1430     args=[max_to_sr(a) for a in cdr(expr)]
    1431     if len(args) == 4 :
    1432         return
 sage.symbolic.integration.integral.definite_integral(*args,

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/interfaces/maxima_lib.py in max_to_sr(expr)
    1651             op=max_op_dict[op_max]
    1652         max_args=cdr(expr)
 -> 1653         args=[max_to_sr(a) for a in max_args]
    1654         return op(*args)
    1655     elif expr.symbolp():

 /Users/mkoeppe/cvs/sage/local/lib/python2.7/site-
 packages/sage/interfaces/maxima_lib.py in max_to_sr(expr)
    1652         max_args=cdr(expr)
    1653         args=[max_to_sr(a) for a in max_args]
 -> 1654         return op(*args)
    1655     elif expr.symbolp():
    1656         if not(expr in max_sym_dict):

 TypeError: __call__() takes exactly 2 arguments (3 given)
 }}}

--
Ticket URL: <https://trac.sagemath.org/ticket/1773#comment:13>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to