# SageMath

O SageMath (anteriormente Sage e SAGE, acrónimo em inglês para Sistema Algébrico e Geométrico de Experimentações) é um software de matemática que possui recursos que abrangem muitas áreas, incluindo álgebra, combinatória, análise numérica, teoria dos números e cálculo.
A primeira versão do SageMath foi lançada em 24 de fevereiro de 2005 como um software livre e de código aberto, nos termos da GNU General Public License, com o objectivo de criar uma "alternativa de código aberto a outros programas, como o Magma (sistema algébrico computacional), Maple, Mathematica e MATLAB".
O SageMath utiliza a linguagem de programação Python, suportando programações procedural, funcional e de orientação a objetos.

## Características

Entre as características do SageMath, estão:
* Uma interface gráfica para revisão e reutilização de entradas e saídas anteriores, incluindo gráficos e anotações de texto. Compatível com os navegadores Firefox, Opera, Konqueror e Safari. Os cadernos podem ser acessados localmente ou remotamente, e a conexão pode ser assegurada com HTTPS.
* Um interpretador de comandos baseado em texto usando IPython.
* Computação paralela, usando processadores multinúcleo, multiprocessamento simétrico e computação distribuída.
* Cálculo, usando Maxima e SymPy.
* Álgebra linear numérica, usando GNU Scientific Library, SciPy e NumPy.
* Bibliotecas de funções elementares e especiais.
* Gráficos 2D e 3D de funções simbólicas e dados numéricos.
* Manipulação de matrizes, incluindo matrizes esparsas.
* Bibliotecas de estatísticas multivariáveis, usando R e SciPy.
* Uma caixa de ferramentas para acrescentar interfaces do utilizador a cálculos e aplicações.
* Ferramentas para o processamento de imagens, usando pylab e Python.
* Ferramentas para visualizar e analisar gráficos.
* Bibliotecas para funções de teoria dos números.
* Filtros para importação e exportação de dados, imagens, vídeo, áudio, CAD e GIS.
* Suporte para números complexos, aritmética de precisão arbitrária e matemática simbólica, sempre que isto for apropriado.
* MoinMoin como um sistema Wiki, para gestão do conhecimento.
* Documentação, usando Sphinx.
* Interface para alguns softwares proprietários, como o Mathematica, Magma (sistema algébrico computacional) e Maple.

## Desenvolvimento

William Stein percebeu, ao projectar o SageMath, que já havia muitos softwares de código aberto escritos em diferentes linguagens de programação, a saber, C, C++, Common Lisp, Fortran e Python.
Ao invés de reinventar a roda, o SageMath (que é escrito principalmente em Python e Cython) integra vários softwares de matemática em uma interface comum, para que um utilizador necessite saber apenas Python. Tanto estudantes quanto profissionais auxiliam no desenvolvimento do SageMath. O desenvolvimento do SageMath é mantido por trabalhos voluntários e doações.

### Histórico de lançamentos

Apenas os maiores lançamentos estão listados abaixo. O Sage segue o conceito "liberação rápida e frequente", lançando novas versões com diferença de poucas semanas ou meses. No total, houve mais de 300 novas versões lançadas, embora a frequência de atualizações tenha diminuído.
| Versão | Data de lançamento | Descrição |
| 0.1 | Janeiro de 2005 | Inclui PARI, mas não GAP ou Singular |
| 0.2 - 0.4 | Março a Julho de 2005 | Banco de dados do Cremona, polinômios multivariados, campos finitos grandes e mais documentação |
| 0.5 - 0.7 | Agosto e Setembro de 2005 | Espaços vectoriais, anéis, símbolos modulares e janelas de utilização |
| 0.8 | Outubro de 2005 | Distribuição completa do GAP, Singular |
| 0.9 | Novembro de 2005 | Maxima e clisp adicionados |
| 1.0 | Fevereiro de 2006 | |
| 2.0 | Janeiro de 2007 | |
| 3.0 | Abril de 2008 | |
| 4.0 | Maio de 2009 | |
| 5.0 | Maio de 2012 | |
| 6.0 | Dezembro de 2013 | Desenvolvimento movido para o Git |
| 7.0 | Janeiro de 2016 | Melhorias na interface gráfica |
| 8.0 | Julho de 2017 | |
| 9.0 | Janeiro de 2020 | Conversão para Python 3 |

## Conquistas

Em 2007, o SageMath ganhou o primeiro prémio na divisão de software científico do Les Trophées du Libre, uma competição internacional para software livre.
O SageMath também já foi citado em várias publicações.

## Licença e disponibilidade

O SageMath é software livre, distribuído sob os termos da GNU General Public License, versão 3. O programa está disponível de várias maneiras:
* Pode-se descarregar binários para Linux, OS X e Solaris (sistema operacional) (x86 e SPARC).
* Um live CD contendo o sistema operacional inicializável Linux também está disponível. Isto permite a utilização do SageMath sem a instalação do Linux.
Embora a Microsoft estivesse patrocinando uma versão nativa do SageMath para o sistema operacional Windows, até 2012 não havia planos para o desenvolvimento de uma versão nativa, e os utilizadores do Windows têm actualmente que utilizar máquinas virtuais, como o VirtualBox, para poderem executar o SageMath. As distribuições Linux em que o SageMath está disponível como um pacote são Ubuntu, Debian, Fedora, Arch Linux e NixOS. O SageMath pode ser instalado em qualquer distribuição Linux.

## Pacotes de software contidos no SageMath

A filosofia do SageMath é a utilização de bibliotecas de softwares de código aberto, onde quer que existam. Por isso, utiliza muitas bibliotecas de outros projectos.
Pacotes de matemática contidos no SageMath :
| Álgebra | GAP, Maxima, Singular, Macaulay 2 |
| Geometria algébrica | Singular, Macaulay 2 |
| Aritmética de precisão arbitrária | MPIR, MPFR, MPFI, NTL, mpmath |
| Geometria aritmética | PARI/GP, NTL, mwrank, ecm |
| Cálculo | Maxima, SymPy, GiNaC |
| Combinatória | Symmetrica, Sage-Combinat |
| Álgebra linear | ATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL |
| Teoria dos gráficos | NetworkX |
| Teoria dos grupos | GAP |
| Computação numérica | GSL, SciPy, NumPy, ATLAS, Scilab, GNU Octave |
| Teoria dos números | PARI/GP, FLINT, NTL, Kash/Kant |
| Computação estatística | R, SciPy |
Outros pacotes contidos no SageMath :
| Shell da linha de comando | IPython |
| Banco de dados | ZODB, Python pickles, SQLite |
| Configuração do tipo de matemática | LaTeX |
| Interface gráfica | Sage Notebook, jsmath |
| Gráficos | Matplotlib, Tachyon3d, GD, Jmol |
| Linguagem de programação interativa | Python |
| Rede | Twisted |