Hello! I always have the same problem, and I don't know why it doesn't work on my computer; I have sage.4.0.2 installed.
--> 44 sage_stuff = sage_eval(string,locals= {'E':'E','x':'x','y':'y'}) 45 return sage_stuff 46 /usr/local/src/sage-4.0.2/local/lib/python2.5/site-packages/sage/misc/ sage_eval.pyc in sage_eval(source, locals, cmds, preparse) 197 return locals['_sage_eval_returnval_'] 198 else: --> 199 return eval(source, sage.all.__dict__, locals) 200 201 /usr/local/src/sage-4.0.1/local/lib/python2.5/site-packages/sage/ all.pyc in <module>() TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'str' On 15 août, 15:06, thelamecamel <thelameca...@gmail.com> wrote: > Hi Viny, > > The following works for me: > > def mmatosage(mma_list): > # Convert the mathematica object to a string > string = repr(mma_list) > # Convert mathematica-style {} to python style [] > string = string.replace('{','[').replace('}',']') > # Replace mathematica's crazy exponent notation with the standard > # one e.g. 6.05*^3 ==> 6.05e3 > string = string.replace('*^', 'e') > # Delete new lines (both \n and \r\n appear sporadically) > string = string.replace('\n', ' ').replace('\r', ' ') > sage_stuff = sage_eval(string,locals = {'E':E,'x':x,'y':y}) > return sage_stuff > > sage: var('E') > sage: var('x') > sage: var('y') > sage: mma_list = mathematica("{((1 + E^x^2)*x)/(1 + E^x^2 + > 2*E^x^2*x^2), ((-1 + E^y^2)*y)/(-1 + E^y^2 + 2*E^y^2*y^2)}") > sage: arr = mmatosage(mma_list) > sage: print arr > [(E^(x^2) + 1)*x/(2*E^(x^2)*x^2 + E^(x^2) + 1), (E^(y^2) - 1)*y/(2*E^ > (y^2)*y^2 + E^(y^2) - 1)] > sage: print "1st element:", arr[0] > 1st element: (E^(x^2) + 1)*x/(2*E^(x^2)*x^2 + E^(x^2) + 1) > > This seems to do what you want. It seems to be the best way to import > symbolics from mathematica. I hope that Sage will eventually do the > var() and locals={} bits automatically when you call mma_list.sage(), > but in the meantime we can do it the dirty way. > > I'd be happy to help out with the implementation of this method, but > I've only ever hacked together my code, and so don't really know > anything about how to contribute. > > Cheers, > Felix > > On Aug 15, 8:45 pm, Viny <hje...@hotmail.com> wrote: > > > Hello everybody! > > > Thanks for your help. > > I'm realizing that i'm definitely really bad in sage, perhaps i'll be > > best in another life!!lol! > > This is a piece of a code for changing a symbolic mathematica list > > expression to a sage list expression: > > > def mmatosage(mma_list): > > # Convert the mathematica object to a string > > string = repr(mma_list) > > # Convert mathematica-style {} to python style [] > > string = string.replace('{','[').replace('}',']') > > # Replace mathematica's crazy exponent notation with the standard > > one > > string = string.replace('^', '**') > > # Delete new lines (both \n and \r\n appear sporadically) > > string = string.replace('\n', ' ').replace('\r', ' ') > > sage_stuff = sage_eval(string,locals = > > {'E':'E','x':'x','y':'y'},preparse=False,) > > return sage_stuff > > > I get the folowing error when I apply it to this mathematica > > expression {((1 + E^x^2)*x)/(1 + E^x^2 + 2*E^x^2*x^2), > > ((-1 + E^y^2)*y)/(-1 + E^y^2 + 2*E^y^2*y^2)} > > > ---> 41 sage_stuff = sage_eval(string,locals = > > {'E':'E','x':'x','y':'y'},preparse=False) > > 42 return sage_stuff > > > /usr/local/src/sage-4.0.2/local/lib/python2.5/site-packages/sage/misc/ > > sage_eval.pyc in sage_eval(source, locals, cmds, preparse) > > 197 return locals['_sage_eval_returnval_'] > > 198 else: > > --> 199 return eval(source, sage.all.__dict__, locals) > > 200 > > 201 > > > /usr/local/src/sage-4.0.2/local/lib/python2.5/site-packages/sage/ > > all.pyc in <module>() > > > TypeError: unsupported operand type(s) for ** or pow(): 'str' and > > 'int' > > > I have any idea. > > > Thankx for your help! > > > On 15 août, 03:09, Marshall Hampton <hampto...@gmail.com> wrote: > > > > Oh right, sorry. I always do that and then remember after the syntax > > > error... > > > > On Aug 14, 6:35 pm, William Stein <wst...@gmail.com> wrote: > > > > > On Fri, Aug 14, 2009 at 4:32 PM, Marshall Hampton<hampto...@gmail.com> > > > > wrote: > > > > > > You probably have to pass in the "dx" as a local variable, i.e. do > > > > > something like > > > > > > sage_stuff = sage_eval(expr, locals = {'dx' = 'dx'}) > > > > > It's {'dx':'dx'} or something like that. Definitely not 'dx' = 'dx'. > > > > > > where expr is your mathematica expression. > > > > > > -Marshall Hampton > > > > > > On Aug 14, 1:49 pm, Viny <hje...@hotmail.com> wrote: > > > > >> Thanks for your help Felix, with your ideas i made progresses. But > > > > >> the > > > > >> problem isn't fixe yet. Since i have some symbolic variable such 'dx' > > > > >> in my expressions, the > > > > >> code's line --> 500 return eval(string, {'I': numpy.complex(0,1)}) > > > > >> generate this folowing error > > > > >> NameError: name 'dx' is not defined > > > > >> Even when i put in the begining of my function var ("dx"), the > > > > >> problem > > > > >> stay. > > > > > >> Thanks again > > > > > >> On 14 août, 04:04, thelamecamel <thelameca...@gmail.com> wrote: > > > > > >> > Hi Viny, > > > > > >> > Sage's mathematica support at present seems to be geared towards > > > > >> > sending data to mathematica and printing the results to the screen, > > > > >> > rather than getting mathematica's results back into sage for data > > > > >> > manipulation. So the going may be a little rough. > > > > > >> > Sage can convert its own arrays into mathematica's notation, e.g. > > > > >> > Jason's example > > > > >> > sage: b=mathematica([1,2,3]) > > > > >> > will create a mathematica variable representing the array {1,2,3}, > > > > >> > accessible from sage. I'm not sure whether you can send > > > > >> > mathematica > > > > >> > more complicated things such as functions in this fashion. > > > > > >> > Once you've got your variables into mathematica, you perform > > > > >> > mathematica functions on them like so: > > > > >> > sage: x = mathematica(1) > > > > >> > sage: mathematica.eval('myfunc[x_,y_]:=x+y') > > > > >> > sage: x.myfunc(2) > > > > >> > 3 > > > > > >> > It's hard to get your mathematica results back into sage for use. > > > > >> > As > > > > >> > Jason noted below, mathematica arrays with {} don't get converted > > > > >> > back > > > > >> > into sage arrays with []. There is a ticket related to the array > > > > >> > problem <http://trac.sagemath.org/sage_trac/ticket/4948>, but there > > > > >> > seems to be no progress on it. > > > > > >> > I gave up and rolled my own mathematica list to numpy array > > > > >> > conversion > > > > >> > - you might find it useful. I believe that using eval() is frowned > > > > >> > upon for security reasons. If you want sage arrays rather than > > > > >> > numpy > > > > >> > arrays, then use sage_eval() (which is considerably slower for > > > > >> > large > > > > >> > arrays) and strip out the numpy stuff. Comments on the below code > > > > >> > are > > > > >> > welcome. > > > > > >> > import numpy > > > > >> > import re > > > > >> > def mma_to_numpy(mma_arr): > > > > >> > """Convert mathematica array to numpy array.""" > > > > >> > # Convert the mathematica object to a string > > > > >> > string = repr(mma_arr) > > > > >> > # Convert mathematica-style {} to python style [] > > > > >> > string = string.replace('{','[').replace('}',']') > > > > >> > # Replace mathematica's crazy exponent notation with the > > > > >> > standard > > > > >> > one > > > > >> > string = string.replace('*^', 'e') > > > > >> > # Delete new lines (both \n and \r\n appear sporadically) > > > > >> > string = string.replace('\n', ' ').replace('\r', ' ') > > > > >> > # Detect characters that should not be in an array > > > > >> > if re.findall(r'[a-df-zA-HJ-Z]+', string) != []: > > > > >> > raise TypeError, "Mathematica returns non-array: %s" % > > > > >> > string > > > > >> > # Read the string into numpy, interpreting I as j > > > > >> > return eval(string, {'I': numpy.complex(0,1)}) > > > > > >> > You use it as such: > > > > >> > sage: b = mathematica([1.5,2.+3.j,3]) > > > > >> > sage: b > > > > >> > {1.5, 2. + 3.*I, 3} > > > > >> > sage: numpy.array(mma_to_numpy(b), dtype='D') > > > > >> > array([ 1.5+0.j, 2.0+3.j, 3.0+0.j]) > > > > > >> > Hope that this helps - there isn't much documentation on this > > > > >> > stuff. > > > > > >> > Cheers, > > > > >> > Felix > > > > > >> > On Aug 13, 8:26 pm, Viny <hje...@hotmail.com> wrote: > > > > > >> > > On 13 août, 10:47, Viny <hje...@hotmail.com> wrote: > > > > > >> > > > Hi, > > > > > >> > > > I have a problem of memory into maxima when it performs a > > > > >> > > > symbolic > > > > >> > > > expression of an hessian matrix. This symbolic expression of > > > > >> > > > the > > > > >> > > > hessian seems to be too big. My sage program is written using > > > > >> > > > python. > > > > >> > > > And i want to compute the hessian matrix with mathematica 6.0 > > > > >> > > > in my > > > > >> > > > sage file. > > > > >> > > > I need to compute symbolic expresstion of the gradient and the > > > > >> > > > hessian > > > > >> > > > with mathematica and after compute the mathématica LinearSolve > > > > >> > > > function to solve hessian^-1*grad. > > > > >> > > > How to make this interface in my .sage? > > > > >> > > > Please help me!!! > > > > > >> > > > I have mathematica 6.0 and sage4.0.2 in my linux 64bit system. > > > > > >> > > This is an example of the function to compute the gradient in > > > > >> > > my .sage, but it doesn't work. > > > > >> > > def grad(f,v): > > > > >> > > return mathematica ( f ).D( [ ' v ',1] ) > > > > >> > > The result is {0,0} . I have another problem of format, i don't > > > > >> > > know > > > > >> > > the command to change { } in () in the mathematica result {0,0} > > > > > -- > > > > William Stein > > > > Associate Professor of Mathematics > > > > University of Washingtonhttp://wstein.org --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-support@googlegroups.com To unsubscribe from this group, send email to sage-support-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-support URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---