- Mathics Core 7.0.0 réorganise le moteur central de ce système de calcul open source compatible avec Mathematica et prépare le terrain pour un futur chargement différé des fonctions intégrées
- De nouvelles fonctions intégrées comme
ComplexExpand,ConjugateTransposeetLeviCivitaTensorajoutent des capacités liées aux expressions, à l’algèbre linéaire et à l’identification des nombres réels - Des lacunes de compatibilité existantes sont comblées, notamment pour
Range[],DirectedInfinity,Indeterminate, l’affichage des erreurs dansGraphicset la modification de$CharacterEncoding - Le chargement des fonctions intégrées abandonne les dépendances d’import implicites au profit d’un appel explicite à
import_and_load_builtins() - La version inclut la prise en charge de Python 3.11 et SymPy 1.12, ainsi que des correctifs liés à
Quantity,SparseArray,Derivative,Exit[]etBaseForm
Orientation de la version et réorganisation interne
- Mathics Core 7.0.0 inclut une réorganisation interne destinée à prendre en charge à l’avenir le chargement différé des fonctions intégrées
- Le code Python et le style ont été modernisés, les annotations de types ont été renforcées, et plusieurs fautes d’orthographe ont été corrigées
- Les dépendances SymPy et Python ont été mises à jour vers des versions plus récentes
- Des travaux ont aussi été menés pour accélérer le chargement initial et réduire l’utilisation mémoire au démarrage
Nouvelles fonctions intégrées
- Les fonctions intégrées ajoutées dans cette version sont les suivantes
$MaxLengthIntStringConversionElementsComplexExpandConjugateTransposeLeviCivitaTensorRealAbs,RealSignRealValuedNumberQ
Améliorations de la documentation et de la génération des tests
- Plusieurs problèmes de mise en forme ont été corrigés dans la documentation PDF
- L’espacement des numéros de section a été augmenté dans les tables des matières des chapitres et sections
- Les marges autour des définitions de fonctions intégrées ont été augmentées
- Les fautes d’orthographe ont été corrigées dans l’ensemble de la documentation
- Le code d’exécution des doctests et de génération de la documentation LaTeX a été revu et refactorisé
- Il permet les mises à jour incrémentales des fonctions intégrées
- Il a été réorganisé afin de réduire le code dupliqué
- Une section Section Head-Related Operations a été ajoutée à « Expression Structure »
- Le titre du PDF est passé de Mathics à Mathics3, et le texte d’introduction a aussi été mis à jour
- Les anciens doctests non affichés et non pédagogiques ont été convertis vers pytest
Compatibilité et changements de comportement visibles par l’utilisateur
*Plotn’affiche pas de message pendant l’évaluationRange[]gère les valeurs négatives dedi- PR liée : #951
- La prise en charge de
DirectedInfinityetIndeterminatea été améliorée GraphicsetGraphics3Ds’affichent avec un fond rose lorsqu’ils contiennent une primitive ou une directive invalide- Dans l’interface Mathics-Django, un message d’erreur en info-bulle est également affiché
$CharacterEncodingpeut être modifié au sein d’une session
Implémentation interne et changements d’API
eval_abseteval_signont été séparés deAbsetSign, puis ajoutés àmathics.eval.arithmetic- Le nombre maximal de chiffres autorisé dans une chaîne est fixé à 7000
- Dans les environnements comme pyston où Python ne l’ajuste pas automatiquement, il peut être configuré avec la variable d’environnement
MATHICS_MAX_STR_DIGITS
- Dans les environnements comme pyston où Python ne l’ajuste pas automatiquement, il peut être configuré avec la variable d’environnement
- L’implémentation de la comparaison de réels s’appuie désormais en interne sur l’implémentation de
RealSign - Dans Python 3.11,
$MaxLengthIntStringConversioncontrôle la taille maximale des conversions littérales entre grands entiers et chaînes - Le chargement du code intégré passe d’un mécanisme implicite à un mécanisme à directive explicite
- Ce changement vise à rendre possible à l’avenir le chargement différé des fonctions intégrées, ou un mécanisme « autoload » similaire à celui de GNU Emacs
- La nouvelle API nécessite d’appeler explicitement
import_and_load_builtins()- Auparavant, le moment du chargement des fonctions intégrées dépendait implicitement de l’ordre des imports et restait indéterminé
- Un cache LRU a été ajouté à
mpmath
Corrections de bugs pour Quantity, SparseArray, etc.
Definitionsest compatible avec pickle- La prise en charge des expressions
Quantitya été améliorée- Cela inclut les conversions, la mise en forme et les opérations arithmétiques
- L’option
BackgrounddeGraphicsetGraphics3Dfonctionne à nouveau - Un problème de comparaison numérique sur les expressions contenant
Stringa été corrigé- Issue liée : #797
- Un problème avec
Switch[]contenantInfinitya été corrigé- Issue liée : #956
- Un problème avec
Outer[]surSparseArraya été corrigé- Issue liée : #939
ArrayQ[]détecte désormaisSparseArray- PR liée : #947
- L’exception
BoxExpressionErrorest gérée - Le comportement de
Derivativelors de l’évaluation deTrue,FalseetList[]a été corrigé - Des correctifs pour le package
Combinatoricasont inclus Exit[], qui ne fonctionnait pas, a été corrigéBaseFormest inclus dans$OutputForms
Versions de packages prises en charge
- Python 3.11 est pris en charge
- SymPy 1.12 est pris en charge
1 commentaires
Avis de Hacker News
Je suis ce projet depuis quelques années, et il progresse régulièrement dans la bonne direction. Si vous vous intéressez aux systèmes de calcul formel open source, il existe beaucoup de solutions plus mûres, depuis les choix classiques comme GNU Octave ou Maxima jusqu’aux options plus modernes comme SAGEmath, Symbolics.jl ou sympy.
Le spectre va des bibliothèques de calcul symbolique comme GiNaC jusqu’aux IDE « batteries incluses » comme SAGEmath, avec des communautés actives. Par exemple, on peut considérer que SAGEmath a pratiquement ouvert la voie aux interfaces de notebooks web, qui ont mené aujourd’hui aux nombreuses formes de Jupyter.
Personnellement, j’aime le style assez Lisp de Mathematica (MMA), mais ce qui rend MMA puissant, ce n’est pas seulement son cœur, c’est aussi son immense bibliothèque. Sur des sujets de base comme l’intégration symbolique, les graphiques 2D/3D ou la méthode des éléments finis, il propose des solutions parmi les meilleures du secteur, et il couvre aussi beaucoup de domaines spécialisés comme la bio-informatique.
Mathics semble avoir bien reproduit le cœur, mais il lui manque évidemment toutes ces bibliothèques. C’est le même raisonnement quand on compare Matlab et ses nombreux « toolkits » à un clone de numpy ; cela dit, l’écosystème Python a désormais amené dans le monde numpy beaucoup de nouveau code qui ne fonctionne pas sous Matlab.
Quand il est apparu il y a environ 5 ans, je m’étais dit : « le moteur d’évaluation symbolique est vraiment bien fait, voyons ce que ça donnera ». Chaque fois que j’aurai envie de lancer un nouveau projet, je devrais repenser à cet exemple de projet ancien qu’on continue à polir.
Ils sont complémentaires et souvent utilisés ensemble. Mathematica et Mathics semblent prendre en charge les deux paradigmes, mais ce n’est pas la même chose.
Ça a l’air basé sur sympy : https://www.sympy.org/en/index.html
Si c’est seulement pour un usage personnel, Wolfram Cloud est utilisable gratuitement. Les fichiers semblent être supprimés au bout d’une trentaine de jours. Wolfram Engine est aussi un moyen d’utiliser Mathematica gratuitement en ligne de commande. Enfin, c’est mieux que rien.
Une introduction plus simple à Mathics se trouve ici :
https://mathics.org/
Je ne sais pas pourquoi, mais j’ai l’impression que ça finira par être intégré à SageMath :D
L’une des raisons pour lesquelles SageMath est le plus gros projet Cython est justement que Cython permet à Sage d’exploiter des bibliothèques C/C++ rapides.
Mathics ne semble pas, pour l’instant, se préoccuper sérieusement des performances. Il suffit par exemple de lancer dans Mathics un petit microbenchmark comme
"AbsoluteTiming[Sum[i, {i, 1, 100000}]]", ou de lire sa feuille de route.Bien sûr, ce n’est pas un problème. Le langage de programmation de Mathematica a beaucoup d’applications intéressantes où la performance n’est pas essentielle, par exemple suivre soigneusement, étape par étape, certaines opérations symboliques avec leurs expressions.
Mais la motivation principale des développeurs de Sage est la recherche mathématique de pointe, où les performances sont presque toujours très importantes. C’est aussi pour cette raison que Sage n’utilise pas simplement sympy et réimplémente directement beaucoup de fonctionnalités similaires. sympy privilégie la facilité d’installation, ce qui peut le rendre relativement lent ; dans SageMath, la facilité d’installation n’est absolument pas une priorité.
La mission de SageMath est d’être une alternative viable à Mathematica, Matlab, Magma et Maple, mais cela n’a jamais voulu dire devenir un clone. Par exemple, il ne s’agit pas d’exécuter directement du code Mathematica, mais de proposer une alternative permettant de mener, sur des logiciels mathématiques open source, des recherches qui auraient autrement été faites avec ces programmes propriétaires.
Les ingénieurs logiciels feront n’importe quoi pour ne pas payer le coût du logiciel.
Mathematica est fourni gratuitement sur Raspberry Pi[1], et la plupart des universités disposent d’une licence couvrant tout le site. La licence « Home & Hobby » n’est pas si chère non plus : l’abonnement coûte 195 dollars par an, la licence perpétuelle 390 dollars, et le renouvellement seulement 175 dollars[2]
Honnêtement, pour quelqu’un qui s’intéresse au tinkering mais n’a pas les moyens de payer ce prix, une version crackée n’est ni difficile à trouver ni difficile à installer
Personnellement, j’aime beaucoup Mathematica, ou plus exactement le « Wolfram Language », et je suis content de payer une licence pour un usage hobby. Non seulement je pense que ça vaut son prix, mais je considère aussi que soutenir les logiciels mathématiques est une « bonne cause » qui mérite qu’on y consacre de l’argent
En plus, il est courant que des photographes amateurs dépensent pour des outils comme Adobe CC plus que ce que beaucoup de programmeurs dépensent pour l’ensemble de leurs outils, et je ne comprends pas pourquoi. C’est pareil quand on dépense 20 à 40 dollars par mois, voire plus, dans divers services par abonnement, mais qu’on hésite devant une licence à 200–400 dollars
Cela dit, dans mon cas, je passe plus de temps dans Mathematica que dans presque n’importe quel autre programme installé sur mon ordinateur
Malgré tout, les logiciels mathématiques open source ont toujours une place importante. Mathematica est globalement très complet, mais il présente encore de grosses lacunes en mathématiques avancées
Il y a notamment deux raisons pour lesquelles il est difficile de croire qu’il pourra couvrir des domaines mathématiques plus « de niche ». Premièrement, plus on va vers des domaines avancés ou ésotériques, plus le retour sur investissement chute fortement. Deuxièmement, le Wolfram Language compte déjà plus de 6 000 fonctions intégrées ; ajouter encore des centaines de fonctions pour prendre en charge de manière exhaustive un domaine comme la théorie des groupes n’a pas vraiment de sens
Cela pourrait être pris en charge sous forme de packages, mais sans support de première classe dans le noyau, il y a un coût en performances, et aussi un coût d’utilisabilité puisque l’utilisateur doit aller les chercher et les utiliser volontairement
C’est pourquoi des logiciels open source comme GAP, M2 ou PARI/GP jouent un rôle important pour combler les lacunes du Wolfram Language. De mon côté, je contribue aussi à des projets FOSS à hauteur de ce que je dépense pour ma licence Mathematica. Pour les projets auxquels il n’est pas simple de contribuer financièrement, j’essaie de les améliorer en y consacrant du temps et des compétences techniques
Honnêtement, les projets qui cherchent à répliquer les fonctionnalités de Mathematica ne m’intéressent pas beaucoup. Bien sûr, ces projets continueront à être développés et améliorés, et ils peuvent au moins mettre la pression sur Wolfram Research pour qu’il continue à améliorer les fonctionnalités de base. Mais pour qu’un tel projet rattrape le Mathematica/WL d’aujourd’hui, il faudra probablement 10 à 20 ans
[1]: https://www.wolfram.com/raspberry-pi/
[2]: https://www.wolfram.com/mathematica/pricing/home-hobby/
Les notebooks intégrés, la documentation au survol de la souris et, étonnamment, un unique et gigantesque espace de noms contenant des milliers de fonctions se combinent somehow pour offrir une expérience simple et productive, différente de tout ce que j’ai pu utiliser. Et pourtant, je ne suis généralement pas fan des IDE « lourds »
L’un des aspects agaçants de Mathematica, c’est que toutes les fonctions sont entassées dans le même espace de noms, et qu’il n’y a pas de surcharge selon les différentes options de paramétrage
Les gros doublons qui me viennent à l’esprit se limitent à peu près aux différentes fonctions Plot