The SWIG Files

<p><img src="images/projects.png">

<p>
SWIG is being used in an increasing number of applications, most of
which are related to research and development, prototyping, software testing,
and construction of specialized systems.  This page describes
some of the ways in which SWIG is currently being used. 

<p>
(Note : the
opinions expressed here do not necessarily reflect those of any
given employer or organization).

<p>
<hr>
<p>
David Beazley (dmb@viking.lanl.gov) and Peter Lomdahl (pxl@viking.lanl.gov)<br>
<p>
<p>
SWIG is being used to construct a Python interface to the <a
href="http://bifrost.lanl.gov/MD/MD.html">SPaSM</a> molecular dynamics
code at Los Alamos National Laboratory.  Currently this code is being
used to perform large-scale simulations of fracture, shock waves, and
dislocation dynamics. The system runs in parallel on a 12 processor
Sun Enterprise 4000 server and is implemented with MPI and Solaris
multithreading.  The Python interface is used to provide users with an
interactive data analysis, visualization, and prototyping environment.
Users can also interact with underlying C data structures and "steer"
computations as needed.  One of the advantages of SWIG is that it
allows interfaces to be easily constructed from existing code.  The
SPaSM system consists of nearly 300 C functions and the Python
interface is automatically generated during compilation.  This work
was recently featured on the cover of "Computers in Physics" (June,
1997).

<p>
<hr>
<p>
John Schmidt (jas@cs.utah.edu) <br>
<p>
<p>
I am using SWIG to integrate four stand alone software packages into a
unified system controlled by Tcl/Tk scripts.  The unified software
system is used to design and test defibrillation electrodes via
computer simulations of a human subject.  The individual software
pieces include: a visualization package written in C++ using
OpenInventor and Motif, an unstructured mesh generator written in C, a
Finite Element Solver written in C, and a segmentation software
written in C++ using OpenGL and Motif.  SWIG has been crucial to the
development of this project.  With SWIG, the integration of the
individual pieces was trivial.

<p>
<hr>
<p>
David Brydon (brydon@lanl.gov) <br>
<p>
<p>
We are using swig with python to retrieve, analyze, and visualize very
large data sets from ocean model simulations on parallel computers.
We have written C routines that access our data.  Graphics libraries
and Matlab are used to visualize the data.  We are very happy with the
flexible, programmable, powerful tool that results.

<p>
<hr> 	
<p>
Mike Weiblen (mew@paradigmsim.com) <br>
<p>
<p>
Paradigm sells modular C toolkits for developing visual
simulation/virtual reality graphics applications called Vega and another
for spatial audio simulation called AudioWorks.  I've used SWIG to wrap
Vega's and AW's APIs with Silicon Graphics' "sgitcl" to create "vgTcl"
and "awTcl".  Exploiting the power of interactive scripting languages,
they provide the full power of the APIs at runtime, without an
application developer having to anticipate flexibility a priori.  SWIG
has enabled our customers to interact with our toolkits in fundamentally
new ways.
<p>
Several years ago (I believe we discussed this stuff way back in 1994
;-), I created a set of C preprocessor macros that did SWIG-like
things.  It was a very tedious process, making it difficult to follow
changes to an evolving API, but it was useful for proof-of-concept. 
When SWIG 1.1B1 came out in October, I was generously given a R&D budget
to reimplement my project in SWIG.  The project has been a resounding
success!  

