# Software

I’ve written a fair bunch of software related to my research:

## Active projects related to scientific computing

Most of my software these days has to do with research:

• PyOpenCL makes the industry-standard OpenCL compute abstraction accessible from Python. It features automatic cleanup functionality and tight integration with Numpy. In the same spirit as PyCUDA, rather than being merely a nice interface, it aims to enable a new, generative style of programming. Available under the terms of the MIT license.

• PyCUDA makes the Nvidia CUDA compute abstraction accessible from Python. It features automatic cleanup functionality and tight integration with Numpy. But rather than merely a nice interface to CUDA, it aims to enable a new, generative style of GPU programming. It further contains a GPU-based array package and building blocks for common vectorial and reductive operations. Available under the terms of the MIT license.

• Loo.py is a code generator for array-based number crunching code on CPUs and GPUs, using OpenCL Available under the terms of the MIT license.

• ModePy provides interpolation, differentiation and many other ‘spectral-element’-like tools for unstructured high-order discretizations. Available under the terms of the MIT license.

• MeshPy allows you to generate quality triangular and tetrahedral finite element meshes directly in Python. (MeshPy itself is MIT-licensed, but the mesh generators have more restrictive licenses that prohibit commercial use.)

• PyVisFile allows writing large files of visualization data in the Vtk and silo formats. Pyvisfile is under the MIT license.

• hedge is an unstructured, high-order, parallel Discontinuous Galerkin (DG) code. Its design is focused on two things: being fast and easy to use. While computational efficiency dictates implementation in a low level language, these same low-level languages become quite cumbersome at a higher level of abstraction. This is where the “h” in hedge comes from; it takes a hybrid approach. It allows the user to specify a DG operator in a high-level, mathematically oriented language and then worries about the details of applying this operator in a matrix-free fashion across a wide array of execution environments, including CPUs, GPUs, and MPI-based clusters of CPUs and GPUs. Available under the terms of the MIT license.

• islpy binds Sven Verdoolaege’s integer set library to Python. islpy is under the MIT license, but it depends on the isl, which is under the LGPL.

• CGen allows syntax-tree-based generation of C/C++/OpenCL/CUDA source code. Available under the terms of the MIT license.

• CodePy is a CPU metaprogramming toolkit that supports compilation of C code at runtime and enables dynamic linking of generated code into a running Python instance. Available under the terms of the MIT license.

• PyMetis allows you to partition graphs into controllable-size lumps, or, as an application of that, partition finite-element meshes for use on parallel computers. (PyMetis itself is MIT, but Metis is non-free as defined by the DFSG.)

• PyUblas allows seamless interoperability between Numpy and Boost Ublas. Available under the terms of the MIT license.

### Small “tool” packages

• Pymbolic is a lightweight library to perform symbolic calculations in Python. If you need to take derivatives, expand polynomials or simplify expressions, Pymbolic is for you. If you neeed heavy-lifting procedures such as limits and integration, you might want to look elsewhere, as I’m not sure these will ever get implemented. Available under the terms of the MIT license.

• Pytools is a mixed bag of Python usefulness. Most of my other Python hacks need this to work. Available under the terms of the MIT license.

## Projects not related to scientific computing (but still fun)

• PuDB is a source-level debugger for Python. It runs in a terminal and is based on Ian Ward’s Urwid library. Available under the terms of the MIT license. (but depends on a GPL library)

• synoptic helps me keep my notes in order—research or otherwise. Available under the terms of the MIT license.

• tagpy is a set of Python bindings for the media tagging library TagLib. Available under the terms of the MIT license. (but depends on an LGPL library)

• A Linux/LIRC interface for the Intervideo XPC-RC01 remote. Available under the terms of the MIT license.

• A Python/PyGame clone of the PopCap game Bejeweled.

• The Unicode Input Helper, a unicode character map program with a bias towards typing math.

## Inactive projects

• Pyrticle is an experimental hybrid Particle-in-Cell solver based on hedge. It forms the testbed for our research into combining discontinuous Galerkin Maxwell field solvers with particle-based solvers for the Vlasov equation. Licensed under the copyleft GPL3.
• Clockwork is a small time tracking script.
• FemPy is a small finite element package in and for Python.
• PyLinear is a (sparse and dense) matrix computation package for Python.
• SDLucid is a multimedia wrapper library.
• ixlib is a (mostly deprecated) tool library for C++.
• WAM is a jump-n-run-n-shoot game about a mole. Incomplete.
• Orbit C++ is a CORBA language binding which I helped create. It lives on in ORBit, Gnome’s CORBA ORB.
• MiniIDE is a tool for your edit-compile-debug cycle. Pretty old, but it does work.
• madman is like iTunes, only better. :) And for Linux. Licensed under the copyleft GPL2.