Genius Mathematics Tool and the GEL Language

What is it

Genius is a general purpose calculator program similar in some aspects to BC, Matlab, Maple or Mathematica. It is useful both as a simple calculator and as a research or educational tool. The syntax is very intuitive and is designed to mimic how mathematics is usually written. GEL is the name of its extension language, it stands for Genius Extension Language, clever isn't it? In fact, many of the standard genius functions are written in GEL itself.

What can it do?

• Arbitrary precision integers, multiple precision floats.
• Rational numbers, stored as quotient and denominator.
• Complex numbers, stored in Cartesian coordinates as usual.
• Math-like-looking expressions, tries to be as much a what-you-mean-is-what-Genius-understands, up to a limit of course.
• Matrix calculations / Linear Algebra, with many related functions.
• Number theory.
• Calculus, numerical and even very limited symbolic calculations.
• Statistics, all the basic statistical functions.
• Numerical equation solving, polynomial roots, etc...
• Combinatorics.
• Most common elementary / trigonometric functions.
• Modular arithmetic, including inversions and modular arithmetic on matrices.
• A complete programming language, with automatic typing. In fact large part of Genius standard library is written in GEL.
• 2D Function line plots, standard 2D graphs of up to 10 functions at once, with possibility to export to EPS or PNG.
• Parametric plots, with possibility to export to EPS or PNG.
• 3D Function surface plots, with possibility to export to EPS or PNG
• Slopefield/Vectorfield plotting.
• GUI IDE where you can edit and run/test your programs.
• Can output matrices in LaTeX, Troff (eqn) or MathML, this is I think a very cool feature that allows you to copy stuff directly from Genius to a document in LaTeX, troff or MathML.

An example expression can look like:
30*70 + 67^3.0 + ln(7) * (88.8/100) + |sin(40)| - 3i

Or perhaps to sum the first 70 terms of the harmonic series one would do:
sum n=1 to 70 do 1/n

To define a function that takes the square of a number and adds one, you could do:
function f(x) = x^2 + 1

To numerically integrate f from -1 to 1:
NumericalIntegral(f, -1, 1)

To factorize a number into primes:
Factorize(123456789)

To solve a linear system Ax=b:
SolveLinearSystem(A,b)

