Une petite présentation de Sage (Sagemath)¶

C'est quoi ?

Un logiciel de calcul formel parmi d'autres.

Certains sont commerciaux : Maple™ , Mathematica™ , Magma™ , etc.

Certains sont des logiciels libres : GAP, Macaulay2, Singular, Sympy, Oscar, Fricas, Maxima, etc.

Site web : https://www.sagemath.org/

Sage est un logiciel libre et open-source¶

Avantages : rien à payer, possibilité de vérifier toute partie du code source et de contribuer à améliorer

Inconvénients : peu de ressources financières, modèle de développement un peu anarchique

Sage, c'est du python !¶

Donc facile si vous connaissez déjà ce language de programmation 🐍.

Avec un petite surcouche qui transforme notamment les entiers python en entiers Sage ; un peu troublante au début.

Beaucoup de fonctionnalités¶

dans de nombreux domaines : géométrie, combinatoire, algèbre, arithmétique, etc.

Voici un tout petit échantillon.

In [66]:
groups.misc.Braid(4)
Out[66]:
Braid group on 4 strands
In [67]:
EllipticCurve_from_j(2024)
Out[67]:
Elliptic Curve defined by y^2 = x^3 - x^2 - 3120*x - 24616 over Rational Field
In [68]:
ClusterAlgebra(['A',3])
Out[68]:
A Cluster Algebra with cluster variables x0, x1, x2 and no coefficients over Integer Ring
In [69]:
simplicial_complexes.Sphere(4)
Out[69]:
Minimal triangulation of the 4-sphere

Comment essayer Sage¶

En ligne, plusieurs options :

  • la plus simple https://sagecell.sagemath.org (pour de petits calculs),
  • par mathrice https://jupytercloud.math.cnrs.fr/sites/ (si vous êtes en France),
  • par le service commercial Cocalc™ (https://cocalc.com/).

Pour installer sage sur son ordinateur, les instructions à jour sont sur https://doc.sagemath.org/html/en/installation/index.html .

Disponible sur Linux, MacOs™, Windows™.

Comment utiliser Sage¶

Deux manières de travailler :

  • soit dans des carnets (notebook) Jupyter directement. Joli, mais limité
  • soit en mode console en écrivant des fichiers .py pour stocker les fonctions. Mieux pour du travail avancé.

Le format de fichier .sage est comme du.py, mais avec passage par une petite moulinette (surcouche). Un peu comme les roulettes latérales sur les vélos d'enfant.

Documentation, aide¶

  • Documentation en ligne (assez touffue) sur https://doc.sagemath.org/ .
  • Pour débuter, un petit 📝 Memo
  • Documentation directement dans un carnet Jupyter ou la console, en terminant une commande par ?
In [ ]:
ClusterSeed?
  • Pour voir le code d'une commande, terminer la ligne par ??
In [ ]:
CombinatorialFreeModule??
  • Très utile pour découvrir des choses, la complétion automatique (touche TAB) :
In [ ]:
Modul (appuyer sur TAB)
  • Un site web pour demander de l'aide : https://ask.sagemath.org/questions/ .

Catégories, parents et elements¶

Dans Sage, beaucoup de choses sont organisées comme suit :

  • des catégories, presque au sens mathématique, par exemple
In [74]:
QQ.category()
Out[74]:
Join of Category of number fields and Category of quotient fields and Category of metric spaces
In [75]:
Algebras(RR).Commutative()
Out[75]:
Category of commutative algebras over Real Field with 53 bits of precision
  • des parents, ce qui signifie grosso modo des ensembles appartenant à une catégorie, typiquement des anneaux
In [85]:
parent(π)
Out[85]:
Symbolic Ring
In [86]:
parent(bernoulli(12))
Out[86]:
Rational Field
In [87]:
parent(Multizeta(1,2))
Out[87]:
Algebra of motivic multiple zeta values indexed by compositions over Rational Field
In [88]:
parent(PolynomialRing(QQ,'y').gen())
Out[88]:
Univariate Polynomial Ring in y over Rational Field
  • et enfin des éléments, qui sont grosso modo des éléments dans des ensembles
In [89]:
ZZ.random_element()
Out[89]:
0
In [90]:
W = CoxeterGroup(['B',2]); W.some_elements()
Out[90]:
[
[-1  a]  [ 1  0]  [1 0]  [ 1 -a]
[ 0  1], [ a -1], [0 1], [ a -1]
]
In [91]:
QQbar.random_element()
Out[91]:
-0.50000000000000000? - 0.866025403784439?*I

Interfaces avec d'autres logiciels¶

Sage utilise en interne plusieurs logiciels et bibliothèques libres, dont flint, GAP, maxima, singular, etc

Sage est capable d'échanger avec GAP, Fricas et autres par conversion dans les deux sens :

In [62]:
x = libgap(4)
In [63]:
x+x
Out[63]:
8
In [64]:
type(x+x)
Out[64]:
<class 'sage.libs.gap.element.GapElement_Integer'>
In [65]:
(x+x).sage()
Out[65]:
8

Utiliser, contribuer, signaler des bugues¶

Le développement se passe sur Github™ : https://github.com/sagemath/sage .

De nombreux contributeurs du monde entier participent.

C'est le bon endroit pour signaler un bugue (bien vérifier dans la dernière version de Sage avant).

Pour contribuer plus sérieusement (pas facile) :

(0) avoir un compte sur Github™ et savoir se servir de git,

(1) fourcher le dépot sagemath/sage,

(2) cloner le dépot sagemath/sage et y ajouter le lien vers sa fourche.

Python de base¶

  • Python est un language orienté-objet. Les objets ont des méthodes.
texte = "un exemple"
texte.capitalize()
  • Python utilise l'indentation des lignes (4 espaces) pour distinguer les blocs de code.
for i in range(8):
    print(i)
print("Fini")
  • Les indices commencent à zero.

Programmation¶

Un exemple typique de fonction dans Sage :

@cached_function
def mon_produit(x, y):
    """
    Return the product.

    EXAMPLES::

        sage: mon_produit(3, 4)
        19
    """
    return x * y + x + y

La ligne @cached_function est un décorateur ; celui-ci stocke en mémoire les résultats.

Le texte entre les """ est la documentation. C'est utile d'y mettre des exemples.

Ensuite, le code proprement dit.

Comprendre une erreur¶

Lorsqu'on se trompe, Python affiche une longue succession de textes, pour aider à comprendre l'erreur. La plus importante est à la fin.

In [97]:
miaou := 4
  Cell In[97], line 1
    miaou := Integer(4)
          ^
SyntaxError: invalid syntax
In [100]:
print "non,no,nein,niet"
  Cell In[100], line 1
    print "non,no,nein,niet"
    ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?