Now I see a solution: forget the function and create the expression exp 
using string manipulation and exec, something like
strExp = 'complex string'
strSym = 'exp = ' + strExp
exec(strSym)

On Wednesday, November 4, 2020 at 9:51:35 AM UTC+1 Thomas Ligon wrote:

> Thanks!
> The automatic subscript is just a minor irritation, and your response is 
> helpful.
> I have included a new test program that hopefully no longer oversimplifies 
> the situation. Currently, I have code (2000 lines) for investigating a very 
> complex series, and it runs to a maximum of 3 terms of the series, 
> requiring index values up to 6. I showed the results to the mathematics 
> professor who has mentored my work and he immediately says that it is 
> valuable and I should publish a version that can go up to a very large 
> number of terms. In order to do that, I need to produce a fully automated 
> version with a variable number of terms and indices.
> So, for variable j, I want to use a_j in a formula.
> The expression exp on line 20 does that, where I use get_a(1) to represent 
> aj for variable j, where j happens to be 1.
> In line 5, the return is part of a function. In line 8, I expect return in 
> exec ('return...') to be a part of a function.
>
> maxIndex = 2
> import sympy
> from sympy import symbols, latex
> def get_a1():
>     return a1
> def get_a2():
>     strSym = 'return a2'
>     exec(strSym)
> def get_a (j):
>     strSym = 'return a' + str(j)
>     exec(strSym)
> lam = symbols('\\lambda')
> for ind in range(1,maxIndex+1):
>     strSym = 'a' + str(ind) + ' = symbols(\'a_' + str(ind) + '\')'
>     exec(strSym)
> #a1 = symbols('a_1')
> #a2 = symbols('a_2')
> print(latex(get_a1()))
> #print(latex(get_a2())) # causes 'return' outside function (<string>, line 
> 1)
> exp = 3*get_a(1) + 5*get_a(2)*lam**2 # causes 'return' outside function 
> (<string>, line 1)
> print(latex(exp))
> print('end testSym')
>
> On Tuesday, November 3, 2020 at 11:29:00 PM UTC+1 [email protected] wrote:
>
>> I'm unclear what you're trying to achieve with the functions. exec() 
>> takes a string of Python code and executes it. The entire string must 
>> be valid Python code by itself, so exec('return x') fails because a 
>> bare "return x" is not valid Python. "return" must be inside a 
>> function definition to be valid. But even defSym1 doesn't do anything 
>> useful beyond just returning Sym1, so there's no point to having it 
>> instead of just "Sym1" directly. 
>>
>> The LaTeX version of Sym1 contains _ because SymPy automatically 
>> assumes that symbol names ending in numbers are subscripted, so it 
>> renders it as a Sym_1 in LaTeX. If you don't want the 1 to be 
>> subscripted, you can use something like Symbol("{Sym1}"). 
>>
>> Aaron Meurer 
>>
>> On Tue, Nov 3, 2020 at 9:42 AM Thomas Ligon <[email protected]> wrote: 
>> > 
>> > The following code is not working as I expected. 
>> > Why does Sym1 contain an underline (_{1})? 
>> > Why does return fail (unhandled exception) in line 7? 
>> > 
>> > Code: 
>> > import sympy 
>> > from sympy import symbols, latex 
>> > def defSym1(): 
>> > return Sym1 
>> > def defSym2(): 
>> > strSym = 'return Sym2' 
>> > exec(strSym) 
>> > Sym1 = symbols('Sym1') 
>> > Sym2 = symbols('Sym2') 
>> > print(latex(defSym1())) 
>> > print(latex(defSym2())) 
>> > print('end testSym') 
>> > 
>> > Output: 
>> > Sym_{1} 
>> > 'return' outside function (<string>, line 1) 
>> > 
>> > 
>> > 
>> > 
>> > -- 
>> > 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 view this discussion on the web visit 
>> https://groups.google.com/d/msgid/sympy/4a1df466-d3a3-4f7b-8a14-5e5a906f2662n%40googlegroups.com.
>>  
>>
>>
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/00d00ac2-7b0c-4ac1-b81a-dcc9f7956572n%40googlegroups.com.

Reply via email to