On Thu, Jan 14, 2010 at 6:59 PM, Patrick Maupin <[email protected]> wrote: > Many years ago, in a universe far, far away, for a different employer, > I wrote a specialized symbolic algebra system in Python. I need > something similar now, and am casting about to try to figure out how > hard it would be to tweak code from sympy or sympycore (or please feel > free to suggest other packages) to do what I need, or if I should just > write it all again. > > Basically, I don't need (or want) real numbers or transcendental > functions or derivatives or any sort of fancy stuff like that. I need > and want integers only, in the standard way that C and many other > computer and hardware languages deal with them. This means that I > need simple algebra, bitwise operators, and logic operations. > > In my world, (2X + 6) / 4 is not at all the same as X/2 + 3/2. > > But it is the same as (X+1) / 2 + 1, and ideally should have the same > canonical representation. > > In my world, x && 3 can only evaluate to two possible answers, while x > & 3 can evaluate to four possible answers. Likewise, x | 3 can > evaluate to (ideally, an infinite number of answers, but in reality, > and to quote Carl Sagan,) billions and billions of possible answers, > but there is only one answer for x || 3. > > Some other things to consider: > > (x - 5) && (23 * y) is equivalent to (x != 5) * (y != 0) > > (x - 5) || (23 * y) is equivalent to ((x != 5) + (y != 0)) != 0 > > x ? y : z (or in new-fangled Python, y if x else z) is equivalent > to (x!=0) * y + (x==0) * z > > If memory serves, when I wrote a library like this before (almost a > decade ago when I was a Python newbie), it was just a few hundred > lines of code. I've only looked at the sympy code a little, and > don't yet have a good understanding of where I would add this or how > large it would be to add -- the tradeoff of how much reuse I would > gain from the existing sympy code vs. the mental effort of learning > the system. > > Any guidance on this would be greatly appreciated.
As a start, I would take sympy symbol and sympy integer (or create your own classes for that if you don't want to depend on sympy) and then implement all the operations above, like & and && that would create an instance of a class representing that operation and then you need some .eval() methods that would evaluate it. I guess there are other approaches too, but that's what I would do. Ondrej
-- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
