Hello Bill,

> There is very a little documentation available in Sage about how the
> conversion from Sage internal format to some external format (such as
> used when calling Axiom). This happens automatically when you write
> something like
>
>  sage:  axiom(x^2+1)
>
> without including the 'quotes'. In this case Sage parses the expression
>
>  x^2+1
>
> and creates a native polynomial object. Then the 'axiom' function must
> now recursively process this Sage expression until it finds objects
> and operations near the bottom of the tree that it knows how to
> interpret as Axiom objects and operations. Most of the coding that
> accomplishes this is outside of the 'axiom.py' interface itself,
> distributed over several other Python classes. As far as I know
> William Stein is still the best source for how this conversion works.
> He has said that "really it is very simple" and I guess I do
> understand parts of it, but you should expect to spend some time to
> re-discover how it works sufficiently well in order to improve it.

I don't think the interfaces are as much "magic" as you make them out
to be.  If you're interested in converting object from Sage to
Axiom/FriCAS, then there are really only two methods you need to worry
about -- _axiom_ and _axiom_init_.  _axiom_init_ method just returns a
string used to construct self in Axiom.  For example, say we have

class Foo(SageObject):
    def __init__(self, n):
        self.n = int(n)
    def _axiom_init_(self):
        return str(self.n)

Then I can do

sage: a = Foo(2); a
<class '__main__.Foo'>
sage: axiom(a)
2
sage: axiom(a).type()
PositiveInteger

For more compilcated things, the _axiom_ method takes in an Axiom
interface object and returns self constructed in Axiom.

class Foo(SageObject):
    def __init__(self, n):
        self.n = int(n)
    def _axiom_(self, axiom):
        return axiom(str(self.n))

This behaves the same as above.

The Macualay2 interface in sage/interfaces/macaulay2.py has some good
examples of moving objects back and forth between systems.

Anyway, I did some work on the Axiom interface today such as
doctesting it, removing broken code, adding tab completion, etc.  You
can see my changes at http://trac.sagemath.org/sage_trac/ticket/4028 .
 Things like the online help didn't work with either the fricas spkg
or just on a local copy, but I'd be more than happy to help adding
that functionality (as well as anything else).

--Mike

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to