Opened 4 years ago

Closed 2 years ago

#20191 closed defect (fixed)

implement SymPy Piecewise equivalent

Reported by: rws Owned by:
Priority: major Milestone: sage-8.1
Component: symbolics Keywords:
Cc: mforets Merged in:
Authors: Ralf Stephan Reviewers: Travis Scrimshaw
Report Upstream: N/A Work issues:
Branch: 1929337 (Commits) Commit: 1929337bc3d226c2d490ce9e6727bb0f52d408a6
Dependencies: #23820 Stopgaps:

Description (last modified by rws)

This shows an equivalent to SymPy's Piecewise is missing in Sage:

        sage: _ = var('y, z')
        sage: (x^y - z).integrate(y)
        -y*z + x^y/log(x)
        sage: (x^y - z).integrate(y, algorithm="sympy")  # see Trac #14694
        Traceback (most recent call last):
        ...
        AttributeError: 'ExprCondPair' object has no attribute '_sage_'

SymPy-1.0:
>>> integrate(x**y-z,y)
       ⎛⎧  y     for log(x) = 0⎞
       ⎜⎪                      ⎟
       ⎜⎪   y                  ⎟
 -y⋅z + ⎜⎨  x                   ⎟
       ⎜⎪──────    otherwise   ⎟
       ⎜⎪log(x)                ⎟
       ⎝⎩                      ⎠

Piecewise in SymPy is a held function of ExprCondPair arguments. It would be a superset of our piecewise. The name should not be confusable, a suggestion is if_then([(log(x)==0, y), (x^y/log(x), 1)]).

When it is implemented a SymPy patch should be done for the _sage_ method.

EDIT: Maxima 5.38.1 returns a similar function for some integrals.

Change History (11)

comment:1 Changed 3 years ago by rws

  • Description modified (diff)

comment:2 Changed 2 years ago by rws

  • Description modified (diff)
  • Milestone changed from sage-7.2 to sage-8.1
  • Summary changed from implement ExprCondPair equivalent to implement SymPy Piecewise equivalent

comment:3 Changed 2 years ago by rws

  • Description modified (diff)

comment:4 Changed 2 years ago by rws

  • Branch set to u/rws/implement_sympy_piecewise_equivalent

comment:5 Changed 2 years ago by rws

  • Commit set to 1929337bc3d226c2d490ce9e6727bb0f52d408a6
  • Dependencies set to pynac-0.7.11

New commits:

192933720191: cases() function

comment:6 Changed 2 years ago by mforets

  • Cc mforets added

comment:7 Changed 2 years ago by rws

  • Dependencies changed from pynac-0.7.11 to #23820

comment:8 Changed 2 years ago by rws

  • Authors set to Ralf Stephan
  • Status changed from new to needs_review

comment:9 Changed 2 years ago by tscrim

  • Reviewers set to Travis Scrimshaw

Does this solve the issue in the ticket description? If so, I feel like we should add that as a doctest. If not, then you can set a positive review and post in a comment here which ticket will actually address it.

comment:10 Changed 2 years ago by rws

  • Status changed from needs_review to positive_review

Right. #23923 depends on this.

comment:11 Changed 2 years ago by vbraun

  • Branch changed from u/rws/implement_sympy_piecewise_equivalent to 1929337bc3d226c2d490ce9e6727bb0f52d408a6
  • Resolution set to fixed
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.