Python Modules in Mathics-Core¶
The fundamental Python modules that make up the mathics-core
github repository are described below.
mathics.builtin¶
mathics.builtin
defines top-level Mathics3 Builtin Functions and Variables.
Mathics3 has over a thousand Built-in Functions and Variables. Many of of these have their top-level definition here. By “top-level definition”, we mean defining the name that the Symbol is given inside Mathics3, its documentation string, and its summary text, and smallish things like this.
When the Mathics3 Symbol being defined is a Builtin Function, there are also rewrite rules, error messages related to the function, the function signature and function attributes, like Hold
, or Listable
, are defined here. You can think of this as analogous to C/C++ header .h
files where top-level or overall information is defined without specifying too much of the implementation detail.
Each module under mathics.builtin
collects a related set of Mathics3 Builtin Functions and Variables. These are typically found in WMA organized as “Language Guides”.
For example, mathics.builtin.numeric
contains some of the numerical functions that are found in WMA Numerical Functions Guide.
This includes built-in functions:
Abs
,Chop
,RealAbs
,RealSign
, and so on.
Note however that the coverage of Builtin Functions by WMA Guides is not unique; so there is some arbitrariness in which module or guide is used to place a Builtin Function.
As Mathics3 is grows, we have been adding submodules under mathics.builtin
. For example, mathics.builtin.statistics
is roughly equivalent to WMA Descriptive Statistics. Under that module, there are submodules like mathics.builtin.statistics.dispersion
to group Builtin Functions related to “Dispersion Statistics”.
Modules outside of mathics.builtin
implementation-specific of particular Builtin functions. mathics.eval
contains the bulk of a evaluation implementation after parameter checking is done. mathics.compile
contains compilation implementation details. However as with the C/C++ header, .h
, versus body, .c
, analogy, you may find some looseness here as historically the code has not followed this organization.
mathics.core¶
This is the core of the mathics-core
package.
Here you find the the lowest, most fundamental modules and classes.
Objects here are fundamental to the system. These include objects like:
Symbols
,Numbers
,Rational
,Expressions
,Patterns
,Rules
, and others.
While there maybe some parts of mathics-core
that could conceivably be written in
Mathics3, for efficiency, everything here is written in Python.
mathics.core.builtin¶
This module contains Class definitions used in mathics.builtin
modules that define the
base Mathics3’s classes: Predefined
, Builtin
, Test
, SympyFunction
, MPMathFunction
, Operator
and from that:
UnaryOperator
,BinaryOperator
,PrefixOperator
,PostfixOperator
, and others.
mathics.core.convert¶
Routines here convert between various internal representations such as
between Expressions
, LLVM functions, SymPy Arguments, MPMath
datatypes and so on. However this does not include the initial
conversion a parsed string into one of the internal
representations. That is done in the parser.
mathics.core.compile¶
This module contains Mathics3 Compile
implementation details. At present, we use LLVM for this.
mathics.core.eval¶
This module contains Mathics3 Evaluation Functions.
Routines here are core operations or functions that implement evaluation. If there were an instruction interpreter, these would be the instructions.
These operations then should include the most commonly-used Builtin-functions like
N[]
and routines in support of performing those evaluation operations/instructions.
Performance of the operations here can be important for overall interpreter performance.
It may be even be that some of the functions here should be written in faster language like C, Cython, or Rust.
mathics.core.parser¶
This module contains routines that takes tokens from the scanner (in a separate module and repository) and parses this into some sort of M-Expression as its AST (Abstract Syntax Tree).
There is a separate README for describing how this works.
mathics.doc¶
Module for handling Mathics-style documentation.
Right now this covers common LaTeX/PDF and routines common to Mathics3 Django. When this code is moved out, perhaps it will include the Mathics3 Django-specific piece. Mathics’ home-grown documentation system.
mathics.format¶
This module contains Mathics3 Lower-level formatting routines.
Lower-level formatting routines.
Built-in Lower-level formatting includes Asymptote, MathML, SVG, threejs, and plain text. We hope and expect other formatting to other kinds backend renderers like matplotlib, can be done by following the pattern used here.
These routines typically get called in formatting Mathics Box objects.
The higher level _Forms_ (e.g. TeXForm
, MathMLForm
) typically cause
specific formatters to get called, (e.g. latex, mathml). However, the
two concepts and levels are a little bit different. A given From can
cause invoke of several formatters, which the front-end can influence
based on its capabilities and back-end renders available to it.
For example, in graphics we may be several different kinds of renderers, SVG, or Asymptote for a particular kind of graphics Box. The front-end nees to decides which format it better suited for it. The Box, however, is created via a particular high-level Form.
As another example, front-end may decide to use MathJaX to render TeXForm if the front-end supports this and the user so desires that. Routines here are core operations or functions that implement evaluation. If there were an instruction interpreter, these would be the instructions.
These operations then should include the most commonly-used Builtin-functions like
N[]
and routines in support of performing those evaluation operations/instructions.
Performance of the operations here can be important for overall interpreter performance.
It may be even be that some of the functions here should be written in faster language like C, Cython, or Rust.