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.


Reply via email to