MiraMath is a free software package designed for handling simple and complex mathematical calculations. It has a robust programming toolbox and can be used to create many industrial applications.

This application is inspired by Mathcad. It is still pre-alpha quality. The user can enter equations, click on them and edit them. Clicking outside an equation will cause it to be evaluated and the results displayed.  The program is written in Python and uses SciPy for fast computation.  The SciPy Matrix and Array classes are exposed.

At the moment basic features are available.  Basic editing features such as copy/cut/paste are working.

How it works:
All visible equations characters are subclassed from the QGraphicsItem class.  A special internal representation consisting of keywords and the visible characters is used to store the equations.

Two parsers operate on this internal representation.
The first parser makes use of the keywords and via a recursion algorithm lays out the visible equation characters on the canvas. E.g places a 2 above and to the right of x to produce display x-squared.  This parser is executed after every keystroke whilst editing an equation. On a human time scale it is fast enough even for the fastest typers.

The second parser uses the keywords and a ASCII text equivalent of the visible characters in the equation to produce a mini-Python program.  This program performs the actual mathematics.  Any results from this program are then fed into a third parser that adds additional keywords and characters to the equation. The displayed equation is updated to show the results.

2D plotting is achieved using the fast Qwt library.  The Qwt plots are embedded into the Qt canvas using the QGraphicsWidget object.  Plots can be resized within the canvas by clicking and dragging the resize handles

3D plotting is still experimental. At the moment Qt does not allow embedded GL widgets on its' canvas so for now a copy to a QGraphicsPixmapItem is performed which slows down the mouse interations with the plot.  Mouse events from the QGraphicsPixmapItem are relayed back to the GLWidget.

Future features:
Symbolic computations using SymPy
More 2D and 3D plot types
Expose more SciPy functionality

Miramath Developer's Info..