Ask Your Question
0

sympy codegen with indices

asked 13 years ago

Shashank gravatar image

I am doing a symbolic calculation in sage and I need a C-code of the output. I found an example in sympy documentation that does this.

from sympy import symbols
from sympy.utilities.codegen import codegen
from sympy.abc import x, y, z
[(c_name, c_code), (h_name, c_header)] = \
codegen(("f", x+y*z), "C", "test", header=False, empty=False)
print c_code,

However, this does not work when the variables I am passing to f have indices for example,

from sympy import symbols
from sympy.utilities.codegen import codegen
from sympy.abc import x[0], x[1], x[2]
[(c_name, c_code), (h_name, c_header)] = \
codegen(("f", x[0]+x[1]*x[2]), "C", "test", header=False, empty=False)
print c_code,

This results in an error. Is there a way to generate a C-code with indices in them?

Preview: (hide)

1 Answer

Sort by » oldest newest most voted
0

answered 13 years ago

Shashank gravatar image

Found the solution. We have to explicitly define index

from sympy.tensor import IndexedBase, Idx
from sympy import symbols
n,m = symbols('n m', integer=True)
A = IndexedBase('A')
x = IndexedBase('x')
y = IndexedBase('y')
i = Idx('i', m)
j = Idx('j', n)

codegen(('matrix_vector', Eq(y[i], A[i, j]*x[j])), "C","file", header=False, empty=False)
Preview: (hide)
link

Comments

To get your 'answer code to work I need: 'from sympy.utilities.codegen import codegen' and 'from sympy import Eq'

rtrwalker gravatar imagertrwalker ( 12 years ago )

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: 13 years ago

Seen: 1,216 times

Last updated: Jan 28 '12