Le langage d’implémentation de la base de Sage est le langage Python (voir [Py]), même si le code qui doit s’exécuter rapidement est écrit dans un langage compilé. Python présente plusieurs avantages :
Certains aspects mathématiques de Python peuvent induire des confusions. Aussi, Sage se comporte différemment de Python à plusieurs égards.
Notation de l’exponentiation : ** au lieu de ^. En Python, ^ désigne le “xor” (ou exclusif bit à bit) et non l’exponentiation. Ainsi en Python, on a
>>> 2^8
10
>>> 3^2
1
>>> 3**2
9
Cette utilisation de ^ peut paraître étrange et surtout inefficace pour une utilisation purement mathématique puisque le ou exclusif n’est que rarement utilisé. Par commodité, Sage prétraite chaque ligne de commande avant de la transmettre à Python, en remplaçant par exemple les apparitions de ^ (en-dehors des chaînes de caractères) par des **:
sage: 2^8
256
sage: 3^2
9
sage: "3^2"
'3^2'
Le ou exclusif bit à bit est quant à lui noté ``^^``, et l'opération en
place ``^^=`` fonctionne comme on s'y attend :
::
sage: 3^^2
1
sage: a = 2
sage: a ^^= 8
sage: a
10
Division entière : L’expression Python 2/3 ne se comporte pas de la manière à laquelle s’attendraient des mathématiciens. En Python, si m et n sont de type int, alors m/n est aussi de type int, c’est le quotient entier de m par n. Par conséquent, 2/3=0. Il y a eu dans la communauté Python des débats sur une éventuelle modification du langage de sorte que 2/3 renvoie un flottant 0.6666... et que ce soit 2//3 qui renvoie 0.
Dans l’interpréteur Sage, nous réglons cela en encapsulant automatiquement les entiers litéraux par Integer( ) et en faisant de la division un constructeur pour les nombres rationnels. Par exemple :
sage: 2/3
2/3
sage: (2/3).parent()
Rational Field
sage: 2//3
0
sage: int(2)/int(3)
0
Entiers longs : Python possède nativement un support pour les entiers de précision arbitraire, en plus des int du langage C. Les entiers longs Python sont significativement plus lents que ceux que GMP fournit et sont marqués à l’affichage par un L qui les distingue des int (il est pas prévu de changer cela à court terme). Sage implémente les entiers en précision arbitraire en utilisant la bibliothèque C GMP. Les entiers longs GMP utilisés par Sage s’affichent sans le L.
Plutôt que de modifier l’interpréteur Python (comme l’ont fait certaines personnes pour leurs projets internes), nous utilisons le langage Python exactement comme il est et rajoutons un pré-parseur pour IPython de sorte que la ligne de commande de IPython se comporte comme l’attend un mathématicien. Ceci signifie que tout code Python existant peut être utilisé sous Sage. Toutefois, il faut toujours respecter les règles standards de Python lorsque l’on écrit des packages à importer dans Sage.
(Pour installer une bibliothèque Python, trouvée sur Internet par exemple, suivez les instructions mais exécutez sage -python au lieu de python. La plupart du temps, ceci signifie concrètement qu’il faut taper sage -python setup.py install.)
Si vous souhaitez contribuer au developpement de Sage, votre aide sera grandement appréciée ! Cela peut aller de contributions substantielles en code au signalement de bogues en passant par l’enrichissement de la documentation.
Parcourez la page web de Sage pour y trouver les informations pour les développeurs. Entre autres choses, vous trouverez une longue liste de projets en lien avec Sage rangés par priorité et catégorie. Le Guide du développeur Sage (Sage Developer’s Guide) contient également des informations utiles. Vous pouvez aussi faire un tour sur le groupe Google sage-devel.
Si vous écrivez un article qui utilise Sage, merci d’y préciser les calculs faits avec Sage en citant
[SAGE], SAGE Mathematical Software, Version 4.3, http://www.sagemath.org
dans votre bibliographie (en remplaçant 4.3 par la version de Sage que vous avez utilisée). De plus, pensez à rechercher les composants de Sage que vous avez utilisés pour vos calculs, par exemple PARI, GAP, Singular, Maxima et citez également ces systèmes. Si vous vous demandez quel logiciel votre calcul utilise, n’hésitez pas à poser la question sur le groupe Google sage-devel. Voir Polynômes univariés pour une discussion plus approfondie de ce point.
Si vous venez de lire d’une traite ce tutoriel et que vous avez une idée du temps qu’il vous a fallu pour le parcourir, merci de nous le faire savoir sur le groupe Google sage-devel.
Amusez-vous bien avec Sage !