There are no native wavelet packages in sage. But there is a great module in python that contains, among other things, forward and inverse discrete wavelet transforms (for one and two dimensions). It comes bundled with seventy-six wavelet filters, and allows support to build your own! The name is PyWavelets, written by Tariq Rashid, and can be retrieved from In order to install it in sage, take the following steps:

Download the latest version, and unpack it.

% tar xvfz PyWavelets-0.2.0.tar.bz2

Navigate to the top-level directory of the newly created PyWavelets folder, and install the package in sage.

% /Applications/sage/sage -python install

This should be enough! Open a sage session, and import the pywt module:

>>> import pywt
>>> dir(pywt)
['BaseNode', 'MODES', 'Node', 'Node2D', 'Wavelet', 'WaveletPacket', 'Wavelet
Packet2D', '__all__', '__author__', '__builtins__', '__doc__', '__file__',
'__license__', '__name__', '__package__', '__path__', '__version__', '_pywt'
, 'centfrq', 'downcoef', 'dwt', 'dwt2', 'dwt_coeff_len', 'dwt_max_level', 'd
wtn', 'families', 'functions', 'idwt', 'idwt2', 'intwave', 'numerix', 'orthf
ilt', 'qmf', 'release_details', 'scal2frq', 'swt', 'swt2', 'swt_max_level',
'thresholding', 'upcoef', 'wavedec', 'wavedec2', 'wavelist', 'waverec', 'wav

It might happen that the installation is not very clean:

>>> import pywt
ImportError                               Traceback (most recent call last)

/Users/blanco/Documents/Research/PyWavelets-0.2.0/ in ()

/Users/blanco/Documents/Research/PyWavelets-0.2.0/pywt/ in ()
     11 """
---> 13 from _pywt import *
     14 from multilevel import *
     15 from multidim import *

ImportError: No module named _pywt

In that event, simply find where the library is in your PyWavelet package, and place a link in your sage libraries:

% sudo ln -sv ./PyWavelets-0.2.0/build/lib.macosx-10.6-i386-2.6/pywt/ /Applications/sage/local/lib/.

Once installed, you can get a flavor of what it means to work with this module by exploring a little. For example, to find out how many different families of wavelets are implemented, or the names of each of the filters present in the package, simply issue

>>> pywt.families()
['haar', 'db', 'sym', 'coif', 'bior', 'rbio', 'dmey']

>>> pywt.wavelist()
['bior1.1', 'bior1.3', 'bior1.5', 'bior2.2', 'bior2.4', 'bior2.6', 'bior2.8', '
bior3.1', 'bior3.3', 'bior3.5', 'bior3.7', 'bior3.9', 'bior4.4', 'bior5.5', 'bi
or6.8', 'coif1', 'coif2', 'coif3', 'coif4', 'coif5', 'db1', 'db2', 'db3', 'db4'
, 'db5', 'db6', 'db7', 'db8', 'db9', 'db10', 'db11', 'db12', 'db13', 'db14', 'd
b15', 'db16', 'db17', 'db18', 'db19', 'db20', 'dmey', 'haar', 'rbio1.1', 'rbio1
.3', 'rbio1.5', 'rbio2.2', 'rbio2.4', 'rbio2.6', 'rbio2.8', 'rbio3.1', 'rbio3.3
', 'rbio3.5', 'rbio3.7', 'rbio3.9', 'rbio4.4', 'rbio5.5', 'rbio6.8', 'sym2', 's
ym3', 'sym4', 'sym5', 'sym6', 'sym7', 'sym8', 'sym9', 'sym10', 'sym11', 'sym12'
, 'sym13', 'sym14', 'sym15', 'sym16', 'sym17', 'sym18', 'sym19', 'sym20']

To compute one level of the Haar-wavelet coefficients of a given image (the top level alone), we proceed as follows:

from numpy import *
import scipy


Aprox, Details = pywt.dwt2( image, pywt.Wavelet('haar') )
HorizDetail, VertDetail, DiagDetail = Details
Approximation Horizontal Detail
Vertical Detail Diagonal Detail