Once again, atoms to the rescue.
```
y.atoms(IndexedBase)
```
will give you all IndexedBase object from an expression.


On Thursday, April 14, 2016 at 9:25:09 AM UTC+2, Nico Schlömer wrote:
>
> It seems that, unfortunately, the information of whether or not a variable 
> is an IndexedBase object is discarded when using it in an expression. Check
> ```
> from sympy import *
>
> u = IndexedBase('u')
> k = Symbol('k')
> y = u[k]
>
> print(isinstance(u, IndexedBase))
>
> for s in y.free_symbols:
>     print(s, isinstance(s, IndexedBase))
> ```
> Hm...
>
>
> On Thursday, April 14, 2016 at 8:59:46 AM UTC+2, Nico Schlömer wrote:
>>
>> From an object like `sin(u[k]) + u0[k]` I would like to get the 
>> corresponding C code as a string. Since `k` is a variable, I cannot use 
>> `MatrixSymbol`, but there's always `IndexedBase` of course. With
>> ```
>> u = IndexedBase('u')
>> u0 = IndexedBase('u0')
>> k = Symbol('k')
>> y = sin(u[k]) + u0[k]
>> ```
>> things are looking good, but then
>> ```
>> from sympy.utilities.codegen import codegen
>> [(c_name, c_code), (h_name, c_header)] = codegen(("f", y), "C")
>> ```
>> tells you
>> ```
>> sympy.tensor.indexed.IndexException: 
>> Range is not defined for all indices in: u[k]
>> ```
>> I could perhaps go through all `IndexedBase` instances in `y` and 
>> `.subs`titute them with a variable with the string `u[k]`, but that feels 
>> hackish.
>>
>> Any hints?
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/11189a50-d6fa-4daa-a722-2ce5d4f589a8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to