Re: [sage-devel] Re: How does the ECL+Maxima combination work ?
Hi, Le 21/01/2015 17:49, Nils Bruin a écrit : On Wednesday, January 21, 2015 at 2:39:52 AM UTC-8, Snark wrote: Ah, ha! That helps. But, let's take the following code (extracted from src/sage/interfaces/maxima_lib.py) : from sage.libs.ecl import * ecl_eval("(require 'maxima)") ecl_eval("(in-package :maxima)") ecl_eval("#$load(abs_integrate)$") it gives me: RuntimeError: ECL says: THROW: The catch MACSYMA-QUIT is undefined. And obviously, maxima_lib.py doesn't suffer from this problem, because the code there executes quite frequently without this error. Apparently there is something different between what you do and what happens in maxima_lib.py. Indeed, there is more code in maxima_lib.py. Right below the (in-package :maxima) we have: (defvar *MAXIMA-LANG-SUBDIR* NIL) (set-locale-subdir) (set-pathnames) and then load works. Maxima needs more initialization than requiring the package. A large part of maxima was already written before the CL standard was made and before packages were introduced, so it has a lot of archaic bits to the code. It certainly was never designed to be used as a lisp library, so you need to jump through odd hoops to get it to work as such. It may also be possible that maxima does have a better initialization routine that has everything packaged in, but I wasn't able to find it (and reverse engineering what WAS needed took quite a bit of trial and error). Ah, ha! The "(set-pathnames)" was what I was missing. And sage-env sets an environment variable which gets used by that function to set the paths... Now I think I have the full picture ! Concerning the THROW: Maxima has its own error signalling mechanism that requires a guard on the stack to CATCH the THROWs. To put an appropriate catch in place, maxima_lib defines maxima-eval, which is hugely improved in: http://trac.sagemath.org/ticket/14308 I was fully expecting that ticket to be merged already, but apparently no-one cares about the issue there. It's still worth merging the much simpler implementation of maxima-eval, though. I won't promise I'll have a look very soon, but I've added it to my list of interesting things to do with sage. Thanks! Snark on #sagemath -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.
Re: [sage-devel] Re: How does the ECL+Maxima combination work ?
On Wednesday, January 21, 2015 at 2:39:52 AM UTC-8, Snark wrote: > > > Ah, ha! That helps. But, let's take the following code (extracted from > src/sage/interfaces/maxima_lib.py) : > > from sage.libs.ecl import * > > ecl_eval("(require 'maxima)") > ecl_eval("(in-package :maxima)") > ecl_eval("#$load(abs_integrate)$") > > it gives me: > RuntimeError: ECL says: THROW: The catch MACSYMA-QUIT is undefined. > And obviously, maxima_lib.py doesn't suffer from this problem, because the code there executes quite frequently without this error. Apparently there is something different between what you do and what happens in maxima_lib.py. Indeed, there is more code in maxima_lib.py. Right below the (in-package :maxima) we have: (defvar *MAXIMA-LANG-SUBDIR* NIL) (set-locale-subdir) (set-pathnames) and then load works. Maxima needs more initialization than requiring the package. A large part of maxima was already written before the CL standard was made and before packages were introduced, so it has a lot of archaic bits to the code. It certainly was never designed to be used as a lisp library, so you need to jump through odd hoops to get it to work as such. It may also be possible that maxima does have a better initialization routine that has everything packaged in, but I wasn't able to find it (and reverse engineering what WAS needed took quite a bit of trial and error). Concerning the THROW: Maxima has its own error signalling mechanism that requires a guard on the stack to CATCH the THROWs. To put an appropriate catch in place, maxima_lib defines maxima-eval, which is hugely improved in: http://trac.sagemath.org/ticket/14308 I was fully expecting that ticket to be merged already, but apparently no-one cares about the issue there. It's still worth merging the much simpler implementation of maxima-eval, though. -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.
Re: [sage-devel] Re: How does the ECL+Maxima combination work ?
Hi, Le 19/01/2015 17:38, Nils Bruin a écrit : On Monday, January 19, 2015 at 8:22:15 AM UTC-8, Dima Pasechnik wrote: On 2015-01-19, Julien Puydt > wrote: Hi, I wanted to play with maxima-in-ecl to understand how it works, but failed: from reading sage's sources I thought I was supposed to use a MEVAL function, but it failed. Here is what I did: jpuydt@cauchy:~/sage-6.4.1$ ./sage -ecl ECL (Embeddable Common-Lisp) 13.5.1 (git:UNKNOWN) Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya Copyright (C) 1993 Giuseppe Attardi Copyright (C) 2000 Juan J. Garcia-Ripoll ECL is free software, and you are welcome to redistribute it under certain conditions; see file 'Copyright' for details. Type :h for Help. Top level. (require 'maxima) ;;; Loading #P"/home/jpuydt/sage-6.4.1/local/lib/ecl/maxima.fas" ;;; Loading #P"/home/jpuydt/sage-6.4.1/local/lib/ecl/sb-bsd-sockets.fas" ;;; Loading #P"/home/jpuydt/sage-6.4.1/local/lib/ecl/sockets.fas" ("SB-BSD-SOCKETS" "SOCKETS" "MAXIMA") here you need to go into the right namespace, or whatever it is called: (in-package :maxima) (meval "2+2") but I don't know how to compute 2+2, still :-)) The maxima parser is available via the reader macro. Normally it will produce a form that evaluates too, but if you quote it, you can prevent that from happening: (require `maxima) [...] (in-package :maxima) MAXIMA> #$2+2$ 4 MAXIMA> '#$x+5$ (MEVAL* '((MPLUS) $X 5)) MAXIMA> (meval '((mplus) 2 2)) 4 Ah, ha! That helps. But, let's take the following code (extracted from src/sage/interfaces/maxima_lib.py) : from sage.libs.ecl import * ecl_eval("(require 'maxima)") ecl_eval("(in-package :maxima)") ecl_eval("#$load(abs_integrate)$") it gives me: RuntimeError: ECL says: THROW: The catch MACSYMA-QUIT is undefined. and if I type the same in sage -ecl: (require 'maxima) (in-package :maxima) #$load(abs_integrate)$ it also gives me the same error... So there's still something that eludes me in the ECL+Maxima pair... Snark in #sagemath -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.
Re: [sage-devel] Re: How does the ECL+Maxima combination work ?
Hi, Le 20/01/2015 16:54, rjf a écrit : I suggest that if you want to understand maxima, you start by using maxima, not sage. What I want to understand, is how sage uses maxima through ECL. How those work separately is interesting, but isn't the point. The link is what I'm focusing on. Thanks for your input, Snark on #sagemath -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.