April 18, 2026
Fix packaging to add some test YAML files.
Thanks, yet again, to @vic74p.
Some foundational work on overhauling plotting with NumPy vectors was started. Alas, work on it was not complete by release time, so this could not be finished. Expect a future release to have revamped graphics.
A major revision of Form handling and character encoding $CharacterEncoding was started with a focus on TeXForm, MathMLForm, and OutputForm.
Notes:
- There are numerous incompatible changes. Use with Mathics-scanner 10.0.0 or greater.
- We are in the process of renaming
MathicstoMathics3. You will notice a new Mathics3 logo in the documentation.Mathicswas monolithic Python 2-ish code. Mathics3 has rewritten a number of major subcomponents and split off a number of subcomponents. There are still several that need to be revised or rewritten. The name change reflects this distinction between the two efforts, and emphasizes thatMathics3uses modern Python 3 idioms. While right now the repository name and import refer tomathics, several repositories that use the Mathics3 core, or that Mathics3 uses, have been renamed. In particular,Mathics_Scanneris nowMathics3_Scanner.
$LanguagevariableArcBoxboxing functionCschfunction PR #1768JSON`Import`JSONImportRasterBoxboxing functionFormatFormBox, andRoundBoxboxing functionsShowSpecialCharactersoptionShowStringCharactersoption
- Many Builtin functions now report argument-mismatch errors
Trigoption added toNumeratorandDenominatorCharacterEncoding, andPathoptions added toGetPowerModandQuotienthandle the 3-argument form, roots of exponents (PowerMod), lists of exponents, and numbers other than Integers.N[integer, MachinePrecision]addedPrintPrecisionforN[integer]matches WMA; so does the largest mantissa before converting to MachinePrecision Integer (for display) matches WMA.BeginPackagewithNeedsparameter added. This should allow more packages to load properlyExpand, andApartwork with relations- #1596 Improve
FullFormcompatibility
- PR #1755 Ensure date formats have a year in them. This is needed for future Python versions.
- PR #1762 Fix Rayleigh expansion rules to only match half-integer orders. (Chenxin Zhong)
- #1741 Implement
MachinePrecisionoption for large numbers that fall outside of Python's built-infloatmantissa - #1740
N[3^200]in formats asPrecisionRealinstead ofMachinePrecision - #1723 Plotting nested functions
- #1713
?symbol and??symbol should be parsed asInformation["symbol"]andInformation["symbol"] - #1699 Character sequences used for the string representation of boxes should be treated as single characters in string character-wise manipulation operations.
- #1692
Mapdoes not automatically map a function overAssociationvalues (Li-Xiang-Ideal) - #1639 Map does not automatically map a function over Association values
- #1622 Handling escape sequences inside string literals
- #1519
Orderfor Numerics, e.g.Order[1.0, 1] == -1, but is 0 - #1492
UpSetnot giving a "Tag Integer is Protected." message - #1487
FindMinimum,FindMaximumdo not give approximate results when$IterationLimithas been exceeded and convergence fails - #1481 $TraceBuiltins=False does not work after more than one $TraceBuiltins=True use.
- Reset
evaluation.iteration_counton each new evaluation. This caused problems in long-running sessions, such as the Mathics3-django gallery examples. Binomialattributes corrected
Command-line program mathics was renamed to mathics3; the old name will be available for a while. This apparently facilitates uv packaging.
Command-line program mathics3-codeparser-parse was added to show how expressions are parsed. This is roughly analogous to the CodeParse function of the CodeParser WMA package.
- A major revision and reorganization was begun to improve Form
handling, leading to the new modules
mathics.forms.formatandmathics.forms.render. Existing render functions frommathics.formathas been moved undermathics.form.render. (mmatera) Corrections were made to variables$PrintFormsand$OutputForms. (mmatera) - Primitive datatype
NumericArray, which is essentially a NumPy array, was added to support vector operations, such as plotting. (Bruce Lucas) In support of this, the modulemathics.core.atomswas split up. - Internals for handling Graphics have been revised to be able to accept a more complete list.
- Parsing now uses more data from YAML tables instead of hard-coding values inside code.
- Revise representation for
ComplexNumbers; both the real and imaginary parts can now be arbitrary non-complex Real numbers. The precision, a derived value, is also saved. - Numerous internal changes were made to improve performance.
mpmathis used to store large integer mantissas inN[x_Integer].- Token names were changed to align better with the names reported in
CodeParser`Tokenize. Note, however, Mathics3 parsing is a bit different fromCodeParser`Parse.
- Python 3.14 supported. Support for Python 3.10 dropped; it may still work, but is not supported.
- Sympy 1.14 supported
- llvm 18+ now supported
- Front ends must now issue an explicit call to
import_and_load_builtins(). Previously, this was handled simply byimportofMathicsSession. Loading modules loaded viaimportwas unpredictable in how and when things got loaded. The change was made to address this and to be able to give more flexibility in loading. - Token names have changed to align better with
CodeParser ' CodeTokenize.
Go over documentation for PowerMod[], Denominator[], Numerator[], Limit, and ColorData, among other things.
Go over documentation for PowerMod[], Denominator[], Numerator[], Limit, and ColorData, among other things.
Added support for Python 3.13. Dropped support for Python 3.8 and 3.9.
Note: There are incompatible changes. Use with Mathics-scanner 2.0.0 or greater.
You may notice a speedup in performance, especially graphics performance, in this version. There is a speedup due to removing conversions from Mathics3 to Python and vice versa for literal data, which happens a lot in plotting graphics. Also, Python 3.13 is a bit faster than previous versions. Previously, rendering via asymptote was slow. This is no longer the situation.
Preliminary work to track locations has started. This is useful in debugging and error reporting, and is controlled via Boolean System variable $TrackLocations.
Boxing operators have been added. The full range of escape sequences is supported. A limited form of boxing escape \* that handles a single Boxing function has been added.
A basic interrupt handler was added that loosely follows wolframscript's interrupt handler. Interrupt commands "abort", "exit", "continue", "debugger", "show", and "inspect" are available; "trace" will be added later.
main.py has been moved to __main__.py following Python conventions for main routines. This makes python -m mathics work. GNU Readline history is enabled for mathics when it is available. It shares history files with mathicsscript.
The priority for rule selection when there are several matching a function call has been revised and more closely follows WMA behavior.
Assignment statements, e.g. SetDelayed, UpSetDelayed, or DownSetDelayed have been revised to isolate left-hand-side references from conditions and element attributes. As a result, more of the code in WMA and Mathics3 packages work.
$IterationLimit detects runaway rule expansion better.
Parameter count checking expanded to more Builtin functions.
$SessionID$TrackLocations(not WMA)BinaryReadList[](needed to support importing gzip files)Hypergeometric2F1
By Aravindh Krishnamoorthy (needed for better Rubi support):
Hypergeometric1F1[]HypergeometricPFQ[]MeijerG[]HypergeometricU[]
Go over docs for Beta[], Gamma[], Product[], and infix operators with no meaning.
Expand Transpose[] documentation.
- Set-related code reworked for better WMA conformance. There is better WMA conformance in rule selection when several rules match.
mathicsCLI options are more like wolframscript- The debugging interface has been improved.
TraceEvaluation[]andTraceDebug[]filter and colorize output for Mathics3 constructs much better. - Single-dash long options like
-help,-fileare now accepted. Short option-fis associated with-filerather than--fullform;-Fis is now used forFullForm. Option--readwith alias-ris now-codeand short option-c. - Boolean Options
ShowRewritesandShowEvaluationwere added toTraceEvalation[]. These are for either rewrite rules or evaluation expressions. Presumably, you don't want to filter both. - We check argument counts on more Builtin Functions and give error messages (tags
argb,argx,argr,argrx) for invalid parameter combinations. $TraceBuiltinsoutput uses standard Mathics3 I/O mechanisms rather than Python's builtinprint. Therefore, it will be seen in more front-ends like Django or PyOxide.
- #1057
ListPlot[]error handling (andNestList[]) needs going over - #1213
Condition[]expressions as second element inRuleDelayedbehaviour not compatible with WMA - #1187 Add
Hypergeometric2F1Builtin Function - #1198 Blanks in
Setoperations are not properly handled in tag positions. - #1245 Add "lpn" error message checking in _ListPlot
- #1383 Support for hypergeometric functions
- #1384 Option management tweaks
- #1388 In WMA,
Pochhammer[0,-2]returns 1/2 - #1395 Match WMA for
Gamma[1+x]andProduct[...] - #1405 structure_cache in
mathics.core.expression.structureisNonebut we try to set it in_is_neutral_symbol() - #1412
Transpose[]does not work on three-dimensional array - #1425 `Erroneous Protected message in SetDelayed
- #1432 URL links with $ in them are getting messed up
- #1461 "noopen" errors sometimes return
$Failed - #1465 Crash in running
Trace[Sin[Log[2.5, 7]]] - #1473 Doctest for
Quantity,KnownUnitQ, and others fail when the documentation is generated - #1474 Document typo: "is a valid Association object" should be "is a valid Quantity object"
- #1476
$IterationLimitis not limiting evalation expansion
- Hypergeometric functions have been revised to conform better to WMA behavior by expanding hypergeometric results.
$IterationLimitnow defaults to 4096.mathicscommand-line conform better towolframscriptoptions.- Rule selection of functions when multiple rules apply conforms to WMA more closely.
- LHS reference selection conforms to WMA more closely.
Scanner API has changed. Options on mathics CLI have changed. See above for the changes.
Location of mathics in mathics.__main__, the more usual location, rather than mathics.main.
- Mathics scanner exceptions of class TranslateError are incompatible with previous versions, and now store error parameters, "name", "tag", and "args".
- The method
get_sort_key()was replaced by two different properties:element_order, for canonical ordering of expressions, andpattern_precedence, used for ordering rules according to their precedence in the evaluation loop. - In both cases, the part of the sort key related to properties of the expressions and patterns are now stored as a magic number instead of a tuple.
Feb 8, 2025
Some work was made on the Mathics3 Kernel to work in Python 3.13. The maximum version of numpy was increased to < 2.3 to allow marimo to work.
Correct for a mismatch between ListExpression and a tuple in DispatchAtom.
This is needed for the PacletManager code to work better.
- When the result of an evaluation is
Symbol`Null, Mathics CLI now does not show anOut[...]=line, following the behavior of the WMA CLI. - Asymptote rendering of platonic solids added.
Document tagging code handles TeX math mode more completely. Image tags in PDF properly.
- Documentation has been gone over so that expressions are tagged in TeX. As a result, the user guide and reference manual render much nicer in the PDF and Django.
- More links have been added. References to The Digital Library of Mathematical Functions https://dlmf.nist.gov/ have been added where appropriate.
- Add mention of MathicsLive
- Platonic solid rendered properly in PDF
Jan 26, 2025
This release is to get out some of the major changes that have gone on already in advance of redoing Boxing and Formatting.
Code now supports the emscripten platform, so this code can be installed in pyodide using micropip.install.
Operators are now controlled from a new operators YAML table from the mathics-scanner repository. A pass was made over the Mathics parser to handle box operators more properly. More work is needed here.
We started adding more debugging capabilities:
Breakpoint[]Stack[], andTrace[]
And in the Mathics3-Trepan repository:
DebugActivate[]Debugger[], andTraceActivate[]
Option --post-mortem was added, which goes into the trepan3k debugger on an unrecoverable error. This option is available on other front ends.
This debugging code is very much alpha quality, but it greatly improves the ability to debug problems in loading existing packages
written from Mathematica. So packages BoolEval and CleanSlate were added to the repository.
Also, as a result of the improved ability to debug Mathics3, we now provide a version of Rubi 4.17 using git submodules. To use this, you will need a patched version of stopit. Aravindh Krishnamoorthy led the initial port of Rubi.
David A. Roberts worked on ensuring Mathics3 runs on pyodide and contributed a number of new Built-in Functions that are found in The On-Line Encyclopedia of Integer Sequences (OEIS).
BetweenBreakpoint- (not WMA; forces a Pythonbreakpoint()CheckAbortFileNameDropFormatValuesListStepPlotMapApplyPythonCProfileEvaluation(not WMA; interface to Python cProfile)RealValuedNumberQSequenceFormSetEnvironmentStackSyntaxQTraceUnitStep
By @davidar:
BellBDivisorSigmaDivisorSumEulerEHypergeometricUIntegerPartIntegerPartitionsJacobiSymbolKroneckerSymbolLambertWLinearRecurrenceLucasLMersennePrimeExponentMoebiusMuNumberDigitPolygonalNumberPolyLogPowersRepresentationsReverseSortRootSumSeriesCoefficientSquaresRSubfactorial
- Unicode operators appear in Django documentation. In the PDF, AMSLaTeX is used.
- Summaries of builtin functions have been improved and regularized
Option --post-mortem was added, which goes into the [trepan3k debugger](https https://pypi.org/project/trepan3k/)_ on an
unrecoverable error. This option is available on other front-ends.
GetEnvironmentexpanded to handle[]and{var1, var2,...}forms- The system
packagesdirectory has been renamedPackagesto conformance with WMA. $Pathnow includes aPackagesdirectory under$HOME.- All of the 100 or so Unicode operators without a pre-defined meaning are now supported
- More of the on-OO evaluation code that forms what might be an
instruction evaluator has been moved out of the module
mathics.builtinsput inmathics.eval. This includes code for plotting and making boxes. - nested
TimeConstraint[]works via external Python modulestopit. Pause[]is more interruptable- More code has been linted, more type errors removed, and docstrings added/improved
Blank*patterns without arguments are now singletons.
Matchernow requires an additionalevaluationparameterRombergremoved as anNIntegrate[]method. It is deprecated in SciPy and is to be removed by SciPy 1.15.- The signature of the
Definition.__init__now receives a single dict parameter instead of the several*valuesparameters. - Rule positions in
Definition.{get|set}_valuesnow includes the wordvalues. For examplepos="up"now ispos="upvalues". Definitions.get_ownvaluenow returns aBaseElementinstead of aBaseRuleobject.- Patterns in
eval_andformat_methods of builtin classes parses patterns in docstrings of the formSymbol: ExprasPattern[Symbol, Expr]. To specify the associated format informat_methods, the docstring, the list of formats must be wrapped in parentheses, like(InputForm,): Definitions[...]instead of justInputForm: Definitions[...]. - Character and Operator information that has been gone over in the Mathics Scanner project. The information in JSON tables, the keys, and values have thus changed. Here, we read this information in and use it instead of previously hard-coded values.
- Fix infinite recursion when formatting
Sequence[...] - Parsing
\(...\)improved - Fixed #1105, #1106, #1107, #1172 #1173, #1195, #1205, #1221, #1223, and #1228 among others
- Added
BoolEval - Added
CleanSlate Combinatoricamoved to a separate repository and v.9 was renamed to 0.9.1. More code v0.9.1 works. v2.0 was renamed v2.0.1, and some code now works.Rubiversion 4.17 (work in progress; algebraic integrations work)
- Added preliminary Mathics3 debugger.
- Python 3.12 is now supported
- SymPy 1.13 is now supported
Aug 9, 2024
Some work was done here in support of planned future improvements like lazy loading of builtin functions. A bit of effort was also spent to modernize Python code and style, add more type annotations, remove spelling errors, and use newer versions of important software like SymPy and Python itself.
$MaxLengthIntStringConversionElementsComplexExpand(thanks to vitrun)ConjugateTransposeLeviCivitaTensorRealAbsandRealSignRealValuedNumberQ
Many formatting issues with the PDF file have been addressed. In particular, the spacing of section numbers in the chapter and section table of contents has been increased. The margin space around builtin definitions has also been increased. Numerous spelling corrections to the document have been applied.
The code to run doctests and produce LaTeX documentation has been revised and refactored to allow incremental builtin update, and to DRY the code.
Section Head-Related Operations is a new section of "Expression Structure". The title of the PDF has changed from Mathics to Mathics3 and the introduction has been updated and revised.
*Plotdoes not show messages during the evaluation.Range[]now handles a negativediPR #951- Improved support for
DirectedInfinityandIndeterminate. GraphicsandGraphics3D, including wrong primitives and directives, are shown with a pink background. In the Mathics-Django interface, a tooltip error message is also shown.- Improving support for
$CharacterEncoding. Now it is possible to change it from inside the session.
Internals ---
eval_absandeval_signextracted fromAbsandSignand added tomathics.eval.arithmetic.- Maximum number of digits allowed in a string set to 7000 and can be adjusted using the environment variable
MATHICS_MAX_STR_DIGITSon Python versions that don't adjust automatically (like pyston). - Real number comparisons implemented are now in the internal implementation of
RealSign. - For Python 3.11, the variable
$MaxLengthIntStringConversioncontrols the maximum size of the literal conversion between large integers and Strings. - Older style non-appearing and non-pedagogical doctests have been converted to pytest
- Built-in code is directed explicitly rather than implicitly. This facilitates the ability to lazy load builtins or "autoload" them via GNU Emacs autoload.
- add mpmath lru cache
- Some work was done to make it possible so that in the future, we can speed up initial loading and reduce the initial memory footprint
Definitionsis compatible withpickle.- Improved support for
Quantityexpressions, including conversions, formatting, and arithmetic operations. Backgroundoption forGraphicsandGraphics3Dis operative again.- Numeric comparisons against expressions involving
Strings; Issue #797) Switch[]involvingInfinity. Issue #956Outer[]onSparseArray. Issue #939ArrayQ[]detectsSparseArrayPR #947BoxExpressionErrorexceptions handled. Issue PR #970Derivativeevaluation ofTrue,False, andList[]corrected. PR #971, #973Combinatoricapackage fixes. PR #974Exit[]not working. PR #998 nn-BaseFormis now listed in$OutputForms
We now require an explicit call to a new functionimport_and_load_builtins(). Previously, loading was implicit and
indeterminate as to when this occurred, as it was based on the import order.
We need this so that we can support in the future lazy loading of builtin modules.
- Python 3.11 is now supported
- Sympy 1.12 is now supported
Small fixes noticed by users and packagers, such as OpenSUSE Tumbleweed
Release to get Pillow 9.2 dependency added for Python 3.7+
Note that future releases in the 6.1 or 7.0 range will drop support for Python 3.6.
Some Pattern-matching code has been gone over to add type annotations and to start documenting its behavior and characteristics. Function attributes are now examined and stored at the time of Pattern-object creation rather than at evaluation time. This better matches WMA behavior, which pulls out the attribute this even earlier than this. These changes reduce doctest runtime by about 7% under Pyston.
Combinatorica version upgraded from 0.9 (circa 1992) to 0.91 (circa 1995), which more closely matches the published book.
Random Builtin function documentation has been gone over to conform to the current documentation style.
A fair bit of code refactoring has gone on so that we might be able to scale the code, get it to be more performant, and more in line with other interpreters. There is greater use of Symbols as opposed to strings.
The builtin Functions have been organized into groups akin to what is found in WMA. This is not just for documentation purposes, but it better modularizes the code and keeps the modules smaller while suggesting where functions below as we scale.
Image Routines have been gone over and fixed. Basically, we use Pillow imaging routines, as opposed to home-grown image code.
A number of Built-in functions that were implemented were not accessible for various reasons.
Mathics3 Modules are better integrated into the documentation. Existing Mathics3 modules pymathics.graph and pymathics.natlang have had a major overhaul, although more is needed. And will continue after the 6.0.0 release
We have gradually been rolling in more Python type annotations and current Python practices such as using isort, black, and flake8.
Evaluation methods of built-in functions start eval_, not apply_.
- New function
mathics.system_info.python_implementation()shows the Python Implementation, e.g., CPython, PyPy, Pyston, that is running Python. This is included in the informationmathics.system_info.mathics_system__system_info()returns and is used in$PythonImplementation - A list of optional software can be found in
mathics.optional_software. Versions of that software are included inmathics.version_info.
- SymPy 1.11.1 accepted
- Numpy 1.24.0 accepted
$BoxForms$OutputForms$PrintForms$PythonImplementationAccuracyClebschGordanCurl(2-D and 3-D vector forms only)DiscretePlotKurtosisListLogPlotLogPlot$MaxMachineNumber$MinMachineNumberNumberLinePlotPauliMatrixRemoveSetOptionsSixJSymbolSkewnessThreeJSymbol
- All Builtins have links to WMA pages.
- "Accuracy and Precision" section added to the Tutorial portion.
- "Attribute Definitions" section reinstated.
- "Expression Structure" split out as a guide section (was "Structure of Expressions").
- "Exponential Functional" split out from "Trigonometry Functions"
- "Functional Programming" section split out.
- "Image Manipulation" has been split off from Graphics and Drawing and turned into a guide section.
- Image examples now appear in the LaTeX and, therefore, the PDF doc
- "Logic and Boolean Algebra" section reinstated.
- "Forms of Input and Output" is its own guide section.
- More URL links to Wiki pages added; more internal cross-links added.
- "Units and Quantities" section reinstated.
- The Mathics3 Modules are now included in LaTeX and therefore the PDF doc.
boxes_to_methods are now optional forBoxElementsubclasses. Most of the code is now moved to themathics.formatsubmodule and implemented in a more scalable way.from_mpmathconversion supports a new parameteraccto set the accuracy of the number.mathics.builtin.inoutwas split into several modules (inout,messages,layout,makeboxes) in order to improve the documentation.mathics.evalwas created to have code that might be put in an instruction interpreter. The opcodes-like functions starteval_, other functions are helper functions for those.- Operator name to Unicode or ASCII comes from Mathics scanner character tables.
- Builtin instance methods that start
evalare considered rule matching and function application; the use of the nameapplyis deprecated whenevalis intended. - Modularize and improve the way in which
Builtinclasses are selected to have an associatedDefinition. _SetOperator.assign_elementarywas renamed_SetOperator.assign. All the special cases are not handled by the_SetOperator.special_casesdict.isortruns over all Python files. More type annotations and docstrings on functions added.- Caching on immutable atoms like,
String,Integer,Real, etc. was improved; the__hash__()function was sped up. There is a small speedup overall from this at the expense of increased memory. - More type annotations added to functions, especially builtin functions
- Numerical constants used throughout the code were renamed using caps, according to Python's convention.
0with a given precision (like in0`3) is now parsed as0, an integer number.- Reading certain GIFs now works again
Random[]works now.RandomSamplewith one list argument now returns a random ordering of the list items. Previously, it would return just one item.- Origin placement corrected on
ListPlotandLinePlot. - Fix long-standing bugs in Image handling
- Some scikit image routines line
EdgeDetectwere getting omitted due to overly stringent PyPI requirements - Units and Quantities were sometimes failing. Also, they were omitted from the documentation.
- Better handling of
Infinitequantities. - Improved
PrecisionandAccuracycompatibility with WMA. In particular,Precision[0.]andAccuracy[0.] - Accuracy in numbers using the notation
n.nnn``accnow is properly handled. - numeric precision in mpmath was not reset after operations that changed these. This cause huges slowdowns after an operation that sets the mpmath precision high. This was the source of several-minute slowdowns in testing.
- GIF87a (```MadTeaParty.gif`` or ExampleData) image loading fixed
- Replace the non-free Leena image with a freely distributable image. Issue #728
Mathics3 aims for a richer set of functionality.
Therefore, NumPy and Pillow (9.10 or later) are required Python packages, where they had been optional before. In truth, probably running Mathics without one or both probably did not work well if it worked at all; we had not been testing setups that did not have NumPy.
- Vector restriction on
Norm[]removed. "Frobinius" p-form allowed. - Better handling of comparisons with finite precision numbers.
- Improved implementation for
Precision. - Infix operators, like
->render with their Unicode symbol when$CharacterEncodingis not "ASCII". *Gridcompatibility with WMA was improved. Now it supports a non-uniform list of lists and lists with general elements. - Support for BigEndian Big TIFF
August 6, 2022
Get in `requirements-cython.txt`` into tarball. Issue #483
Undefined
August 6, 2022
Mostly a release to fix a Python packaging problem.
formatanddo_formatmethods were removed from the interface ofBaseElement, becoming non-member functions.- The class
BoxElementwas introduced as a base for boxing elements.
- 'Inverse Gudermannian'.
Hyperbolic functions were split off form trigonometry and exponential functions. More URL links were added.
- Creating a complex number from Infinity no longer crashes and returns 'I * Infinity'
July 31, 2022
This release starts to address some of the performance problems and terminology confusion that goes back to the very beginning. As a result, this release is not API compatible with prior releases.
In conjunction with the performance improvement in this release, we start refactoring some of the core classes and modules to start to get this to look and act more like other interpreters, and to follow more current Python practice.
More work will continue in subsequent releases.
- Euler's
Betafunction. Bernoulli.CatalanNumber(Integer arguments only).CompositeQ.Diagonal. Issue #115.Divisible.EllipticEEllipticFEllipticKEllipticPiEulerPhi$Echo. Issue #42.FindRootwas improved to support numerical derivatives, Issue #67, as well as the use of scipy libraries when available.FindRoot(for thenewtonmethod) partially supportsEvaluationMonitorandStepMonitoroptions.FindMinimumandFindMaximumnow have a minimal implementation for 1D problems and the use of scipy libraries when they are available.LogGamma.ModularInverse.NumericFunction.Projection.- Partial support for Graphics option
Opacity. SeriesDataoperations were improved.TraceEvaluation[]shows expression name calls and return values of it argument.- Pass option
ShowTimeBySteps, to show the accumulated time before each step - The variable
$TraceEvalution, when set True, will show all expression evaluations.
- Pass option
TraditionalForm
Dacts overIntegrateandNIntegrate. Issue #130.SameQ(===) handles chaining, e.g.a == b == corSameQ[a, b, c].Simplifyhandles expressions of the formSimplify[0^a], Issue #167.SimplifyandFullSimplifysupport optional parametersAssumptionsandComplexityFunction.UnsameQ(=!=) handles chaining, e.g.a =!= b =!= corUnsameQ[a, b, c].- Assignments to usage messages associated with
Symbolsare allowed as it is in WMA. With this and other changes, Combinatorica 2.0 works as written. Share[]performs an explicit call to the Python garbage collection and returns the amount of memory free.- Improve the compatibility of
TeXFormandMathMLFormoutputs with WMA. MathML tags around numbers appear as "<mn>" tags instead of "<mtext>", except in the case ofInputFormexpressions. In TeXForm: some quotes around strings have been removed to conform to WMA. It is not clear whether this is the correct behavior. - Allow
scipyandskimageto be optional. In particular: reviseNintegrate[]to useMethod="Internal"when scipy isn't available. - Pyston up to versions from 2.2 to 2.3.4 are supported as are PyPy versions from 3.7-7.3.9.0 up 3.9-7.3.9. However, those Python interpreters may have limitations and limitations on the packages that they support.
- Improved support for
SeriesIssue #46. Cylinderrendering is implemented in Asymptote.
- "Testing Expressions" section added.
- "Representation of Numbers" section added.
- "Descriptive Statistics" section added and "Moments" folded into that.
- Many More URL references.
<url>now supports link text. - Reference Chapter and Sections are now in alphabetical order
- Two-column mode was removed in most sections, so the printed PDF looks nicer.
- Printed Error message output in test examples is in typewriter font and doesn't drop inter-word spaces.
- Inexplicably, what the rest of the world calls a "nodes" in a tree or in WMA "elements" in a tree had been called a "leaves". We now use the proper term "element".
- Lots of predefined
Symbols have been added. Many appear in the modulemathics.core.systemsymbols. - Attributes are now stored in a bitset instead of a tuple of strings. This speeds up attributes read and RAM usage.
Symbol.is_numericandExpression.is_numericnow use the attributeDefinition.is_numericto determine the returned value.NIntegrateinternal algorithms and interfaces toscipywere moved tomathics.algorithm.integratorsandmathics.builtin.scipy_utils.integratorsrespectively.N[Integrate[...]]now is evaluated asNIntegrate[...]- Definitions for symbols
CurrentContextandContextPath[]are mirrored in themathics.core.definitions.Definitionsobject for faster access. FullForm[List[...]]is shown as{...}according to the WL standard.Expression.is_numeric()accepts anEvaluationobject as a parameter; the definitions attribute of that is used.SameQfirst checks the type, then theid, and then the names in symbols.- In
mathics.builtin.patterns.PatternTest, if the condition is one of the most used tests (NumberQ,NumericQ,StringQ, etc), thematchmethod is overwritten to specialized versions that avoid function calls. mathics.core.patterns.AtomPatternspecializes in the comparison depending on theAtomtype.- To speed up development, you can set
NO_CYTHONto skip Cythonizing Python modules. If you are using Pyston or PyPy, Cythonization slows things down. anyandallcalls were unrolled as loops in Cythonized modules: this avoids the overhead of a function call, replacing it by a (C) for loop, which is faster.- A bug was fixed relating to the order in which
mathics.core.definitionsstores the rules InstanceableBuiltin->BuiltinElementBoxConstruction->BoxExpression- the method
Element.is_true()was removed in favor ofis SymbolTrue N[_,_,Method->method]was reworked. Issue #137.- The methods
boxes_to_*were moved toBoxExpression. - remove
flatten_*from theAtominterface. Definitionhas a new propertyis_numeric.
- Creating two
Symbolobjects with the same name will give the same object. This avoids unnecessary string comparisons and calls toensure_context. - Attributes are now stored in a bitset instead of a tuple of strings.
- The
Definitionsobject has two properties:current_contextandcontext_path. This speeds up the lookup of symbol names. These properties store their values in the corresponding symbols in thebuiltindefinitions. eval_Nwas added to speed up the then often-used built-in functionN.Expressionevaluation was gone over and improved. properties on the collection, which can speed up evaluation, such as whether an expression is fully evaluated, is ordered, or is flat are collected.Listevaluation is customized. There is a newListExpressionclass that has a more streamlinedevaluate()method. More of this kind of thing will followBaseExpression.get_headavoids building a symbol, saving two function calls.
- SymPy 1.10.1
-
ScriptCommandLinenow returns, as the first element, the name of the script file (when available), for compatibility with WMA. Issue #132. -
Expression.numerifyimproved in a way to obtain a behavior closer to WMA. -
NumericQlhs expressions are now handled as a special case in assignment. For exampleNumericQ[a]=Truetells the interpreter thatamust be considered -
a numeric quantity, so
NumericQ[Sin[a]]evaluates toTrue.
First,Rest, andLastnow handle invalid arguments.Set*: fixed. Issue #128.SameQ: comparison with MachinePrecision only needs to be exact within the last bit. Issue #148.- Fix a bug in
Simplifythat produced expressions of the formConditionalExpression[_,{True}]. - Fix bug in
ClearandClearAll(Issue #194). - Fix base 10 formatting for infix
Times. Issue #266. - Partial fix of
FillSimplify - Streams used in MathicsOpen are now freed, and their file descriptors are now released. Issue #326.
- Some temporary files that were created are now removed from the filesystem. Issue #309.
- There were a number of small changes/fixes involving
NIntegrateand its Method options.Nintegratetests have been expanded. - Fix a bug in handling arguments of pythonized expressions, that are
produced by
Compilewhen the llvmlite compiler fails. Nnow handles arbitrary precision numbers when the number of digits is not specified.- [N[Indeterminate]]{.title-ref} now produces [Indeterminate]{.title-ref} instead a [PrecisionReal(nan)]{.title-ref}.
- Fix crash in
NestWhilewhen supplyingAllas the fourth argument. - Fix the comparison between
Imageand other expressions. - Fix an issue that prevented that [Collect]{.title-ref} from handling polynomials properly on expressions (Issue #285).
- Fix a bug in formatting expressions of the form
(-1)^awithout the parentheses (Issue #332). - Fix a bug in the order in which
mathics.core.definitionsstores the rules. - Numeric overflows now do not affect the full evaluation, but instead just the element that produces it.
- Compatibility with the way expressions are ordered more closely follows WMA: Now expressions with fewer elements come first (Issue #458).
- The order of the context name resolution (and
$ContextPath) was switched;"Systemcomes before"Global.
The following changes were motivated by a need to speed up the interpreter.
Expressionarguments differ. The first parameter has to be aSymbolwhile the remaining arguments have to be some sort ofBaseElementrather than something that can be converted to an element.
2 Properties for the collection of elements can be specified when they
are known. To get the old behavior, use to_expression
- Expressions that are lists are a new kind of class,
ListExpression. As with expressions, the constructor requires valid elements, not something convertible to an element. Useto_mathics_list
GuidermannianConeTubeNormalnow have a basic support forSeriesData
Tensor functions:
RotationTransformScalingTransformShearingTransformTransformationFunctionTranslationTransform
Spherical Bessel functions:
SphericalBesselJSphericalBesselYSphericalHankelH1SphericalHankelH2
Gamma functions:
PolyGammaStieltjes
Uniform Polyhedron
DodecahedronIcosahedronOctahedronTetraHedronUniformPolyedron
Mathics-specific
TraceBuiltin[],$TraceBuiltins,ClearTrace[],PrintTrace[]
These collect builtin-function call counts and elapsed time in the routines.
TraceBuiltin[expr] collects information for just expr. Whereas
setting $TraceBuiltins to True will accumulate results of evaluations
PrintTrace[] dumps the statistics and ClearTrace[] clears the statistics data.
mathics -T/--trace-builtin is about the same as setting
$TraceBuiltins = True on entry and runs PrintTrace[] on exit.
- Fix and document better behavior of
Quantile - Improve Asymptote
BezierCurveimplementation Rationalizegives symmetric results for +/- like MMA does. If the result is an integer, it stays that way.- stream processing was redone.
InputStream,OutputStreamandStringToStreamshould all open, close, and assign stream numbers now
August 31, 2021
The main thrust behind this API-breaking release is to be able to support a protocol for Graphics3D.
It new Graphics3D protocol is currently expressed in JSON. There is an independent threejs-based module to implement this. Tiago Cavalcante Trindade is responsible for this code.
The other main API-breaking change is more decentralization of the Mathics3 Documentation. A lot more work needs to go on here, and so there will be one or two more API breaking releases. After this release, the documentation code will be split off into its own git repository.
- a Graphics3D protocol, mentioned above, has been started
mathics.settinghave been gone over to simplify.- A rudimentary and crude SVG Density Plot was added. The prior method relied on mysterious secret handshakes in JSON between Mathics3 Core and Mathics Django. While the density plot output was nicer in Mathics Django, from an overall API perspective this was untenable. A future version may improve SVG handling of Density plots using elliptic density gratings in SVG. And/or we may define this in the JSON API.
- SVG and Asymptote drawing now includes inline comments indicating which Box Structures are being implemented in code
- Document data used in producing PDFs and HTML-rendered documents is now stored in both the user space, where it can be extended, and in the package install space -- which is useful when there is no user-space data.
- The documentation pipeline has been gone over. Turning the internal data into a LaTeX file is now a separate own program. See
mathics/doc/test/README.rstfor an overview of the dataflow needed to create a PDF. - Summary text for various built-in functions has been started. These summaries are visible in Mathics3 Django when lists links are given in Chapters, Guide Sections, or Sections.
- A Sections for Lists has been started and grouping for these have been added. So code and sections have moved around here.
- Regexp detection of tests versus document text has been improved.
- Documentation improved
- The flakiness around showing sine graphs with filling on the axes or below has been addressed. We now warn when a version of Asymptote or Ghostscript is used that is likely to give a problem.
- A small SVGTransform bug was fixed. Thanks to axelclk for spotting.
- Elliptic arcs are now supported in Asymptote. There still is a bug however in calculating the bounding box when this happens.
- A bug in image decoding introduced in 3.1.0 or so was fixed.
- A bug SVG LineBoxes was fixed
- Some of the test output for builtins inside a guide sections is not automatically rendered
- Density plot rendered in Mathics3 Django do not render as nice since we no longer use the secret protocol handshake hack. We may fix this in a future release
- Some of the Asymptote graphs look different. Graphic3D mesh lines are not as prominent or don't appear. This is due to using a newer version of Asymptote, and we will address this in a future release.
August 3, 2021
Arrowfor Graphics3D (preliminary)Cylinder(preliminary)Factorial2PR #1459 Issue #682.
Large sections like the "Strings and Characters", "Integer Functions" and "Lists" sections have been broken up into subsections. These more closely match online WL "Guide" sections. This is beneficial not just in the documentation, but also for code organization. See PRs #1464, #1473.
A lot more work is needed here.
The Introduction section of the manual has been revised. Licensing and Copyright/left sections have been reformatted for non-fixed-width displays. #1474
PolarPlot documentation was improved. #1475.
A getter/setter method for Mathics3 settings was added #1472.
- Add
requirements-*.txtto distribution files.pip install Mathics3[dev]should work now. PR #1461 - Some
PointBoxbugs were fixed - Some
Arrow3DBoxandPoint3DBoxbugs were fixed PR #1463 - Fix bug in
mathicsCLI when-scriptand-ewere combined PR #1455
June 26, 2021
Overall there is a major refactoring underway of how formatting works and its interaction with graphics. More work will come in later releases.
Some of the improvements are visible not here but in the front-ends mathicsscript and mathics-django. In mathicsscript, we can now show SVG images (via matplotlib). In Mathics3 Django, images and threejs graphs are no longer embedded in MathML.
A lot of the improvements in this release were done or made possible with the help of Tiago Cavalcante Trindade.
It is now possible to get back SVG, and graphics that are not embedded in MathML.
The code is now Pyston 2.2 compatible. However scipy lxml are
not currently available on Pyston so there is a slight loss of
functionality. The code runs about 30% faster under Pyston 2.2. Note
that the code also works under PyPy 3.7.
- Tick marks and the placement of numbers on charts have been corrected. PR #1437
- Asymptote now respects the
PointSizesetting. - In graphs rendered in SVG, the
PointSizehas been made more closely match Mathematica. - Polygons rendered in Asymptote now respects the even/odd rule for filling areas.
Density Plots rendered in SVG broke with this release. They will be reinstated in the future.
Go over settings file to ensure usage names are full sentences.
We have started to put more builtins in the sections or subsections following the organization in Mathematics 5 or as found in the online Wolfram Language Reference. As a result, long lists in previous topics are a bit shorter and there are now more sections. This work was started in 2.2.0.
More work is needed on formatting and showing this information, with the additional breakout we now have subsections. More reorganization and sectioning is needed.
These cleanups will happen in a future version.
Chapters without introductory text like Structural Operations, or Tensors have had descriptions added.
Sections that were empty have either been expanded or removed because
the underlying name was never a user-level built in, e.g. the various
internal Boxing functions like DiskBox, or CompiledCodeBox
Documentation specific builtins like PolarPlot or
BernsteinBasis have been added improved, and document examples
have been revised such as for PieChart, Pi and others.
The Mathics3 Gallery examples have been updated.
Some slight improvements were made to producing the PDF and more kinds of non-ASCII symbols are tolerated. Expect more work on this in the future via tables from the Mathics3 Scanner project.
Chapters are no longer in Roman Numerals.
docpipline.pyaccepts the option--chaptersor-cto narrow tests to a particular chapter- Format routines have been isolated into its own module. Currently, we have format routines for SVG, JSON and Asymptote. Expect more reorganization in the future.
- Boxing routines have been isolated to its own module.
- The entire code base has been run through the Python formatter black.
- More Python3 types to function signatures have been added.
- More document tests that were not user-visible have been moved to unit tests, which run faster. More work is needed here.
May 5, 2021
- SymPy 1.8
ArgCoefficientArraysandCollect(#1174, #1194)DispatchFullSimplifyLetterNumber#1298. Thealphabetparameter supports only a minimal number of languages.MemoryAvailableMemoryInUseNandandNorlogical functions.Series,OandSeriesDataStringReverse$SystemMemory- Add all of the named colors, e.g.
BrownorLighterMagenta.
- a function
evaluate_predicateallows for a basic predicate evaluation using$Assumptions. Attributesaccepts a string parameter.Casesaccepts Heads option. Issue #1302.ColorNegatefor colors is supported.DandDerivativeimprovements.ExpandandExpandAllnow support a second parameterpattIssue #1301.ExpandandExpandAllworks with hyperbolic functions (Sinh,Cosh,Tanh,Coth).FileNamesreturns a sorted list. Issue #1250.FindRootnow accepts several optional parameters likeMethodandMaxIterations. See Issue #1235.FixedPointnow supports theSameTestoption.mathicsCLI now uses its own Mathics3settings.mfilePrependworks withDownValuesIssue #1251PrimeandPrimePinow accept a list parameter and have theNumericFunctionattribute.ReadwithHold[Expression]now supported. (#1242)ReplaceRepeatedandFixedPointnow supports theMaxIterationoption. See Issue #1260.Simplifyperforms a more sophisticated set of simplifications.Simplifyaccepts a second parameter that temporarily overwrites$Assumptions.StringTakenow accepts a form containing a list of strings and a specification. See Issue #1297.Table[expr, n] is supported.ToExpressionhandles multi-line string input.ToStringaccepts an optional form parameter.ToExpressionhandles multi-line string input.$VersionNumbernow set to 10.0 (was 6.0).- The implementation of Streams was redone.
- Function
mathics.core.definitions.autoload_fileswas added and exposed to allow front-ends to provide their own custom Mathics. settings. - String output in the
mathicsterminal has surrounding quotes to make it more visually distinct from unexpanded and symbol output. To disable this behavior use--strict-wl-output.
SetTagDelayednow does not evaluate the RHS before assignment.$InstallationDirectorystarts outUnprotected.FindRootnow handles equations.- Malformed Patterns are detected and an error message is given for them.
- Functions gone over to ensure the
ListableandNumericFunctionproperties are correct.
Incompatible changes 1.-------------------
System$UseSansSerifmoved from core and is sent to front-ends usingSettings$UseSansSerif.
Internal changes 1.---------------
docpipeline.pyaccepts the option-dto show how long it takes to parse, evaluate and compare each individual test.-xoption (akin topytests -xis a short-hand for stop on first error- Some builtin functions have been grouped together in a module underneath the top-level builtin directory. As a result, in the documents you will list some builtins listed under an overarching category like
Specific FunctionsorGraphics, Drawing, and Images. More work is expected in the future to improve document sectioning. System$Notebooks` is removed from settings. It is in all of the front-ends now.
ArcTanhByteArrayCreateFileCreateTemporaryFileNamesNIntegratePartitionsP$NotebooksSparseArray
- The Mathics3 version is checked for builtin modules at load time. A message is given when a builtin doesn't load.
- Automatic detection for the best strategy to numeric evaluation of constants.
FileNameJoinnow implementsOperatingSystemoption- Mathics3 functions are accepted by
Compile[]. The return value or type will beCompile[] and CompiledFunction[]. Every Mathics3 Expression can have a compiled form, which may be implemented as a Python function. Equal[]now compares complex against other numbers properly.- Improvements in handling products with infinite factors:
0 Infinity->Indeterminate, andexpr Infinity->DirectedInfinite[expr] $Pathis nowUnprotectedby defaultRead[]handles expressions better.StringSplit[]now accepts a list in the first argument.SetDelayed[]now accepts several conditions imposed both at LHS as well as RHS.- Axes for 2D Plots are now rendered for SVGs
InsertBoxaccepts an opaque parameter
TeXForm[] for integrals are now properly formatted.
- Mathics3 modules now can run initialization code when are loaded.
- The
builtinslist is not hard-linked to the library anymore. This simplifies the loading and reloading of pymathics modules. - Decoupling of BoxConstructors from the library. Now are defined at the level of the definition objects. This is useful for customizing the Graphics output if it is available.
- A pass was made to improve Microsoft Windows compatibility and testing Windows under MSYS.
- Include numpy version in version string. Show in CLI
- Small CLI tweaks
--colors=Noneadded to match mathicsscript. - In the
BaseExpressionand derived classes, the methodboxes_to_xmlnow are calledboxes_to_mathml. - In the
formatmethod of the classEvaluation, the builtinToStringis called instead ofboxes_to_text - In order to control the final form of boxes from the user space in specific symbols and contexts.
GraphicsBoxnow have two methods:to_svgandto_mathml. The first produces SVG plain text while the second produces<mglyph ...>tags with base64 encoded SVGs.
- Improved
EqualSee PR #1209 - Better Unicode support, especially for Mathics3 operators
- Improved
D[]andDerivative[]See PR #1220 - Improved performance
Collect[]See Issue #1194.Series[]See Issue #1193.
Feb 14, 2021
To accommodate growth and increased use of pieces of Mathics3 inside other packages, parts of Mathics3 have been split off and moved to separate packages. In particular:
- The Django front-end is now a PyPI installable package called Mathics3-django.
- Scanner routines, character translation tables to/from Unicode, and character properties are now mathics-scanner.
- Specific builtins involving heavy, non-standard routines were moved to pymathics modules Mathics3-Module-networkx, Mathics3-Module-nltk.
-e--executeis better suited for embedded use. It shows just evaluation output as text.- Docker scripts
dmathics,dmathicsscriptanddmathicsserverhave been removed. They are part of thedocker-mathicsa separate PyPI package.
The bump in the major version number reflects major changes in this release. Another major release is planned soon, with more major changes.
See below for future work planned.
AnglePath,AnglePathFold,AngleVectorBoxData,TextData,InterpretationBox,StyleBox,TagBox,TemplateBox,ButtonBox,InterpretationBoxContinuedFractionConvertCommonDumpRemoveLinearSyntaxandSystemConvertersDump` context variablesFirstCase,Lookup,Key,LookupandFailureHaversine,InverseHaversineInsertandDeleteLerchPhiMathicsVersion(this is not in WL)NumberQPossibleZeroQPR #1100RunShowSympyObjectTimeRemainingandTimeConstrained\[RadicalBox]- Improving support for options in the Plot module:
Axes,Filling,ImageSize,Joined
Mathematical Constants is now its own module/section. Constants have been filled out. These constants have been added:
CatalanDegreeGlaisherGoldenRatioKhinchin
Many of these and the existing constants are computable via mpmath, NumPy, or Sympy.
Certain aspects of the kernel configuration are now controlled by variables, defined in /autoload/settings.m.
$GetTrace(Falseby default). Defines if when a WL module is load throughGet, definitions will be traced (for debug).$PreferredBackendMethodSet this do whether to use mpmath, NumPy or SymPy for numeric and symbolic constants and methods when there is a choice ("sympy"by default) (see #1124)
- Add
Methodoption "mpmath" to computeEigenvaluesusing mpmath (#1115). - Improve support for
OptionValueandOptionsPattern(#1113)
Numerous bugs were fixed while working on Combinatorica V0.9 and CellsToTeX.
Suminvolving numeric integer bounds involving Mathics3 functions fixed.EqualUnEqualtesting on Strings (#1128).
- Start a readthedocs Developer Guide_
- Fix evaluation timeouts
Sum's lower and upper bounds can now be Mathics3 expressions
- Enlarge the set of
gries_schneidertests - Improve the way builtins modules are loaded at initialization time (#1138).
- We are in the process of splitting out graphics renderers, notably for matplotlib. See pymathics-matplotlib.
- Work is also being done on asymptote. See PR #1145.
- Makeboxes is being decoupled from a renderer. See PR #1140.
- Inline SVG will be supported (right now SVG is binary).
- Better support integrating Unicode in output (such as for Rule arrows) is in the works. These properties will be in the scanner package.
- A method option ("mpmath", "sympy", or "numpy") will be added to the
N[]. See PR #1144.
This may be the last update before some major refactoring and interface changes occur.
In a future 2.0.0 release, Django will no longer be bundled here. See Mathics3-django for the unbundled replacement.
Some changes were made to support network graph Mathics3-Module-networkx, a new graph package bundled separately, and to support the ability for front-ends to handle rendering on their own. Note that currently this doesn't integrate well into the Django interface, although it works well in mathicsscript.
- SymPy 1.7.1
Mathics3 Packages added:
DiscreteMathCombinatoricaV0.9(preferred) andDiscreteMathCombinatoricaV0.6.
Both of these correspond to Steven Skiena's older book: Implementing Discrete Mathematics: Combinatorics and Graph Theory.
If you have a package that you would like included in the distribution, and it works with Mathics, please contact us.
Rubi may appear in a future release, possibly in a year or so. Any help to make this happen sooner is appreciated.
StirlingS1,StirlingS2(not all WL variations handled)MapAt(not all WL variations handled)PythonForm,SympyForm: not in WL. Expect more and better translations later as Mathics3 modules.ThrowandCatchWithFileNameTake
- Workaround for
Compileso it accepts functions ##1026 - Add
Traceoption toGet.Get["fn", Trace->True]will show lines as they are read - Convert to/from Boolean types properly in
from_python,to_python. Previously they were 0 and 1 - Extend
DeleteCasesto accept a levelspec parameter - Set
Evaluation#exc_resultto captureAborted,Timeout,Overflow1, etc. ImageDatachanged to get bits {0,1}, not booleans as previously- Add tokenizer symbols for
<->and->and the Unicode versions of those - Small corrections to
Needs, e.g check if already loaded, correct a typo, etc. System$InputFileNameis now set insideNeedsandGet`- Install shell scripts
dmathicserver,dmathicsscript, anddmathicsto simplify running docker - Adjust
$InputFileNameinsideGetandNeeds - Support for
Allas aPartspecification - Fix
BeginPackage - Improving support for
OptionValue. Now it supports list of Options - Adding support in
from_python()to convert dictionaries in list of rules - Fix
OptionsPatternassociated symbols
So we can get onto PyPI, the PyPI install name has changed from Mathics to Mathics3.
- Add Symbolic Comparisons. PR #1000
- Support for externally PyPI-packagable builtin modules - PyMathics
SetDirectoryfixes. PR #994- Catch ``PatternError` Exceptions
- Fix formatting of
..and...(RepeatAll) - Tokenization of
\.without a following space (ReplaceAll). Issue #992. - Support for assignments to named
Pattern - Improve support for ``Names`. PR #1003
- Add a
MathicsSessionclass to simplify running Mathics3 from Python. PR #1001 - Improve support for
ProtectandUnprotectlist of symbols and regular expressions. PR #1003
All major packages that Mathics3 needs have been updated for more recent releases. Specifically these include:
- Python: Python 3.6-3.9 are now supported
- Cython >= 0.15.1
- Django 3.1.x
- mpmath >= 1.1.0
- SymPy 1.6.2
Association,AssociationQ,FirstPostion,LeafCountAssociation,AssociationQ,Keys,Values#705BarChart[],PieChart,Histogram,DensityPlot#499BooleanQ,DigitQandLetterQCharacterEncodingoption forImport[]Coefficient[],Coefficient[x * y, z, 0],Coefficient*[]DiscreteLimit#922Environment- File read operations from URLs
FirstPostions,Integers,PrePendTo[]GetEnvironment# 938Integers,PrependToandContainsOnlyImportsupport for WL packagesIterationLimitLoadModuleMantissaExponent[],FractionalPart[],CubeRoot[]PolynomialQ[],MinimalPolynomial[]Quit[],Exit[]#523, #814,RealDigits#891, #691,Interrupt,UniqueRemoveDiacritics[],Transliterate[]#617Root#806Sign[],Exponent,Divisors,QuotientRemainder,FactorTermsList- Speedups by avoiding inner classes, #616
StringRiffle[],StringFreeQ[],StringContainsQ[],StringInsertSubsetQandDelete[]#688, #784,Subsets#685SystemTimeZoneand correctTimeZone#924System\ByteorderingandSystem`Environment` #859$UseSansSerif#908randchoiceoption forNoNumPyRandomEnv#820- Support for
MATHICS_MAX_RECURSION_DEPTH - Option
--full-form(-F) onmathicsto parsedFullFormof input expressions
- speed up leading-blank patterns #625, #933
- support for iteration over Sequence objects in
Table,Sum, andProduct - fixes for option handling
- fixes for
Manipulate[x,{x,{a,b}}] - fixes rule -> rule case for
Nearest - fixes and enhancements to
WordCloud - added
StringTrim[] - fixes
URLFetchoptions - fixes
XMLGetStringand parse error - fixes
LanguageIdentify - fixes 2 <= base <= 36 in number parsing
- improved error messages
- fixes
Check,Interrupt, andUnique#696 - fixes
Eigenvalues,Eigenvectors#804 - fixes
Solve#806 - proper sympolic expantion for
ReandIm - fixes a bug in the evaluation of
SympyPrime#827 - clean up
ColorData - fixes Unicode characters in TeX document
- update Django gallery examples
- fixes
SumandProduct#869, #873 - warn when using options not supported by a Builtin #898, #645
- renamed
FetchURLtoURLFetch(according to the WL standard) - renamed
SymbolLookuptoLookup
- Speed up pattern matching for large lists
- Quadratic speed improvement in pattern matching. #619 and see the graph comparisons there
- In-memory sessions #623
- bump
RecursionLimit - blacken (format) a number of Python files and remove blanks at the end of lines
- Adding several CI tests
- Remove various deprecation warnings
- Change
#!frompythontopython3 - Update docs
- Support for Python 3.5 and earlier, and in particular Python 2.7, was dropped.
- The
graphsmodule (for Graphs) has been pulled until Mathics3 supports pymathics and graphics usingnetworkxbetter. It will reappear as a pymathics module. - The
natlang(for Natural Language processing) has also been pulled. The problem here, too, is that the pymathics mechanism needs a small amount of work to make it scalable, and in 1.0 these were hard-coded. Also, both this module andgraphspulled in some potentially hard-to-satisfy non-Python dependencies such as matplotlib, or NLP libraries, and word lists. All of this made installation of Mathics3 harder, and the import of these libraries,natlangin particular, took some time. All of these point to having these live in their repositories and get imported lazily on demand.
LinearModelFit#592EasterSunday#590DSolvefor PDE #589LogisticSigmoid#588CentralMoment,Skewness,Kurtosis#583- New web interface #574
Imagesupport and image processing functions #571, #541, #497, #493, #482StringCases,Shortest,Longeststring match/replace #570QuantimeandQuartiles#567Pick#563ByteCount#560Nearest#559Count#558RegularPolygon#556- Improved date parsing #555
Permutations#552- LLVM compilation of simple expressions #548
NumberForm#534, #530, #455- Basic scripting with mathicsscript
- Arcs for
DiskandCircle#498, #526 - Download from URL #525
$CommandLine#524Backgroundoption forGraphics#522Style#521, #471, #468- Abbreviated string patterns #518
Return#515- Better messages #514
- Undo and redo functionality in web interface #511
CovarianceandCorrelation#506ToLowerCase,ToUpperCase,LowerCaseQ,UpperCaseQ#505StringRepeat#504TextRecognise#500- Axis numbers to integers when possible #495
PointSize#494FilledCurve,BezierCurve,BezierFunction#485PadLeft,PadRight#484Manipulate#483, #379, #366Replace#478- String operator versions #476
- Improvements to
Piecewise#475 - Derivation typo #474
- Natural language processing functions #472
Arrow,Arrowheads#470- Optional modules with requires attribute #465
MachinePrecision#463Catenate#454Quotient#456- Disable spellcheck on query fields #453
MapThread#452ScanandReturn#451OnandOff#450$MachineEpsilonand$MachinePrecision#449ExpandAll#447Position#445StringPosition#444AppendTo,DeleteCases,TrueQ,ValueQ#443Indeterminate#439- More integral functions #437
ExpIntegralEiandExpIntegralE#435VarianceandStandardDeviation#424- Legacy
Randomfunction #422 - Improved gamma functions #419
- New recursive descent parser #416
TakeSmallestand related #412Boole#411Median,RankedMin,RankedMax#410HammingDistance#409JaccardDissimilarityand others #407EuclideanDistanceand related #405- Magic methods for
Expression#404 Reverse#403RotateLeftandRotateRight#402ColorDistance,ColorConvert#400- Predefine and document
$Abortedand$Failed#399 IntegerString,FromDigits, and more #397EditDistanceandDamerauLevenshteinDistance#394QRDecomposition#393RandomChoiceandRandomSample#488Hash#387- Graphics boxes for colors #386
Except#353- Document many things #341
StringExpression#339- Legacy file functions #338
- Nested
Module#591, #584 - Python2 import bug #565
- XML import #554
\[Minus]parsing bug #550Casesevaluation bug #531Takeedge cases #519PlotSizebug #512- Firefox nodeValue warning #496
- Django database permissions #489
FromDigitsmissing message #479- Numerification upon result only #477
- Saving and loading notebooks #473
Rationalise#460OptionalandPatternprecedence values #459- Fix
Sum[i / Log[i], {i, 1, Infinity}]#442 - Add
\[Pi],\[Degree],\[Infinity]and\[I]to parser #441 - Fix loss of precision bugs #440
- Many minor bugs from fuzzing #436
Positive/Negativedo not numerify arguments #430 fixes #380- Chains of approximate identities #429
- Logical expressions behave inconsistently/incorrectly #420 fixes #260
- Fix
Take[_Symbol, ___]#396 - Avoid slots in rule handling #375 fixes #373
Gather,GatherBy,Tally,Union,Intersect,IntersectingQ,DisjointQ,SortByandBinarySearch#373- Symbol string comparison bug #371
- Fix
Begin/BeginPackageleaking user-visible symbols #352 - Fix
TableFormandDimensionswith an empty list #343 - Trailing slash bug #337
Globalsystem bug #336Nullcomparison bug #371CompoundExpressionandOut[n]assignment bug #335 fixes #331- Load unevaluated cells #332
- Large expression formatting with
$OutputSizeLimit#581 - Faster terminal output #579
- Faster
walk_paths#578 - Faster flatten for
Sequencesymbols #577 - Compilation for plotting #576
Sequenceoptimisations #568- Improvements to
GatherBy#566 - Optimised
Expressioncreation #536 Expressioncaching #535Definitionscaching #507- Optimised
Position,Cases,DeleteCases#503 - Optimised
StringSplit#502 - Optimised
$RecursionLimit#501 - Optimised insert_rule #464
- Optimised
IntegerLength#462 - Optimised
BaseExpressioncreation #458 - No reevaluation of evaluated values #391
- Shortcut rule lookup #389
- 15% performance boost by preventing some rule lookups #384
- 25% performance boost using same over
__eq__ - n log n algorithm for
ComplementandDeleteDuplicates#373 - Avoid computing
x^yinPowerMod[x, y, m]#342
- Improve syntax error messages #329
SVD,LeastSquares,PseudoInverse#258, #321- Python 2.7, 3.2-3.5 via six support #317
- Improvements to
Riffle#313 - Tweaks to
PolarPlot#305 StringTake#285Norm#268 #270Total,Accumulate,FoldList,Fold#264, #252Flatten#253 #269Whichwith symbolic arguments #250Min/Maxwith symbolic arguments # 249
- Upgrade to ply 3.8 (issue #246)
- Drop interrupting cow #317
- Add six (already required by Django) #317
- Span issues with negative indices #196 fixed by #263 #325
- SVG export bug fixed by #324
- Django runserver threading issue #158 fixed by #323
- asymptote bug building docs #297 fixed by #317
- Simplify issue #254 fixed by #322
ParametricPlotbug fixed by #320DensityPlotSVG regression in the web interface- Main function for server.py #288, #289 fixed by #298
- ply table regeneration #294 fixed by #295
- Print bar issue #290 fixed by #293
- Quit[] index error #292 partially fixed by #307
- Quit definition fixed by #286
- Conjugate issue #272 fixed by #281
- Improvements to 3D Plotting, see #238
- Enable MathJax menu, see #236
- Improvements to documentation
- Upgrade to SymPy 0.7.6
- Upgrade to ply3.6 (new parsetab format, see #246)
- Upgrade to mpmath 0.19
IntegerDigits[0]
- Readline tab completion
- Automatic database initialisation
- Support for wildcards in
ClearandClearAll - Add
Conjugate - More tests and documentation for
Sequence - Context support
- Fix unevaluated index handling (issue #217)
- Fix
Solvetreating one solution equal to 1 as a tautology (issue #208) - Fix temporary symbols appearing in the result when taking derivatives with respect to
t(issue #184) - Typo in save worksheet help text (issue #199)
- Fix mathicsserver wildcard address binding
- Fix
Dotacting on matrices in MatrixForm (issue #145) - Fix Sum behaviour when using range to generate index values (issue #149)
- Fix behaviour of plot with unevaluated arguments (issue #150)
- Fix zero-width space between factors in MathJax output (issue #45)
- Fix
{{2*a, 0},{0,0}}//MatrixFormcrashing in the web interface (issue #182)
ElementDatausing data from Wikipedia- Add
Switch - Add
DSolveandRSolve - More Timing functions
AbsoluteTiming,TimeUsed,SessionTime,Pause - Date functions
DateList,DateString,DateDifference, etc. - Parser rewritten using lex/yacc (PLY)
- Unicode character support
PolarPlot- IPython style (coloured) input
VectorAnalysisPackage- More special functions (Bessel functions and orthogonal polynomials)
- More NumberTheory functions
Import,Export,Get,Needsand other IO related functions- PyPy compatibility
- Add benchmarks (
mathics/benchmark.py) BaseFormDeleteDuplicates- Depth, Operate Through, and other Structure-related functions
- Changes to
MatrixFormandTableFormprinting - Use interrupting COW to limit evaluation time
- Character Code functions
- Fix divide-by-zero with zero-length plot range
- Fix mathicsserver exception on startup with Django 1.6 (issues #194, #205, #209)
- Compatibility with Sage 5, SymPy 0.7, Cython 0.15, Django 1.2
- 3D graphics and plots using WebGL in the browser and Asymptote in TeX output
- Plot: adaptive sampling
- MathJax 2.0 and line breaking
- New symbols:
Graphics3Detc.,Plot3D,ListPlot,ListLinePlot,ParametricPlot,Prime,Names,$Version - Fixed issues: 1, 4, 6, 8-21, 23-27
- Lots of minor fixes and improvements
- Number of built-in symbols: 386
Compatibility with Sage 4.0 and other latest libraries
Resolved several issues
Initial version