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.

    PyPI version

  • 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.

    PyPI version

  • 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.

    PyPI version

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

    PyPI version

  • 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.)

    PyPI version

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

    PyPI version

  • 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.

    PyPI version

  • 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.

    PyPI version

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

    PyPI version

  • 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.

    PyPI version

  • 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.)

    PyPI version

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

    PyPI version

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.

    PyPI version

  • 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.

    PyPI version

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)

    PyPI version

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

    PyPI version

  • 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)

    PyPI version

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

  • A Sokoban solver.

  • 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.