Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagelib
Path: blob/master/doc/en/reference/interfaces.rst
4033 views
.. _ch:interfaces:

Interpreter Interfaces
======================

Sage provides a unified interface to the best computational
software. This is accomplished using both C-libraries (see
:ref:`ch:libraries`) and interpreter interfaces, which are
implemented using pseudo-tty's, system files, etc. This chapter is
about these interpreter interfaces.

.. note::

    Each interface requires that the corresponding software is
    installed on your computer. Sage includes GAP, PARI, Singular, and
    Maxima, but does not include Octave (very easy to install), MAGMA
    (non-free), Maple (non-free), or Mathematica (non-free).


    There is overhead associated with each call to one of these
    systems. For example, computing ``2+2`` thousands of times using
    the GAP interface will be slower than doing it directly in
    Sage. In contrast, the C-library interfaces of :ref:`ch:libraries`
    incur less overhead.


In addition to the commands described for each of the interfaces
below, you can also type e.g., ``%gap``,
``%magma``, etc., to directly interact with a given
interface in its state. Alternatively, if ``X`` is an
interface object, typing ``X.interact()`` allows you to
interact with it. This is completely different than
``X.console()`` which starts a complete new copy of
whatever program ``X`` interacts with. Note that the
input for ``X.interact()`` is handled by Sage, so the
history buffer is the same as for Sage, tab completion is as for
Sage (unfortunately!), and input that spans multiple lines must be
indicated using a backslash at the end of each line. You can pull
data into an interactive session with ``X`` using
``sage(expression)``.

The console and interact methods of an interface do very different
things. For example, using gap as an example:


#. ``gap.console()``: You are completely using another
   program, e.g., gap/magma/gp Here Sage is serving as nothing more
   than a convenient program launcher, similar to bash.

#. ``gap.interact()``: This is a convenient way to
   interact with a running gap instance that may be "full of" Sage
   objects. You can import Sage objects into this gap (even from the
   interactive interface), etc.


The console function is very useful on occasion, since you get the
exact actual program available (especially useful for tab completion
and testing to make sure nothing funny is going on).

.. toctree::
   :maxdepth: 2

   sage/interfaces/expect
   sage/interfaces/axiom
   sage/interfaces/gap
   sage/interfaces/gap3
   sage/interfaces/gp
   sage/interfaces/gnuplot
   sage/interfaces/kash
   sage/interfaces/magma
   sage/interfaces/maple
   sage/interfaces/matlab
   sage/interfaces/maxima
   sage/interfaces/maxima_lib
   sage/interfaces/mathematica
   sage/interfaces/mwrank
   sage/interfaces/octave
   sage/interfaces/r
   sage/interfaces/sage0
   sage/interfaces/singular
   sage/interfaces/tachyon