The following are links to scientific software libraries that have been recommended by Python users.
Number Crunching and Related Tools
This page lists a number of packages related to numerics, number crunching, signal processing, financial modeling, linear programming, statistics, data structures, date-time processing, random number generation, and crypto.
Data Structures
PyPolyhedron [details] [source] Calculate polyhedron's V- and H-representation. This is a Python interface to a C-library cddlib (Pearu Peterson)
- avl_tree
[details] [source] AVL module provide a hybrid between a dictionary and a list which can come in handy. AVL trees (named after the inventors, Adel'son-Vel'skii and Landis) are balanced binary search trees. (Sam Rushing)
- bplustree
[details] [source] Classical compsci B+trees, implemented entirely in Python: Fast, portable file based indexing with range queries and including a dbm-compatibility mode. (Aaron Watters)
- fsm
FiniteStateMachine module. (Skip Montanaro)
- graph_lib
[details] [source] This module defines the Python class Graph. Graph is loosely modelled after the Library of Efficient Data types and Algorithms (LEDA). It includes methods for constructing graphs, BFS and DFS traversals, topological sort, etc.
- kjbuckets
[details] [source] kjbuckets is a C extension to python which defines three Python data types kjSet, kjGraph, and kjDict, implemented using a fast and space efficient hash table strategy. The types are tightly coupled and may be combined and manipulated using a collection of fast "set at a time" operations written in C. If you need to manipulate collections and mappings quickly take a look at this module. It comes with no warrantee of course, but it has been pounded pretty heavily and I consider it fairly solid. (Aaron Watters)
- npstruct
[details] [source] An extension module useful for parsing and unparsing binary data structures. Somewhat like the standard struct module, but with a few extra features (bitfields, user-function-fields, byte order specification, etc...) and a different API more convenient for streamed and context-sensitive formats like network protocol packets, image and sound files, etc. (Sam Rushing)
Date/Time
- mxDateTime
[details] [source] These types were created to provide a consistent way of transferring date and time data between Python and databases. Apart from handling date before the Unix epoch (1.1.1970) they also correctly work with dates beyond the Unix time limit (currently with Unix time values being encoded using 32bit integers, the limit is reached in 2038) and thus is Year 2000 and Year 2038 safe. (M.-A. Lemburg)
- Mayalib
[details] [FTP://www.pauahtun.org/pub/mayalib.zip [source]] Mayan dates and numbers (math) for Python. (Ivan Van Laningham)
- normalDate
NormalDate is a specialized class to handle dates without all the excess baggage (time zones, daylight savings, leap seconds, etc.) of other date structures. (Jeff Bauer)
FFT
- fourier
[details] [source] A set of routines to perform Fourier transforms using pure (Numerical) Python. These are slower by a factor of 2-10 than pure C version in the FFT module (which is pretty good for a pure Python solution), but they make an interesting example. (Tom Hochberg)
PyIMSL -- http://www.roguewave.com/products/imsl-numerical-libraries/pyimsl-studio.aspx
Finance
- pyfi
[details] [source] pyfi provides a set of functions that perform commonly used financial calculations.
- pyFinancials
[details] [source] A collection of algorithms for advanced financial calculations. (G. P. Ciceri)
PyIMSL -- http://www.roguewave.com/products/imsl-numerical-libraries/pyimsl-studio.aspx -- Includes many standard financial calculations plus many other general functions used in finance.
MibianLib -- Options Pricing Library http://code.mibian.net
Geometry
PyGTS - http://pygts.sourceforge.net/ -- PyGTS is a python package used to construct, manipulate, and perform computations on triangulated surfaces. It is a hand-crafted and pythonic binding for the GNU Triangulated Surface (GTS) Library (http://gts.sourceforge.net/).
Interface
- SAML
[details] [source] Interface to the "Simple Algebraic Math Library", a C library for computer algebra, together with some application programs: a desktop calculator, a spreadsheet (sort of) and a program to factorize integers. (Thierry Bousch)
- pymat
PyMat is an interface between NumPy and a MATLAB engine session. It can be used to support NumPy's functionality with the features of MATLAB. An example module is included that presents a very simple interface to MATLAB's plotting functions. This allows you to, for example, plot NumPy arrays in a MATLAB plot window. (Andrew Sterian)
- PYML
[details] [source] PYML is an interface between the computer language Python and Mathematica. Mathematica expressions can be written in Python code, evaluated, and their results returned to Python. Support for postscript graphics returned from Mathematica exists. (David Konerding)
Mixed Integer and Linear Programming
- Coopr
[details] [download] A COmmon Optimization Python Repository that includes Pyomo: a Pythonic Algebraic Modeling Language for mixed integer and linear programming.
- pulp-or Mixed Integer Programming (MIP) and LP
[details] [download] PuLP is an LP modeler written in python. PuLP can generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, Gurobi and XPRESS to solve linear problems. PuLP can be installed from pypi via
$easy_install pulp-or
- cvxopt
CVXOPT supports linear, quadratic and other advanced types of convex programming. It also has a interface to blas and lapack and is compatible with NumPy.
- lpsolvpy
[details] [source] An interface to the LGPL'd numerical linear program solver lp_solve. (Michael Pronath)
- Lp_solve5 (5.1 and 5.5) Mixed Integer Programming (MIP) and LP - New ones, NO python binding yet. Volunteers needed for python bindings.
[details] [source] CPLEX, LINDO, AMPL/MathProg, LP etc. formats supported. (Noli Sicad)
- pycplex
[details] Python interface to the ILOG CPLEX Callable Library.
- GLPK (GNU Linear Programming Kit) MIP and LP
Python bindings [source]
- pySimplex
[pysimplex] (broken link) [details] (broken link) [source] (broken link) Pysimplex provides some basic symbolic programming tools for constructing, solving and optimizing systems of linear equations and inequalities. It includes an implementation of the classical SIMPLEX linear optimization algorithm as well as a filter for parsing and optimizing linear models encoded using the standard MPS format. (Aaron Watters)
- Simplex
[details] [source] Simplex minimizes an arbitrary nonlinear function of N variables by the Nedler-Mead Simplex method. (Vivake Gupta)
PyIMSL -- http://www.roguewave.com/products/imsl-numerical-libraries/pyimsl-studio.aspx
Matrix/Vector
- matrix
[details] [source] Yet Another Matrix Module. This one leans more toward the flexible end of the spectrum, sacrificing performance for correctness. For example, it can correctly handle rationals and other strange things being inserted into it. Also implemented: LU[P] decomposition, and a simultaneous linear equation solving capability. Most of the standard matrix ops: transpose, determinant, inverse, etc.. along with some functional-style methods for mapping and iteration. (Sam Rushing)
- Sparsemodule (Links are broken )
[details] [source] An extension module wrapping the sparse library. It can be used for solving large systems of linear equations. (Neil Schemenauer)
MatPy [details] [source] A Python package for numerical computation and plotting with a
MatLab-like interface. It currently consists of wrappers around the Numeric, Gnuplot and SpecialFuncs packages. It provides an alternative interface to NumPy that is somewhat more convenient for matrix and vector computation. Eventually both will be based directly on the same low level routines. We are also looking for the possibility of interface to Octave. (H. Zhu)
Music
- ratio
[details] [source] For those who are big fans of Just Intonation, one tedious aspect of this is that you end up fondling ratios a lot. The math gets boring after a while, though I do believe you should be able to do the math on your own to get a feel for what it is you're doing. Having said that, I decided I needed some help because I got sick of reducing multiplied ratios. I've written a quick Python module, ratio.py, which handles a lot of the tedium. In particular, building up JI tetrachords and scales based on justly intuned chords or by katapyknosis is pretty simple with this module. (William Annis)
Neural Networks
- bpnn
[source] A simple back-propagation neural network module. (Neil Schemenauer)
PyIMSL -- http://www.roguewave.com/products/imsl-numerical-libraries/pyimsl-studio.aspx
Numerics
- numberTheory [details !? FIXME: was same as source]
[source FIXME: broken link] Collection of functions from the book numberTheory. Darrell Gallion.
