Ask Your Question
2

Defining new operators

asked 2011-05-24 20:13:35 +0200

cory tobin gravatar image

updated 2011-05-25 01:37:09 +0200

Kelvin Li gravatar image

Is there a way to define new operators in sage? I'm familiar with working in Mathematica which allows you to create new operators (and palettes to easily access the operators) but I couldn't find any similar feature mentioned in the sage docs. I know Python doesn't allow new operators but I figured maybe the sage preparser fixes that.

Thanks!

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
2

answered 2011-05-24 21:31:59 +0200

The following is a pure Python solution to your operator question. I imagine there's a Sage specific solution that provides some speed benefits particularly with operating on Sage objects.

First, establishing some common ground. I assume by an operator you mean something like how $d/dx$ is an operator on differentiable functions. In the sense that if $L=d/dx$ then $L \cdot f = f'$. With this as an example, we start by creating a new Python class and overriding its __mul__() method.

class _dx:
    def __mul__(self, other):
        return other.derivative()

(A tiny class!) Of course, this operator will only work on objects that have a .derivative() method. After defining this class we can use it in Sage as follows:

sage: dx = _dx()
sage: var('x')
sage: f = sin(x) + x^2
sage: dx*f
cos(x) + 2*x

My guess is that there's a way to make a Singleton / class object sort of thing where you don't need the line "dx = _dx()". Unfortunately, I'm not sure how to go about doing that.

edit flag offensive delete link more

Comments

Thanks! That should suffice for my purposes.

cory tobin gravatar imagecory tobin ( 2011-05-24 21:52:58 +0200 )edit

No problem. I just thought of a more elegant approach where you could overwrite the __lmul__ and __rmul__ methods separately (left and right multiplication) so you could define "L = 2*dx" as a new operator once "dx" is defined as above. If you like I could write up an example, depending on your needs. A full list of overwritable class methods can be found here: http://docs.python.org/reference/datamodel.html

cswiercz gravatar imagecswiercz ( 2011-05-24 22:09:53 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2011-05-24 20:13:35 +0200

Seen: 1,367 times

Last updated: May 24 '11