Given y' = x^2 + y, with initial condition y(0) = 0, to find y(1) using Runge-Kutta with 20 increments:
RungeKutta (`(x,y) = x^2 + y, 0, 0, 1, 20)

The original goal of Genius was to build a better BC then BC. That goal has been attained and surpassed long ago with Genius not having much in common with BC anymore. It is now venturing into the territory of Matlab/Octave, Maple and Mathematica, though it is not quite any of these. I do not think it will ever be a replacement for any, but it is already a very good tool for experimentation, and I have used it in research many times.

What does Genius stand for?
I have no idea ... the G could be GNOME or GNU. I think it used to stand for something and I forgot. So now it's just Genius. Originally the window title was "GnomENIUS Calculator" but that just sounded stupid, so that's not it either.

And of course Genius is free software, released under the GNU General Public License.

Future? That is, what will Genius do at some point in the future:

• Better plotting, probably move to PlPlot. GtkExtra is has pretty terrible interface, is essentially unmaintained and doesn't look as good as it could. We could also probably just provide direct interface to PlPlot allowing genius to do everything plplot can in addition to some limited high level stuff we do right now.
• Decimal floating point numbers. We should really work in decimal I think.
• Polynomial handling (it does some polynomial handling by using vectors already but it is only for one variable polynomials)
• Some more symbolic calculation (this is connected to polynomial handling). We should be able to at least simplify, if not integrate.
• Handle roots and constants like pi and e symbolically if desired instead of converting to float. We can do both in parallel in fact.
• Better set support (instead of faking it with vectors)

Acknowledgments: During some of the development the author (Lebl) was partially supported by NSF grant DMS 0900885, NSF grant DMS 1362337, University of Illinois at Urbana-Champaign, University of California, San Diego, University of Wisconsin-Madison, Oklahoma State University.

Genius in Use

Here is a non-exhaustive list of things for which Genius was used.

Manual / Documentation

The manual is written in DocBook and is available for browsing in the GNOME help browser directly from the program. Enter through the Help menu, or type manual on the command line. Typing help FunctionName will bring up the manual entry for that function.

There are some alternatives online (always for the newest version):

Wiki

I set up a sort of a Genius Wiki on Google Sites. I can't let anyone just willy nilly edit things (google doesn't allow that, and it might be a bad idea anyway). Let me know if you want to have write access. If you have some useful tips/tricks or GEL code to share.

Help out with Genius

There are a lot of things that can be done for genius, and I only have very limited time. There are many ways you can help with genius:

• Help with programming.
• Test and write more test suites to verify that everything works right.
• Write useful GEL functions for the standard library.
• Improve documentation.
• Packages for your favourite distribution / OS.

News

NEWS file (what changed between releases)

May 15th 2018:

Release 1.0.24. A few bug fixes, internal version of vte to fix building on newer systems. Some improvements to the examples. See NEWS above.

May 10th 2017:

Release 1.0.23. A few bug fixes, help system revamped, couple of improvements and fixes to examples. See NEWS above.

December 26th 2016:

Release 1.0.22. A few bug fixes, build fixes, plus new and improved examples (demos). See NEWS above.

January 6th 2016:

Release 1.0.21. A maintainance release, a couple of minor improvements and fixes. See NEWS above.

March 9th 2015:

Release 1.0.20. Mostly a maintainance release, a couple of minor improvements and fixes. See NEWS above.

September 23rd 2014:

Release 1.0.19. The biggest new thing is the Examples menu with a bunch of demos to run and play around with. There are a few other new things. See NEWS above.

August 26th 2014:

Release 1.0.18. Allow plotting point clouds, new functions to improve animations, improve vector building notation with floats, add functions for listing variable values and tables of function values, errors while plotting go to the console rather than a dialog for a less annoying experience. Also several other new functions and improvements, and lots of fixes. See NEWS above.

June 25th 2013:

Release 1.0.17. Plotting uses cairo (and is antialised) by using updated GtkExtra. Improvements to line plots including autoscaling the y axis by default. PDF export. Lots of of fixes and other minor improvements all over. See NEWS file above for more details.

December 17th 2012:

Release 1.0.16. Plotting improvements, new functions, lots of fixes, translation updates. See NEWS file above.

March 27th 2012:

Release 1.0.15. Minor fixes, enhancements, and lots of translation updates. See NEWS file above.

July 29th 2011:

Release 1.0.14. Minor bug fixes.

July 28th 2011:

Release 1.0.13. Minor fixes and ehnacements, also lots of translations updates including the manual. See NEWS above.

Mailing List

To subscribe to the Genius mailing list, send a message to minimalist@5z.com with a subject of "subscribe genius-list".

Here is the archive of this list

Requirements

Genius is a program for UNIX or Linux type computers, so you need one of those. I do all my development on Fedora Linux (or Ubuntu on some machines) so you will probably have most luck with that or any other GNU based system. It is (or was some time ago) also possible to build under Mac OS X (see instructions) although I don't have access to Mac OS X so I can't verify that every release will in fact build cleanly there.

Genius includes a GNOME GUI frontend which requires GNOME2 and VTE (part of GNOME 2.2 and onward). Any recent Linux distribution should work. Read below about MPFR and GtkSourceView. RPMS should build with rpmbuild using the tarball as it includes a spec file. If you don't have GNOME you can build the command-line-only version, which requires at least glib2 in addition to readline, GMP, and MPFR.

Genius requires readline. Get the newest version if you are having troubles.

Genius also requires the excellent GMP library for its number manipulations. This is a very optimized, multiple precision floating point and arbitrary precision int library which is just blazing fast and genius owes a large part of its speed to GMP. Speed is a relative thing, it's faster then bc, but hell of a lot slower then octave which uses native types.

Another requirement is MPFR, an extension of GMP, which Genius uses for all floating point computations. Genius used to include a version of MPFR, but this was a pain. New enough (2.2+) MPFR is now fairly commonly installed.

You also need GtkSourceView to get the syntax highlighting and such (it's not required, but is very nice to have).

 Source http://ftp.5z.com/pub/genius/ or http://ftp.gnome.org/pub/GNOME/sources/genius/ Ubuntu / Mint A package is in the universe repository (edgy and higher), so just install the package genius and gnome-genius (in hardy and higher). Search the Ubuntu packages site for genius and for gnome-genius. Debian Install the package gnome-genius and genius. Search the Debian packages site for genius or gnome-genius. Fedora / RedHat RPM Install the packages gnome-genius and genius on Fedora through yum. I guess this should work for other RPM based distros and is probably better than an RPM built from the spec file in the tarball. Look for the genius package on koji.fedoraproject.org. OpenSUSE Install the packages gnome-genius and genius. To see what version they are up to, search for genius and gnome-genius on software.opensuse.org. GARNOME Genius should be part of the "hacker-tools." FreeBSD Look for the genius package at FreshPorts. NetBSD Look for the genius package at pkgsrc. Gentoo Look for the genius package.

You should also be able to build an RPM with "rpmbuild -ta <tarball>", but this has not been tested recently. It may be better to get an RPM from your distribution repository or perhaps the Fedora RPM above.

Screenshots

Screenshot of 1.0.19 showing the Lorenz attractor example.

Screenshot of 1.0.19 showing the Sierpinski triangle example.

Screenshot of 1.0.5 showing a slope field with a few solutions drawn.

Screenshot of 1.0.1 showing a parametric plot of the butterfly curve.

Here's one of 0.6.2 (CVS Aug 4 '04) showing the new surface plotting using GtkExtra-2.

Here's one of 0.5.8 (CVS Mar 23 '04, 0.6.0 is very similar to this) showing the line plot improvements

Here's one of 0.5.7 and the source code editing using GtkSourceView

Here are some even older ones:

Here's one of 0.5.3 (CVS Feb 28 '03) and the very basic graph support

Here's one of 0.5.2 (actually doing my crypto homework right there :)

For real nostalgia, here are some pics from 1998. Here is when it was still part of GNOME 0.13, first standalone release 0.1, and 0.2.0. Do note how you could switch between infix, postfix and prefix notation. No you can't do that anymore because that was stupid.