<p>
<hr>
<p>
Jonah Lee (jonah@melab.uafsoe.alaska.edu)
<p>
<p>
[We're using SWIG for] wrapping up engineering applications using
finite element method including pre- and post-processing. My program
is somewhat general and is used to solve problems for engineering
materials--metals, polymers and ice-- undergoing plastic (permanent)
deformations. It's mainly used for rapid prototyping, development and
testing. The code runs on workstations, Cray Y-MPs and Cray T3E (when
I get there...  that is).

<p>
<hr>
<p>Jody Winston (jody@sccsi.com) 
<p>
<p>

I have used SWIG to wrap an API that controlled two stepper motors and
a CCD camera on a Linux system that gathered real time image data.  In
Windows, I wrapped an application's C++ API and used SWIG to embed a
Python (pywin) interpreter into the C++ application.  I also used SWIG
to wrap a FORTRAN API that was used to read and write data into a
custom data base.  
<p>
SWIG has allowed me to move the time critical code into C, C++, or
FORTRAN while having the application being controlled by Python.  I
can quickly embed an interpreter into an application.

<p>
<hr>
<p>
Peter Lister (p.lister@cranfield.ac.uk)<br>
<p>
<p>
I'm using [SWIG] for a Perl scriptable version of Van Jacobson's libpcap
packet capture library. I can now use Perl regular expressions to
process packets on the fly. My main reason is to extract information
from ARP packets and automatically maintain our database of IP/MAC
address mappings directly from perl rather than hacking the output of
arpwatch or tcpdump.

<p>
<hr>
<p>
Harald Singer (singer@itl.atr.co.jp) <p>
<p>

[We are using SWIG for] wrapping C libraries  to Python for speech recognition research
at ATR Interpreting Telecommunications Laboratories.
<p>
We are working in a multi-vendor environment (HP-UX, OSF1, Linux,
SunOS, Solaris) and writing new applications has become very tedious.
Therefore, we decided to employ python, but at the same time we would
like to have access to our signal processing libraries etc. that were
and are still written in C.
<p>
The advantages of using Python become more evident every day. For
example, it was fairly easy to write a GUI using python/tk. We are
using this now for interactive error analysis. A typical scenario is
like this:
<p>
<ul>
<li> audio data is collected via microphone/AD (in Python) and sent to the
recognizer frame by frame. 
<p>
<li> the recognizer (C code) makes a decision about speech endpointing and
once it has discovered end of utterance does a callback to the
application (python/tk) with a word lattice as result.
<p>
<li> this word lattice is now displayed for the user in python/tk. 
<p>
<li> the user can now interactively rescore part of the lattices, look at
the detailed acoustic and language model scores, listen to parts of
the utterance, etc.
</ul>
<p>
SWIG helps us in taking away part of the error-prone task of making
the C routines accessible from python and has considerably improved
our efficiency.

<p>
<hr>
<p>
Dominique Dumont (domi@ss7serv.grenoble.hp.com) <p>
<p>
I'm using SWIG to generate a perl5 API on top of HP's OpenCall TCAP
API. TCAP is the top protocol layer of HP's SS7 stack of telecom 
protocol. The perl5 API developemnt effort is a part of the systematic
testing approach we're implementing in the division. 
<p>
The usual way was to write test programs
in C. The main drawback being that developing and running the tests
consumes a lot of time. 
<p>
Now the goal is to write all (or at least most of) the test in perl
allowing a faster cycle time between modifying the API and testing
it. (We'll also be able to debug faster the test programs).
<p>
Perl's power also enables us to write test using oo methodology
(although the API is strictly procedural), thus we can easily develop 
complex test scenarios.
<p>
Hopefully (i.e. if we have some spare time), the next step will be to
combine Tk with Perl and SWIG so we'll be able to monitor with a user
friendly interface the progress of the test suite.

<p>
<hr>
<p>Daniel Michelson (Daniel.Michelson@smhi.se)
<p>
A collegue and I are using SWIG for two purposes, both of which
centre around the creation of a Python-based environment for analysis
and visualization of data from the Swedish national weather radar
network:
<ul>
<li> interfacing old code
<li> interfacing new, performance critical, code.
</ul>
We have a couple of other collegues, also at SMHI R&D, who are working
in satellite-based remote sensing activities and who will be starting to
use SWIG in the near future for their purposes.

<p>
<hr>
<p>Roger Burnham (rburnham@cri-inc.com)
<p>
Thanks again for SWIG... Its fun, allows great productivity while 
avoiding much tedium...
<p>
The current application (there will be many spin-offs/variations) is 
in polarization microscopy.  We manufacture electronically 
controllable retarder plates, and along with a scientist at the 
Marine Biological Lab in Woods Hole have developed an algo/method 
that allows us to visualize a sample's retardance (direction and 
magnitude) over the whole image.  Conventional methods allow you to 
see this structure only along one axis at a time...  The main tools 
I'm using are Python/Tkinter/PIL/NumPy/SWIG.
<p>
So, I've use SWIG to:
<ul>
<li> Wrap a commercial serial communications DLL.
<li> Wrap a commercial frame grabber interface
<li> After prototyping in Python, I move compute intensive routines 
     into DLL's.
</ul>
Our apps are running under Win95.  I thought it was pretty cool to be 
able to control a frame grabber, display live/acquired images, all 
from within Python, within the same day I received the frame grabber 
SDK, never having dealt with such hardware before!

<p>
<hr>
<p>
Simon Gibson (gibson@dstc.qut.edu.au) <p>
<p>

I have been using SWIG to create a Python interface for our
prototype implementation of GSSAPI. This is being done so
that we can incorporate security into the Hector project here
at DSTC. It also means that I can write Python application
programmes. Also now we have a standard interface to GSSAPI
and any implementation should be able to be plugged in.
<p>
Hector is described in an article in the January/February
1997 - Distributed Objects <a href="http://www.ddj.com/ddsbk/1997/1997.01/index.htm">Dr. Dobb's Sourcebook</a>.

<hr>
<p>
Mark Hammond (MHammond@skippinet.com.au)
<p>
<p>

I'm using [SWIG] to write a commericial application, which runs as an NT
service.  It uses the COM extensions to talk native MAPI to exchange
server, the service extensions to run unattended on NT, and the pipe, file
and event modules to manage the service control messages and named pipe
connections from clients.  All modules named above were generated by SWIG. 
The COM extensions will allow (once the .i file is up to it :-) any native
COM interface (ie, not IDispatch (eg, VB/Word/Excel) based) to be supported
by Python.

<p>
<hr>
<p> Michael Bell (michaelb@gold.net.au)
<p>
<p>
I've used SWIG on a Linux platform to create Python modules for
graphing and database access.
<p>
The PGPLOT Graphics Subroutine Library is a Fortran library by Tim
Pearson (tjp@astro.caltech.edu). I understand it is often used by
astronomers.  It may also be built into a C library.
<p>
I used SWIG to wrap the C library wrapping the Fortran library (!)
into a Python module, using some straightforward typemaps to convert
one and two dimensional Python Numeric arrays into the appropriate
pointers.  I haven't methodically tested the full functionality, but
everything I tried works just fine.
<p>
I've also used SWIG to wrap up a library of Fortran subroutines
developed within the Western Australian Department of Environmental
Protection to manage databases of time series meteorological and air
quality data.  I used SWIG to generate a simple shadow class which I
then extended further to make the interface nicer.
<p>
The original library provided, for instance, subroutines opendb(),
writdb(), readdb() and closdb().  My module, epadb.py, provides a
database class, epadb.DB, which is instantiated, d=epadb.DB().  The
database instance then provides methods d.open(), d.read(), d.write()
and d.close(), returning data as Python lists and arrays.
<p>
I'm particularly pleased that I managed to do these things with my
reading only knowledge of C, and lots of cutting and pasting.
<p>
<hr>
<p>
Soeren Henkel (soeren@hni.uni-paderborn.de) <p>
<p>
We are currently in the process of redeveloping OOPUS, a system for
modeling plant systems and generate plant control software from a model.
(Don't ask what OOPUS stands for -it's a German acronym.) We decided to 
reimplement its user inteface using Tcl/Tk. OOPUS puts its models
into an OODBMS, namely POET. So we needed an integration of POET
(which is tightly coupled to C++) with Tcl/Tk, and we've successfully
done that with SWIG.

<p>
<hr>
<p>
Peter A. Tinker (patinker@msmail4.hac.com) <p>
<p>
We're using SWIG to "glue" Tcl/Tk to custom and third-party libraries. In
particular, SWIG provides an elegant means for controlling Sense8
Corporation's WorldToolKit (WTK) virtual environment development system from a
Tk GUI. The result is highly portable code that is
independent of WTK's proprietary GUI yet allows access to virtually all WTK
functions from a Tcl script and/or a Tk GUI. This approach is
being used in a variety of projects involving advanced 3D visualization
on a variety of imcompatible systems.

<p>
<hr>
<p>
Peter-Pike Sloan (ppsloan@cs.utah.edu) <p>
<p>
I have been using SWIG for several projects, mostly to streamline
working with OpenGL under Tcl/Tk.  Examples are a time-critical
framework for viewing Lumigraphs (basically a digital hologram) and a
proof of concept application for optimizing texture coordinates based
on relative importance (determined by analyzing the existing texture
and user specification.)  Using SWIG has dramatically reduced my
development time allowing me to develop code and debug state in an
interpreted environment (currently Tcl, but I think I am going to move
to Python).

<p>
<hr>
<p>
Chris Myers (myers@beamtech.com) <p>
<p>
We at Beam Technologies, Inc. have used SWIG to begin developing an
interpreted Python interface to our PDESolve library.  PDESolve is a
C++ class library for formulating and solving partial differential
equations (using either finite difference methods or finite element
methods), and makes use of OO technology to present a high-level
symbolic interface to the programmer.  This makes the description of
PDE-based problems concise, and enables the embedding of PDE-based
models in larger computational frameworks (e.g., to do PDE-based
design optimization or coupled PDE-based systems).  SWIG has allowed
us very quickly to develop a prototype Python interface to that
library.  Such an interface holds the promise of: (1) allowing even
more rapid prototyping of models, (2) dynamic formulation of models
and solution methods, and (3) a method for conveniently integrating
PDESolve with other packages (i.e., through the Python substrate).
My hope is to make a Python-enabled PDESolve a tool for PDEs something
like what Matlab provides for linear algebra, i.e., a high-level,
interpreted environment for rapid prototyping and interactive
exploration, with an embedded programming language for scripting
complex codes.

<p>
And while I have been looking for a while for a powerful and
extensible interpreted language for use as a front-end to compile codes
(which Python is), SWIG has made the interfacing of that code vastly
easier than it would have been otherwise.  While we are still in the
prototyping stages of this overall approach, SWIG enabled us to get up
and running quickly with a Python interface to PDESolve, and
demonstrate the utility of such an approach for a complex C++ library
(something that SWIG was not originally designed to really tackle).

<p>
<hr>
<p>
Vladimir I.Ulogov (gandalf@starship.skyport.net) <p>
<p>

SWIG is being used to create a Python interface to CLIPS expert system shell
inside my general research job under OODBMS DNET. This extention module
provide full control from Python environment to expert system: Change a
global valiables, register a fact, manipulation with agenda, fact lists,
modules, functions, classes and instances. You can dynamicaly create and
execute CLIPS commands using clips.RouteCommand function call. Module
interface are similar to CLIPS Advanced API, who described into CLIPS
documentation. All additional documentation, Python classes are distributed
too. Module was be tested on Windows/NT and SUN Solaris 2.4 host platforms,
CLIPS version: 6.04, Python version 1.4. This module consist about 270
functions. This job took 3 days of my job at october 1997.

<p>
<hr>
<p>
Pinhong Chen (phchenb@tsmc.com) <p>
<p>
I got a page for
<a href="http://www-cad.eecs.berkeley.edu/~pinhong/scriptEDA"
>EDA applications</a>
using SWIG.

<p>
<hr>
<h3> Tools and Modules </h3>
The following tools and modules have been produced using SWIG
or are related to SWIG.

<ul>
<li><a href="http://www.thestuff.net/bob/projects/blade">BLADE</a>. A web publishing environment.

<p>
<li><a href="http://students.cs.byu.edu/~butler/jni/PyJava.html">PyJava</a>. Provides
Python access to Java methods (Kevin Butler). 

<p>
<li><a href="http://playground.sun.com/~bharat/pilotmgr.html">Pilot Manager</a>. Hook
your US Robotics PalmPilot up to your Sun workstation (Bharat Mediratta).

<p>
<li> <a href="http://www.mic.atr.co.jp/~gulliver/WTK/www">PyWTK</a>.  A Python
interface to the WorldToolKit (a virtual reality modeling toolkit). (Roberto Lopez Gulliver)

<p>
<li> A Python interface to
<a href="http://starship.python.net/crew/robind/index.html">BSD DB 2.7.x</a> (Robin Dunn).

<p>
<li><a href="http://alldunn.com/wxPython/index.html">wxPython</a>. A Python extension
module that encapsulates the wxWindows GUI classes.

<p>
<li> Net-Pcap.  A Perl interface to the libpcap library (Peter Lister).

<p>
<li> X11::Wcl. A Perl interface to the Widget Creation Library (Joe Buehler).

</ul>

<hr>
<h3> Other Application Areas </h3>

These are some of the application areas that I've heard about SWIG being
used (but don't have many details).

<ul>
<li> Semiconductor CAD.
<li> Databases.
<li> Remote sensing.
<li> Scientific visualization and simulation.
<li> Financial Modeling.
<li> Distributed and parallel computing.
<li> Distributed objects (use with CORBA).
<li> Software testing.
</ul>

<hr>
<h3> How are you using SWIG? </h3>

If you would like to list your project here, please
send e-mail to beazley@cs.uchicago.edu.
