Mathics 7.0 – alternativa open source ao Mathematica
(github.com/Mathics3)- O Mathics Core 7.0.0 reorganiza o motor principal do sistema de computação open source compatível com o Mathematica e prepara a base para o futuro carregamento preguiçoso de funções internas
- Novas funções internas, como
ComplexExpand,ConjugateTransposeeLeviCivitaTensor, adicionam recursos relacionados a expressões, álgebra linear e identificação de valores reais - Lacunas de compatibilidade existentes foram preenchidas, incluindo
Range[],DirectedInfinity,Indeterminate, exibição de erros emGraphicse alteração de$CharacterEncoding - O carregamento de funções internas deixa de depender de imports implícitos e passa a chamar explicitamente
import_and_load_builtins() - Inclui suporte a Python 3.11 e SymPy 1.12, além de correções relacionadas a
Quantity,SparseArray,Derivative,Exit[]eBaseForm
Direção da release e reorganização interna
- O Mathics Core 7.0.0 inclui uma reorganização da estrutura interna para dar suporte, no futuro, ao carregamento preguiçoso de funções internas
- O código e o estilo em Python foram modernizados, mais anotações de tipo foram adicionadas e vários erros de ortografia foram corrigidos
- As dependências de SymPy e Python foram atualizadas para versões mais recentes
- Também foi realizado trabalho para acelerar o carregamento inicial e reduzir o uso inicial de memória
Novas funções internas
- As funções internas adicionadas nesta release são as seguintes
$MaxLengthIntStringConversionElementsComplexExpandConjugateTransposeLeviCivitaTensorRealAbs,RealSignRealValuedNumberQ
Melhorias na documentação e na geração de testes
- Vários problemas de formatação na documentação em PDF foram corrigidos
- O espaçamento entre números de seção foi aumentado no sumário de capítulos e seções
- As margens ao redor das definições de funções internas foram aumentadas
- Erros de ortografia em toda a documentação foram revisados
- O código de execução de doctests e de geração de documentação LaTeX foi revisado e refatorado
- Permite atualizações incrementais de funções internas
- Foi reorganizado para reduzir código duplicado
- Em “Expression Structure”, foi adicionada a nova seção Section Head-Related Operations
- O título do PDF mudou de Mathics para Mathics3, e o texto introdutório também foi atualizado
- Doctests antigos, ocultos e sem finalidade educativa, foram convertidos para pytest
Compatibilidade e mudanças de comportamento visíveis ao usuário
*Plotnão exibe mensagens durante a avaliaçãoRange[]passa a lidar comdinegativo- PR relacionado: #951
- O suporte a
DirectedInfinityeIndeterminatefoi aprimorado GraphicseGraphics3Dsão exibidos com fundo rosa quando contêm um primitive ou uma directive inválidos- Na interface Mathics-Django, também é exibida uma mensagem de erro em tooltip
$CharacterEncodingpode ter seu valor alterado dentro da sessão
Implementação interna e mudanças de API
- Em
AbseSign,eval_abseeval_signforam separados e adicionados amathics.eval.arithmetic - O número máximo de dígitos permitido em uma string foi definido como 7000
- Em ambientes como pyston, nos quais o Python não ajusta isso automaticamente, é possível ajustar com a variável de ambiente
MATHICS_MAX_STR_DIGITS
- Em ambientes como pyston, nos quais o Python não ajusta isso automaticamente, é possível ajustar com a variável de ambiente
- A implementação de comparação de reais passa a entrar internamente na implementação de
RealSign - No Python 3.11,
$MaxLengthIntStringConversioncontrola o tamanho máximo de conversões literais entre inteiros grandes e strings - O carregamento de código interno deixou de ser implícito e passou a ser feito por instrução explícita
- A mudança prepara o caminho para o carregamento preguiçoso de funções internas ou para um “autoload” no estilo do GNU Emacs
- Na nova API, é preciso chamar explicitamente
import_and_load_builtins()- Antes, o momento de carregamento das funções internas era implícito e indefinido, dependendo da ordem dos imports
- Foi adicionado cache LRU ao
mpmath
Correções de bugs em Quantity, SparseArray e outros
Definitionsagora é compatível com pickle- O suporte a expressões
Quantityfoi aprimorado- Inclui conversão, formatação e operações aritméticas
- A opção
BackgrounddeGraphicseGraphics3Dvoltou a funcionar - Foi corrigido um problema de comparação numérica em expressões contendo
String- Issue relacionada: #797
- Foi corrigido um problema de
Switch[]contendoInfinity- Issue relacionada: #956
- Foi corrigido um problema de
Outer[]comSparseArray- Issue relacionada: #939
ArrayQ[]passa a detectarSparseArray- PR relacionado: #947
- A exceção
BoxExpressionErroragora é tratada - Foi corrigido o comportamento de
Derivativeao avaliarTrue,FalseeList[] - Inclui correções no pacote
Combinatorica - O
Exit[], que não funcionava, foi corrigido BaseFormfoi incluído em$OutputForms
Versões de pacotes suportadas
- Suporta Python 3.11
- Suporta SymPy 1.12
1 comentários
Opiniões no Hacker News
Acompanho este projeto há alguns anos e ele vem evoluindo bem de forma constante. Se você se interessa por sistemas de álgebra computacional open source, há muitas soluções mais maduras, desde opções clássicas como GNU Octave ou Maxima até opções modernas como SAGEmath, Symbolics.jl e sympy
O espectro vai de bibliotecas de computação simbólica como GiNaC até IDEs com tudo incluído, como SAGEmath, e as comunidades são ativas. Por exemplo, acho que o SAGEmath praticamente desbravou a interface de notebooks na web, que acabou levando às várias formas de Jupyter de hoje
Pessoalmente, gosto do estilo meio Lisp do Mathematica (MMA), mas o que torna o MMA poderoso não é apenas o núcleo, e sim sua enorme biblioteca. Em temas básicos como integração simbólica, gráficos 2D/3D e método dos elementos finitos, há soluções de nível líder do setor, além de muitos domínios especializados, como bioinformática
O Mathics parece ter feito um bom trabalho ao replicar o núcleo, mas naturalmente faltam todas essas bibliotecas. A mesma lógica vale ao comparar Matlab e seus vários “toolkits” com clones de numpy, embora o fluxo do Python agora tenha trazido para o mundo numpy muito código novo que não roda no Matlab
Quando apareceu pela primeira vez, uns 5 anos atrás, pensei: “o motor de avaliação simbólica ficou muito bem feito; agora vamos ver no que dá”. Sempre que eu tiver vontade de começar um projeto novo daqui para frente, vou tentar lembrar deste exemplo de continuar refinando um projeto antigo
Eles são complementares e muitas vezes usados em conjunto. Mathematica e Mathics parecem dar suporte aos dois paradigmas, mas não são a mesma coisa
Parece ser baseado em sympy: https://www.sympy.org/en/index.html
Se você só quer para uso pessoal, o Wolfram Cloud pode ser usado de graça. Parece que os arquivos são apagados depois de uns 30 dias. O Wolfram Engine também é uma forma gratuita de usar Mathematica pela linha de comando. Bem, é melhor do que nada
Há uma introdução mais simples ao Mathics aqui:
https://mathics.org/
Por algum motivo, tenho a impressão de que isso vai acabar sendo integrado ao SageMath :D
Um dos motivos de o SageMath ser o maior projeto em Cython é justamente que o Cython permite ao Sage aproveitar bibliotecas C/C++ rápidas
O Mathics atualmente não parece se preocupar seriamente com desempenho. Por exemplo, basta rodar um pequeno microbenchmark no Mathics como
"AbsoluteTiming[Sum[i, {i, 1, 100000}]]"ou ler o roadmapClaro, isso não tem problema. A linguagem de programação do Mathematica tem muitos usos interessantes em que desempenho não é importante, como acompanhar cuidadosamente, passo a passo, alguma manipulação simbólica junto com a expressão
Mas a principal motivação dos desenvolvedores do Sage é matemática de pesquisa de ponta, e nela o desempenho quase sempre é muito importante. Desempenho também é a razão pela qual o Sage implementa diretamente muitas funcionalidades parecidas em vez de simplesmente usar sympy. O sympy prioriza facilidade de instalação e, por isso, pode ser relativamente lento; no SageMath, facilidade de instalação não é prioridade nenhuma
A missão do SageMath é ser uma alternativa viável ao Mathematica, Matlab, Magma e Maple, mas isso nunca significou ser um clone. Por exemplo, não quer dizer executar código do Mathematica diretamente, e sim oferecer uma alternativa capaz de apoiar, sobre software matemático open source, pesquisas que de outra forma seriam feitas nesses programas de código fechado
Engenheiros de software fazem qualquer coisa para não pagar custos de software
O Mathematica é oferecido gratuitamente no Raspberry Pi[1], e a maioria das universidades tem licença para todo o campus. A licença “Home & Hobby” também não é tão cara: a assinatura custa US$ 195 por ano, a licença perpétua custa US$ 390, e a renovação sai por apenas US$ 175[2]
Sinceramente, se alguém tem interesse em tinkering, mas não consegue bancar esse preço, também não é difícil encontrar ou instalar uma versão crackeada
Pessoalmente, gosto bastante do Mathematica — mais precisamente da “Wolfram Language” — e fico satisfeito em pagar pela licença para uso como hobby. Não só acho que vale o dinheiro, como também vejo apoiar software matemático como uma “boa causa” digna de receber meu dinheiro
Além disso, é comum fotógrafos amadores gastarem com ferramentas como o Adobe CC mais do que muitos programadores gastam com todo o seu conjunto de ferramentas, e não entendo por quê. O mesmo vale para hesitar diante de uma licença de US$ 200–400 enquanto se gasta US$ 20–40 ou mais por mês em vários serviços de assinatura
No meu caso, porém, passo mais tempo no Mathematica do que em praticamente qualquer outro programa instalado no meu computador
Ainda assim, software matemático open source continua tendo um papel importante. O Mathematica é, em geral, abrangente, mas ainda tem grandes lacunas em matemática avançada
Em especial, há dois motivos para ser difícil acreditar que ele vá atender até as áreas mais “de nicho” da matemática. Primeiro, quanto mais avançada ou obscura é a área, mais o retorno sobre o investimento cai drasticamente. Segundo, a Wolfram Language já tem mais de 6.000 funções embutidas, então não faz muito sentido acrescentar mais centenas delas para oferecer suporte abrangente a áreas como teoria dos grupos
Isso poderia ser suportado por pacotes, mas, sem suporte de primeira classe no kernel, há um custo de desempenho; e, como o usuário precisa ir atrás deles deliberadamente, também há um custo de usabilidade
Por isso, softwares open source como GAP, M2 e PARI/GP têm um papel importante em preencher as lacunas da Wolfram Language. No meu caso, contribuo para projetos FOSS tanto quanto gasto com a licença do Mathematica. Em projetos nos quais contribuir financeiramente não é simples, tento ajudar a melhorá-los com tempo e conhecimento técnico
Sinceramente, não tenho muito interesse em projetos que tentam replicar os recursos do Mathematica. Claro que esses projetos continuarão sendo desenvolvidos e melhorados e, no mínimo, podem pressionar a Wolfram Research a continuar melhorando os recursos básicos. Mas, para um projeto desses alcançar o Mathematica/WL de hoje, provavelmente levaria uns 10 a 20 anos
[1]: https://www.wolfram.com/raspberry-pi/
[2]: https://www.wolfram.com/mathematica/pricing/home-hobby/
O notebook integrado, a documentação por mouse over e, surpreendentemente, um único namespace gigantesco com milhares de funções se combinam, de alguma forma, para oferecer uma experiência simples e produtiva diferente de tudo que já usei. E isso mesmo eu normalmente não sendo fã de IDEs “pesadas”
Uma das coisas irritantes no Mathematica é que todas as funções são enfiadas no mesmo namespace, e não há sobrecarga conforme diferentes opções de parametrização
A grande duplicação que me vem à mente é mais a das várias funções Plot