Le lundi 27 avril 2015 08:59:38 UTC+2, Loïc Gouarin a écrit :
>
>
>
> Le dimanche 26 avril 2015 21:03:02 UTC+2, Aaron Meurer a écrit :
>>
>> On Sun, Apr 26, 2015 at 12:27 AM, Loïc Gouarin <[email protected]> 
>> wrote: 
>> > Hi, 
>> > 
>> > I would like to parse a string expression like that 
>> > 
>> > from sympy.parsing.sympy_parser import parse_expr 
>> > parse_expr("m[0][0]") 
>> > 
>> > But I have an error with 'Symbol' object does not support indexing. 
>> > 
>> > If I do 
>> > 
>> > sympy.Symbol("m[0][0]") 
>> > 
>> > everything is ok. 
>> > 
>> > I try to write my own transformation funtion that takes the "m[x][y]" 
>> and 
>> > creates a Symbol and add it to the standard_transformations in 
>> parse_expr 
>> > but the problem is still the same because the problem is in auto_symbol 
>> and 
>> > it parses again my string 'm[x][y]'. 
>>
>> Does it work if you transform it literally to sympy.Symbol("m[0][0]")? 
>>
>> Hi Aaron,
>  
> your solution is almost what I want. There is no error in the parse_exp 
> but I have in the result Symbol("m[x][y]") and not m[x][y]. I know thatit 
>  is the same but I parse again the result and I need m[x][y]. 
>
> Is there an easy way to have on the ouput m[x][y] and not 
> Symbol("m[x][y]") ?
>
>  
Ok I found my error. My transformation was incorrect. I wrote

from sympy.parsing.sympy_parser import parse_expr, standard_transformations

def auto_moments(tokens, local_dict, global_dict):
    result = []
    i = 0
    while(i < len(tokens)):
        tokNum, tokVal = tokens[i]
        if tokVal == 'm':
            name = ''.join([val for n, val in tokens[i:i+7]])
            result.append((tokNum, 'Symbol("{0}")'.format(name)))

            i += 7
        else:
            result.append(tokens[i])
            i += 1
    return result

s = parse_expr("m[0][0]", transformations=(auto_moments,) + 
standard_transformations)



The result was 

Symbol("m[0][0]")

But if I write 

from sympy.parsing.sympy_parser import parse_expr, standard_transformations

def auto_moments(tokens, local_dict, global_dict):
    result = []
    i = 0
    while(i < len(tokens)):
        tokNum, tokVal = tokens[i]
        if tokVal == 'm':
            name = ''.join([val for n, val in tokens[i:i+7]])
            result.extend([(1, 'Symbol'), (51, '('), (3, "'{0}'".format(name
)), (51, ')')])
            i += 7

        else:
            result.append(tokens[i])
            i += 1
    return result

s = parse_expr("m[0][0]", transformations=(auto_moments,) + 
standard_transformations)
print s

Now it is ok. I have

m[0][0]

Thanks,
Loic

Thanks,
> Loic 
>
> Aaron Meurer 
>>
>> > 
>> > Could you tell me how I can do that ? 
>> > 
>> > Thanks, 
>> > Loic 
>> > 
>> > -- 
>> > 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 http://groups.google.com/group/sympy. 
>> > To view this discussion on the web visit 
>> > 
>> https://groups.google.com/d/msgid/sympy/b23973b8-0d28-4bf4-b863-404af71458d9%40googlegroups.com.
>>  
>>
>> > For more options, visit https://groups.google.com/d/optout. 
>>
>

-- 
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 http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/101f36c7-77c8-4acf-acc6-ac93e475e8ad%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to