Opened 12 years ago
Last modified 8 years ago
#10169 new defect
Operands and Operator of symbolic expressions
Reported by: | Simon King | Owned by: | Burcin Erocal |
---|---|---|---|
Priority: | major | Milestone: | sage-6.4 |
Component: | symbolics | Keywords: | operator operands symbolics |
Cc: | Eviatar Bach | Merged in: | |
Authors: | Reviewers: | ||
Report Upstream: | N/A | Work issues: | |
Branch: | Commit: | ||
Dependencies: | Stopgaps: |
Description (last modified by )
I think that for all symbolic expression s
should hold
sage: s == s.operator()(*s.operands())
That currently does not work, for two reasons.
- There may be no operator at all:
sage: print x.operator() None sage: x.operands() []
I believe there should instead be an identity operator.
- The list of operands may be longer than what the operator accepts:
sage: s = 0.001*x^2+0.01*x+0.1*sin(1.01*x)+1 sage: s.operands() [0.00100000000000000*x^2, 0.0100000000000000*x, 0.100000000000000*sin(1.01000000000000*x), 1] sage: s.operator()(*s.operands()) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /home/king/<ipython console> in <module>() TypeError: op_add expected 2 arguments, got 4
Compare this thread at sage-devel.
Change History (10)
comment:1 Changed 12 years ago by
Milestone: | → sage-4.6 |
---|
comment:2 Changed 12 years ago by
Description: | modified (diff) |
---|
comment:3 Changed 9 years ago by
Cc: | Eviatar Bach added |
---|
comment:4 Changed 9 years ago by
comment:5 Changed 9 years ago by
Burcin, is there a problem with setting the sum operator to Expression.add
, for example? I don't understand why we have to define new functions representing the arithmetic operators.
comment:6 Changed 9 years ago by
Milestone: | sage-5.11 → sage-5.12 |
---|
comment:7 Changed 9 years ago by
Milestone: | sage-6.1 → sage-6.2 |
---|
comment:8 Changed 9 years ago by
Milestone: | sage-6.2 → sage-6.3 |
---|
comment:9 Changed 8 years ago by
Milestone: | sage-6.3 → sage-6.4 |
---|
comment:10 Changed 8 years ago by
This will not work with some symbolic functions because they may have been called with the hold=True
keyword, and calling them again doesn't know about it. See also #17849. The solution of that ticket in line with this one would be to make keywords into operands (strings?, a dedicated class OperatorKeyword
?).
Another possible solution would be to abandon the hold
keyword and introduce a hold
context, see #10035.
Note to self: after this is fixed (or at least just the arithmetic operators),
simplify_hypergeometric
should be added tosimplify_full
. Now it cannot be added because it will sometimes raise errors due to this bug.