Software

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

Active projects

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

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

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

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

  • Python bindings for existing software

    • 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.)
    • 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.)
    • PyVisFile allows writing large files of visualization data in the Vtk and silo formats. Pyvisfile is under 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.
  • 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.
  • Distributing other people's work

Not directly related to research, but still fun:

  • synoptic helps me keep my notes in order--research or otherwise. Available under the terms of the MIT license.
  • 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)
  • madman is like iTunes, only better. :) And for Linux. Licensed under the copyleft GPL2.
  • 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 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

  • PyUblas allows seamless interoperability between Numpy and Boost Ublas. Available under the terms of the MIT license.
  • 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.