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.
groups.misc.Braid(4)
Braid group on 4 strands
EllipticCurve_from_j(2024)
Elliptic Curve defined by y^2 = x^3 - x^2 - 3120*x - 24616 over Rational Field
ClusterAlgebra(['A',3])
A Cluster Algebra with cluster variables x0, x1, x2 and no coefficients over Integer Ring
simplicial_complexes.Sphere(4)
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
?
ClusterSeed?
- Pour voir le code d'une commande, terminer la ligne par
??
CombinatorialFreeModule??
- Très utile pour découvrir des choses, la complétion automatique (touche
TAB
) :
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
QQ.category()
Join of Category of number fields and Category of quotient fields and Category of metric spaces
Algebras(RR).Commutative()
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
parent(π)
Symbolic Ring
parent(bernoulli(12))
Rational Field
parent(Multizeta(1,2))
Algebra of motivic multiple zeta values indexed by compositions over Rational Field
parent(PolynomialRing(QQ,'y').gen())
Univariate Polynomial Ring in y over Rational Field
- et enfin des éléments, qui sont grosso modo des éléments dans des ensembles
ZZ.random_element()
0
W = CoxeterGroup(['B',2]); W.some_elements()
[ [-1 a] [ 1 0] [1 0] [ 1 -a] [ 0 1], [ a -1], [0 1], [ a -1] ]
QQbar.random_element()
-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 :
x = libgap(4)
x+x
8
type(x+x)
<class 'sage.libs.gap.element.GapElement_Integer'>
(x+x).sage()
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.
miaou := 4
Cell In[97], line 1 miaou := Integer(4) ^ SyntaxError: invalid syntax
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(...)?