Try this:

sage: P.<a,b,c> = QQ[]
sage: s = "2*a*b + c"
sage: eval(s)
2*a*b + c
sage: del a         
sage: del b
sage: del c
sage: eval(s)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)

/home/malb/<ipython console> in <module>()

/home/malb/<string> in <module>()

NameError: name 'a' is not defined

sage: eval(s,P.gens_dict())
2*a*b + c

See eval? about which parameters it accepts (globals and locals for global and 
local variables)

On Wednesday 12 Sep 2012, François Boulier wrote:
> Hi,
> 
> I am posting again, for 5.3, the message I posted for 5.2
> 
> I am developing a sage package which relies on a C library. The C library
> returns expressions (polynomials) as strings.
> I am looking for a simple way to convert these strings as Sage objects.
> So far, I have been using expressions such as:
> 
>     eval (preparse (the_string))
> 
> It used to work in releases 4.7 and 4.8. Other users told me it worked in
> 5.1.
> Starting from 5.2, and now in 5.3, I am getting NameError(s) for the
> variables which occur in the strings.
> The same phenomenon is observed on at least two different platforms.
> It seems that, in a compiled code, the eval function does not recognize
> variables (the problem does not show up under the interpreter).
> 
> Did I miss a change of specification of eval ? Is this a bug ?
> Or am I using the wrong method ?
> 
> Here is a simplified function which produces the error:
> 
>     def toto (self, list L):
>         cdef bytes L_as_string
>         cdef list eqns
>         L_as_string = bytes(L)
>         eqns = eval (L_as_string)
>         return eqns
> 
> At runtime:
> 
> boulier@ciney:~$
> tmp/sage-5.3-linux-64bit-ubuntu_10.04.4_lts-x86_64-Linux/sage
> ----------------------------------------------------------------------
> 
> | Sage Version 5.3, Release Date: 2012-09-08                         |
> | Type "notebook()" for the browser-based notebook interface.        |
> | Type "help()" for help.                                            |
> 
> ----------------------------------------------------------------------
> Loading Sage library. Current Mercurial branch is: blad
> sage: from sage.libs.blad.DifferentialAlgebra import DifferentialRing
> sage: a,b = var ('a,b')
> sage: y = function ('y')
> sage: R = DifferentialRing (derivations = [a,b], blocks = [y])
> sage: R.toto ([a])
> ---------------------------------------------------------------------------
> NameError                                 Traceback (most recent call last)
> 
> /home/boulier/<ipython console> in <module>()
> 
> /home/boulier/tmp/sage-5.3-linux-64bit-ubuntu_10.04.4_lts-x86_64-Linux/loca
> l/lib/python2.7/site-packages/sage/libs/blad/DifferentialAlgebra.so in
> sage.libs.blad.DifferentialAlgebra.DifferentialRing.toto
> (sage/libs/blad/DifferentialAlgebra.c:8999)()
> 
> /home/boulier/tmp/sage-5.3-linux-64bit-ubuntu_10.04.4_lts-x86_64-Linux/loca
> l/lib/python2.7/site-packages/sage/libs/blad/DifferentialAlgebra.so in
> <module>()
> 
> NameError: name 'a' is not defined
> 
> All the best,
> François

Cheers,
Martin

--
name: Martin Albrecht
_pgp: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x8EF0DC99
_otr: 47F43D1A 5D68C36F 468BAEBA 640E8856 D7951CCF
_www: http://martinralbrecht.wordpress.com/
_jab: [email protected]

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
Visit this group at http://groups.google.com/group/sage-devel?hl=en.


Reply via email to