On Sun, 2005-01-09 at 20:45 +0200, Matti Peltomäki wrote:
Hi,
On Tue, 4 Jan 2005, Jonathan Brandmeyer wrote:
So have I, and I have support for a larger number of classes including
I find this project of your pretty interesting. I played around with it a little bit (was able to build it just fine etc.). However, I stumbled into a problem.
I wanted to check out the use of lsolve() inspired by check/exam_lsolve.cpp
See also bin/check_lsolve.py in the PyGiNaC source tree. It's basically a straight pythonization of the C++ code.
in GiNaC source tree. Namely, I try to solve 3*x+5==8 for x. Since both the equation and the answer are instances of relational, one has to access the rhs and lhs to extract the answer. Now, it seems that if another side of a relational is numeric, unwrap_ex() does not seem to be able to unwrap it properly, throwing the exception "Could not unwrap an ex of unknown type." This seems strange since unwrap_ex() throws this exception if the tinfo of the object does not match any one listed in ex.cpp (and TINFO_numeric is listed). This does not happen, if the numeric is a term in an add, for instance.
Is this something that I do wrong or what is going on in the relational?
Below is a short example showing what I did and which errors I got. I run python as './run python2.3' in the root of pyginac source tree after having succesfully built it with scons.
I've got basically (exactly?) the same configuration as you, but I get this result instead: Python 2.3.4 (#2, Dec 3 2004, 13:53:17) [GCC 3.3.5 (Debian 1:3.3.5-2)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
from ginac import * x = symbol('x') eq = 3*x+5 == 8 eq.lhs <cginac.add object at 0xb7e34dec> eq.rhs <cginac.numeric object at 0xb7de5614> answer = lsolve([eq], [x]) print answer [<cginac.relational object at 0xb7e39f2c>] print [str(x) for x in answer] ['x==1'] print answer[0].lhs x print answer[0].rhs 1
from ginac import *; x = symbol("x"); eq = ( 3*x + 5 == 8); eq.rhs[1] <cginac.numeric object at 0xb7dda4f4> print(eq.rhs[1]) 5
This is really weird. The only way you should be able to get this is if eq was defined to be 8 == 3*x + 5. What is the value of ginac.version?
eq.lhs Traceback (most recent call last): File "<stdin>", line 1, in ? RuntimeError: Could not unwrap an ex of unknown type. answer = lsolve([eq], [x]) answer [<cginac.relational object at 0xb7e43e3c>] answer[0].rhs <cginac.symbol object at 0xb7e3d8cc> print(answer[0].rhs) x answer[0].lhs Traceback (most recent call last): File "<stdin>", line 1, in ? RuntimeError: Could not unwrap an ex of unknown type.