Opened 8 years ago
Last modified 3 years ago
#13773 new defect
Translate maxima's if() function to Sage's cases()
Reported by: | vbraun | Owned by: | burcin |
---|---|---|---|
Priority: | major | Milestone: | sage-8.2 |
Component: | symbolics | Keywords: | |
Cc: | mforets | Merged in: | |
Authors: | Reviewers: | ||
Report Upstream: | N/A | Work issues: | |
Branch: | Commit: | ||
Dependencies: | Stopgaps: |
Description (last modified by )
As reported in https://groups.google.com/d/topic/sage-support/gNPCG3Zbfjg/discussion
sage: var('r theta psi x y z') (r, theta, psi, x, y, z) sage: (r,theta,psi,x,y,z) (r, theta, psi, x, y, z) sage: e1 = r == +sqrt(x^2+y^2+z^2) sage: e2 = theta == arccos(z/sqrt(x^2+y^2+z^2)) sage: e3 = psi == arctan(y/x) sage: solve([e1,e2,e3],x,y,z) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /home/vbraun/opt/sage-5.5.rc0/devel/sage-main/<ipython console> in <module>() /home/vbraun/opt/sage-5.5.rc0/local/lib/python2.7/site-packages/sage/symbolic/relation.pyc in solve(f, *args, **kwds) 751 s = [] 752 --> 753 sol_list = string_to_list_of_solutions(repr(s)) 754 755 # Relaxed form suggested by Mike Hansen (#8553): /home/vbraun/opt/sage-5.5.rc0/local/lib/python2.7/site-packages/sage/symbolic/relation.pyc in string_to_list_of_solutions(s) 455 from sage.structure.sequence import Sequence 456 from sage.calculus.calculus import symbolic_expression_from_maxima_string --> 457 v = symbolic_expression_from_maxima_string(s, equals_sub=True) 458 return Sequence(v, universe=Objects(), cr_str=True) 459 /home/vbraun/opt/sage-5.5.rc0/local/lib/python2.7/site-packages/sage/calculus/calculus.pyc in symbolic_expression_from_maxima_string(x, equals_sub, maxima) 1789 return symbolic_expression_from_string(s, syms, accept_sequence=True) 1790 except SyntaxError: -> 1791 raise TypeError, "unable to make sense of Maxima expression '%s' in Sage"%s 1792 finally: 1793 is_simplified = False TypeError: unable to make sense of Maxima expression '[If(and(-pi/2<parg(-r),-pi/2<parg(r),parg(-r)<==pi/2,parg(r)<==pi/2,-r*sqrt(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1))!=0,sqrt(r^2*(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1))+r^2*cos(theta)^2+tan(psi)^2*r^2*(1-cos(theta))*(cos(theta)+1)/(tan(psi)^2+1))!=0),[x==-r*sqrt(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1)),y==-tan(psi)*r*sqrt(1-cos(theta))*sqrt(cos(theta)+1)/sqrt(tan(psi)^2+1),z==-r*cos(theta)],union()),If(and(-pi/2<parg(-r),-pi/2<parg(r),parg(-r)<==pi/2,parg(r)<==pi/2,r*sqrt(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1))!=0,sqrt(r^2*(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1))+r^2*cos(theta)^2+tan(psi)^2*r^2*(1-cos(theta))*(cos(theta)+1)/(tan(psi)^2+1))!=0),[x==r*sqrt(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1)),y==tan(psi)*r*sqrt(1-cos(theta))*sqrt(cos(theta)+1)/sqrt(tan(psi)^2+1),z==-r*cos(theta)],union()),If(and(-pi/2<parg(r),parg(r)<==pi/2,-r*sqrt(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1))!=0,sqrt(r^2*(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1))+r^2*cos(theta)^2+tan(psi)^2*r^2*(1-cos(theta))*(cos(theta)+1)/(tan(psi)^2+1))!=0),[x==-r*sqrt(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1)),y==-tan(psi)*r*sqrt(1-cos(theta))*sqrt(cos(theta)+1)/sqrt(tan(psi)^2+1),z==r*cos(theta)],union()),If(and(-pi/2<parg(r),parg(r)<==pi/2,r*sqrt(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1))!=0,sqrt(r^2*(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1))+r^2*cos(theta)^2+tan(psi)^2*r^2*(1-cos(theta))*(cos(theta)+1)/(tan(psi)^2+1))!=0),[x==r*sqrt(1/(tan(psi)^2+1)-cos(theta)^2/(tan(psi)^2+1)),y==tan(psi)*r*sqrt(1-cos(theta))*sqrt(cos(theta)+1)/sqrt(tan(psi)^2+1),z==r*cos(theta)],union())]' in Sage
See also https://groups.google.com/forum/?hl=en#!topic/sage-devel/3JhTyHooxQw
Change History (9)
comment:1 Changed 8 years ago by
comment:2 Changed 8 years ago by
- Milestone changed from sage-5.11 to sage-5.12
comment:3 Changed 7 years ago by
- Milestone changed from sage-6.1 to sage-6.2
comment:4 Changed 7 years ago by
- Milestone changed from sage-6.2 to sage-6.3
comment:5 Changed 7 years ago by
- Milestone changed from sage-6.3 to sage-6.4
comment:6 Changed 6 years ago by
Related to #16653, i.e. maybe output a list of pairs (condition, result).
comment:7 Changed 4 years ago by
- Description modified (diff)
- Milestone changed from sage-6.4 to sage-8.2
- Summary changed from maxima solve output parser insufficient to Translate maxima's if() function to Sage's cases()
comment:8 Changed 4 years ago by
- Cc mforets added
comment:9 Changed 3 years ago by
Another example at #24800:
var('r2 si co r12 r22 r32 d32') eq1 = r12==r2*d32*(1-si*(co+sqrt(3*(1-co*co)))/2)/2 eq2 = r22==r2*d32*(1-si*(co-sqrt(3*(1-co*co)))/2)/2 eq3 = r32==r2*d32*(1+si*co)/2 solve([eq1,eq2,eq3],r2,si,co)
HT to rws for noticing that was a dup.
Note: See
TracTickets for help on using
tickets.
Just for the record, it's objecting to the "if". The "in Sage" is just what we append. Also, the "union" in the spot they're in will not get properly parsed, though we do handle that in certain easy circumstances. I feel like we may already have a ticket for this, even, but it's not going to be easy to fix unless we bring in our own "if", and I don't know that we want to do that.