A primeira linguagem de implementação do Sage é o Python (veja [Py]), embora rotinas que precisam ser muito rápidas são implementadas em uma linguagem compilada. O Python possui várias vantagens:
Alguns aspectos matemáticos do Python podem ser confusos, logo o Sage se comporta diferentemente do Python em diversas situações.
Notação para exponenciação: ** versus ^. Em Python, ^ significa “xor”, não exponenciação, logo em Python temos
>>> 2^8
10
>>> 3^2
1
>>> 3**2
9
Esse uso de ^ pode parecer estranho, e é ineficiente para pesquisa em matemática pura, pois a função “ou exclusivo” é raramente usada. Por conveniência, o Sage pre-processa todos as linhas de comandos antes de passá-las para o Python, substituindo ocorrências de ^ que não estão em strings por **:
sage: 2^8
256
sage: 3^2
9
sage: "3^2"
'3^2'
Divisão por inteiros: A expressão em Python 2/3 não se comporta da forma que um matemático esperaria. Em Python, se m e n são inteiros (int), então m/n também é um inteiro (int), a saber, o quociente de m dividido por n. Portanto 2/3=0. Tem havido discussões na comunidade do Python para modificar o Python de modo que 2/3 retorne um número de precisão flutuante (float) 0.6666..., e 2//3 retorne 0.
Nós lidamos com isso no interpretador Sage, encapsulando inteiros literais em Integer() e fazendo a divisão um construtor para números racionais. Por exemplo:
sage: 2/3
2/3
sage: (2/3).parent()
Rational Field
sage: 2//3
0
sage: int(2)/int(3)
0
Inteiros longos: O Python possui suporte nativo para inteiros com precisão arbitrária, além de int’s do C. Esses são significantemente mais lentos do que os fornecidos pela biblioteca GMP, e têm a propriedade que eles são impressos com o sufixo L para distingui-los de int’s (e isso não será modificado no futuro próximo). O Sage implementa inteiros com precisão arbitrária usando a biblioteca C do GMP, e esses são impressos sem o sufixo L.
Em vez de modificar o interpretador Python (como algumas pessoas fizeram para projetos internos), nós usamos a linguagem Python exatamente com ela é, e escrevemos um pré-processador para o IPython de modo que o comportamento da linha de comando seja o que um matemático espera. Isso significa que qualquer programa existente em Python pode ser usado no Sage. Todavia, deve-se obedecer as regras padrão do Python para escrever programas que serão importados no Sage.
(Para instalar uma biblioteca do Python, por exemplo uma que você tenha encontrado na internet, siga as instruções, mas execute sage -python em vez de python. Frequentemente isso significa digitar sage -python setup.py install.)
Se você quiser contribuir para o Sage, a sua ajuda será muito bem vinda! Ela pode variar desde substancial quantidade de código, até contribuições com respeito à documentação ou notificação de defeitos (bugs).
Explore a página na web do Sage para informações para desenvolvedores; entre outras coisas, você pode encontrar uma lista longa de projetos relacionados ao Sage ordenados por prioridade e categoria. O Guia para desenvolvedores do Sage (em inglês) também possui informações úteis, e você pode também visitar o grupo de discussões sage-devel no Google Groups.
Se você escrever um artigo usando o Sage, por favor faça referência aos cálculos feitos com o Sage incluindo
[Sage] William A. Stein et al., Sage Mathematics Software (Version 4.3).
The Sage Development Team, 2009, http://www.sagemath.org.
na sua bibliografia (substituindo 4.3 pela versão do Sage que você está usando). Além disso, procure observar quais componentes do Sage você está usando em seus cálculos, por exemplo, PARI, Singular, GAP, Maxima, e também site esses sistemas. Se você está em dúvida sobre qual software está sendo usado em seus cálculos, fique à vontade para perguntar no grupo sage-devel do Google Groups. Veja Polinômios em Uma Variável para mais discussões sobre esse aspecto.
Se por acaso você leu este tutorial do começo ao fim em uma só vez, e faz idéia de quanto tempo você levou, por favor nos informe no grupo sage-devel do Google Groups.
Divirta-se com o Sage!