2 changes: 2 additions & 0 deletions .gitignore
@@ -1,4 +1,6 @@
MANIFEST
github_changelog_generator_token
pyFFTW.egg-info
build
*.swp
*.pyc
Expand Down
146 changes: 146 additions & 0 deletions CHANGELOG.md
@@ -0,0 +1,146 @@
# Change Log

## [v0.10.1](https://github.com/hgomersall/pyFFTW/tree/v0.10.1) (2016-01-29)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.10.0...v0.10.1)

## [v0.10.0](https://github.com/hgomersall/pyFFTW/tree/v0.10.0) (2016-01-29)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.9.2...v0.10.0)

**Closed issues:**

- Conda downloads are failing [\#76](https://github.com/hgomersall/pyFFTW/issues/76)
- Python 3.4 and WinPython [\#74](https://github.com/hgomersall/pyFFTW/issues/74)
- Installing pyfftw on Anaconda3 on Windows 7 [\#73](https://github.com/hgomersall/pyFFTW/issues/73)
- is python 3.5 supported? [\#71](https://github.com/hgomersall/pyFFTW/issues/71)
- deadlock of cache handler at interpreter shutdown [\#69](https://github.com/hgomersall/pyFFTW/issues/69)
- pyFFTW breaks when forked [\#65](https://github.com/hgomersall/pyFFTW/issues/65)
- build with mingw [\#62](https://github.com/hgomersall/pyFFTW/issues/62)
- Striding in n\_byte\_align not on a uniform standard [\#61](https://github.com/hgomersall/pyFFTW/issues/61)
- No exception on wrong arguments of function call of pyfftw.FFTW\(...\) [\#60](https://github.com/hgomersall/pyFFTW/issues/60)
- pyfftw vs numpy.fft: faster and slower [\#58](https://github.com/hgomersall/pyFFTW/issues/58)
- simple transposes? [\#57](https://github.com/hgomersall/pyFFTW/issues/57)
- `Datatype not supported` with scipy [\#56](https://github.com/hgomersall/pyFFTW/issues/56)
- Update tutorial with new byte align functions [\#53](https://github.com/hgomersall/pyFFTW/issues/53)
- OS X Installation errors: [\#52](https://github.com/hgomersall/pyFFTW/issues/52)
- Wrong results for pyfftw's ifft? [\#51](https://github.com/hgomersall/pyFFTW/issues/51)
- Installing on OS X Mavericks [\#49](https://github.com/hgomersall/pyFFTW/issues/49)
- Install error. Ld cannot find -lfftw3f [\#48](https://github.com/hgomersall/pyFFTW/issues/48)
- new source release with updated licensing [\#43](https://github.com/hgomersall/pyFFTW/issues/43)
- Crash during initialization of FFTW plan for r2c and c2r with Intel compiler [\#37](https://github.com/hgomersall/pyFFTW/issues/37)
- Move FFTW class definition to pyfftw.pxd [\#36](https://github.com/hgomersall/pyFFTW/issues/36)
- Provide transform metadata such as axes and direction [\#34](https://github.com/hgomersall/pyFFTW/issues/34)
- Provide shape and dtype properties [\#33](https://github.com/hgomersall/pyFFTW/issues/33)
- problem with very large arrays: OverflowError: value too large to convert to int [\#30](https://github.com/hgomersall/pyFFTW/issues/30)
- add support for in-place multidimensional r2c transform [\#29](https://github.com/hgomersall/pyFFTW/issues/29)
- Add numpy interface for hfft [\#28](https://github.com/hgomersall/pyFFTW/issues/28)
- add cython as a build dependency [\#25](https://github.com/hgomersall/pyFFTW/issues/25)
- Potential memory leak in caching [\#22](https://github.com/hgomersall/pyFFTW/issues/22)
- Allow GIL to be released with threads=1 [\#13](https://github.com/hgomersall/pyFFTW/issues/13)
- Building for 64bit windows [\#12](https://github.com/hgomersall/pyFFTW/issues/12)
- Test failure using numpy 1.6.2 [\#9](https://github.com/hgomersall/pyFFTW/issues/9)
- Remove the requirement for users to specify alignment [\#8](https://github.com/hgomersall/pyFFTW/issues/8)
- pyfftw.interfaces can only handle numpy arrays [\#7](https://github.com/hgomersall/pyFFTW/issues/7)

**Merged pull requests:**

- Release GIL during both single- and multi-thread execution \(cleaned up patch\) [\#81](https://github.com/hgomersall/pyFFTW/pull/81) ([zpincus](https://github.com/zpincus))
- Support FFTW\_WISDOM\_ONLY \(cleaned up patch\) [\#80](https://github.com/hgomersall/pyFFTW/pull/80) ([zpincus](https://github.com/zpincus))
- Release GIL around FFTW planning [\#78](https://github.com/hgomersall/pyFFTW/pull/78) ([zpincus](https://github.com/zpincus))
- Updated the tutorial to reflect changes with new aligned array creation functions. [\#54](https://github.com/hgomersall/pyFFTW/pull/54) ([drwells](https://github.com/drwells))
- Add description for installing on OS X [\#50](https://github.com/hgomersall/pyFFTW/pull/50) ([arve0](https://github.com/arve0))
- close issue \#8 \(More numpy like aligned array creation functions\) [\#44](https://github.com/hgomersall/pyFFTW/pull/44) ([drwells](https://github.com/drwells))
- Discrete sine transform imports [\#42](https://github.com/hgomersall/pyFFTW/pull/42) ([insertinterestingnamehere](https://github.com/insertinterestingnamehere))

## [v0.9.2](https://github.com/hgomersall/pyFFTW/tree/v0.9.2) (2013-09-20)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.9.2_docs...v0.9.2)

## [v0.9.2_docs](https://github.com/hgomersall/pyFFTW/tree/v0.9.2_docs) (2013-09-11)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.9.1_docs...v0.9.2_docs)

## [v0.9.1_docs](https://github.com/hgomersall/pyFFTW/tree/v0.9.1_docs) (2013-09-11)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.9.1...v0.9.1_docs)

## [v0.9.1](https://github.com/hgomersall/pyFFTW/tree/v0.9.1) (2013-09-11)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.9_docs...v0.9.1)

**Closed issues:**

- Overwriting previous input when cache is enabled. [\#23](https://github.com/hgomersall/pyFFTW/issues/23)
- Race condition in cache culling [\#21](https://github.com/hgomersall/pyFFTW/issues/21)
- Memory corruption at exit [\#19](https://github.com/hgomersall/pyFFTW/issues/19)
- In-place transform? [\#18](https://github.com/hgomersall/pyFFTW/issues/18)
- Support for 2.6? [\#17](https://github.com/hgomersall/pyFFTW/issues/17)
- Install fails; can't find library? [\#16](https://github.com/hgomersall/pyFFTW/issues/16)
- Please include cython source code [\#11](https://github.com/hgomersall/pyFFTW/issues/11)
- Make repeated axes act like numpy.fft's repeated axes [\#2](https://github.com/hgomersall/pyFFTW/issues/2)
- Implement numpy.fft API to pyfftw [\#1](https://github.com/hgomersall/pyFFTW/issues/1)

**Merged pull requests:**

- register fftw cleanup with Py\_AtExit [\#20](https://github.com/hgomersall/pyFFTW/pull/20) ([rainwoodman](https://github.com/rainwoodman))

## [v0.9_docs](https://github.com/hgomersall/pyFFTW/tree/v0.9_docs) (2013-02-15)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.9...v0.9_docs)

## [v0.9](https://github.com/hgomersall/pyFFTW/tree/v0.9) (2013-02-15)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.8.2_docs...v0.9)

**Closed issues:**

- Issue getting PyFFTW to import in Python 3 [\#6](https://github.com/hgomersall/pyFFTW/issues/6)
- Some tests fail [\#5](https://github.com/hgomersall/pyFFTW/issues/5)
- n\_byte\_array\(\) and n\_byte\_align\_empty\(\) break for large arrays [\#4](https://github.com/hgomersall/pyFFTW/issues/4)

## [v0.8.2_docs](https://github.com/hgomersall/pyFFTW/tree/v0.8.2_docs) (2012-05-29)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.8.2...v0.8.2_docs)

## [v0.8.2](https://github.com/hgomersall/pyFFTW/tree/v0.8.2) (2012-05-29)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.8.1_docs...v0.8.2)

**Closed issues:**

- export\_wisdom\(\) fails on windows 7 and vista [\#3](https://github.com/hgomersall/pyFFTW/issues/3)

## [v0.8.1_docs](https://github.com/hgomersall/pyFFTW/tree/v0.8.1_docs) (2012-05-20)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.8.1...v0.8.1_docs)

## [v0.8.1](https://github.com/hgomersall/pyFFTW/tree/v0.8.1) (2012-05-20)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.8.0_docs...v0.8.1)

## [v0.8.0_docs](https://github.com/hgomersall/pyFFTW/tree/v0.8.0_docs) (2012-04-08)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.8.0...v0.8.0_docs)

## [v0.8.0](https://github.com/hgomersall/pyFFTW/tree/v0.8.0) (2012-04-08)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.7.0_docs...v0.8.0)

## [v0.7.0_docs](https://github.com/hgomersall/pyFFTW/tree/v0.7.0_docs) (2012-03-04)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.7.0...v0.7.0_docs)

## [v0.7.0](https://github.com/hgomersall/pyFFTW/tree/v0.7.0) (2012-02-29)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.6.1_docs...v0.7.0)

## [v0.6.1_docs](https://github.com/hgomersall/pyFFTW/tree/v0.6.1_docs) (2012-02-26)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.6.1...v0.6.1_docs)

## [v0.6.1](https://github.com/hgomersall/pyFFTW/tree/v0.6.1) (2012-02-26)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.6.0_docs...v0.6.1)

## [v0.6.0_docs](https://github.com/hgomersall/pyFFTW/tree/v0.6.0_docs) (2012-02-06)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.6.0...v0.6.0_docs)

## [v0.6.0](https://github.com/hgomersall/pyFFTW/tree/v0.6.0) (2012-02-06)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.5.1_docs...v0.6.0)

## [v0.5.1_docs](https://github.com/hgomersall/pyFFTW/tree/v0.5.1_docs) (2012-02-05)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.5.1...v0.5.1_docs)

## [v0.5.1](https://github.com/hgomersall/pyFFTW/tree/v0.5.1) (2012-02-04)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.5.0...v0.5.1)

## [v0.5.0](https://github.com/hgomersall/pyFFTW/tree/v0.5.0) (2012-02-01)
[Full Changelog](https://github.com/hgomersall/pyFFTW/compare/v0.5.0_docs...v0.5.0)

## [v0.5.0_docs](https://github.com/hgomersall/pyFFTW/tree/v0.5.0_docs) (2012-02-01)


\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
36 changes: 33 additions & 3 deletions _sources/pyfftw/pyfftw.txt
Expand Up @@ -17,6 +17,26 @@ FFTW Class
.. autoattribute:: pyfftw.FFTW.output_alignment

.. autoattribute:: pyfftw.FFTW.flags

.. autoattribute:: pyfftw.FFTW.input_array

.. autoattribute:: pyfftw.FFTW.output_array

.. autoattribute:: pyfftw.FFTW.input_shape

.. autoattribute:: pyfftw.FFTW.output_shape

.. autoattribute:: pyfftw.FFTW.input_strides

.. autoattribute:: pyfftw.FFTW.output_strides

.. autoattribute:: pyfftw.FFTW.input_dtype

.. autoattribute:: pyfftw.FFTW.output_dtype

.. autoattribute:: pyfftw.FFTW.direction

.. autoattribute:: pyfftw.FFTW.axes

.. automethod:: pyfftw.FFTW.__call__

Expand Down Expand Up @@ -53,9 +73,19 @@ Utility Functions
An integer giving the optimum SIMD alignment in bytes, found by
inspecting the CPU (e.g. if AVX is supported, its value will be 32).

This can be used as ``n`` in the arguments for :func:`n_byte_align` and
:func:`n_byte_align_empty` to create optimally aligned arrays for
the running platform.
This can be used as ``n`` in the arguments for :func:`byte_align`,
:func:`empty_aligned`, :func:`zeros_aligned`, and :func:`ones_aligned` to
create optimally aligned arrays for the running platform.

.. autofunction:: pyfftw.byte_align

.. autofunction:: pyfftw.empty_aligned

.. autofunction:: pyfftw.zeros_aligned

.. autofunction:: pyfftw.ones_aligned

.. autofunction:: pyfftw.is_byte_aligned

.. autofunction:: pyfftw.n_byte_align

Expand Down
52 changes: 27 additions & 25 deletions _sources/sphinx/tutorial.txt
Expand Up @@ -47,19 +47,20 @@ caveat [#caveat]_) drop in replacements for :mod:`numpy.fft` and

>>> import pyfftw
>>> import numpy
>>> a = pyfftw.n_byte_align_empty(128, 16, 'complex128')
>>> a = pyfftw.empty_aligned(128, dtype='complex128', n=16)
>>> a[:] = numpy.random.randn(128) + 1j*numpy.random.randn(128)
>>> b = pyfftw.interfaces.numpy_fft.fft(a)
>>> c = numpy.fft.fft(a)
>>> numpy.allclose(b, c)
True

We initially create and fill a complex array, ``a``, of length 128.
:func:`pyfftw.n_byte_align_empty` is a helper function that works like
:func:`pyfftw.empty_aligned` is a helper function that works like
:func:`numpy.empty` but returns the array aligned to a particular number of
bytes in memory, in this case 16. Having byte aligned arrays allows FFTW to
performed vector operations, potentially speeding up the FFT (a similar
:func:`pyfftw.n_byte_align` exists to align a pre-existing array as
bytes in memory, in this case 16. If the alignment is not specified then the
library inspects the CPU for an appropriate alignment value. Having byte aligned
arrays allows FFTW to performed vector operations, potentially speeding up the
FFT (a similar :func:`pyfftw.byte_align` exists to align a pre-existing array as
necessary).

Calling :func:`pyfftw.interfaces.numpy_fft.fft` on ``a`` gives the same
Expand Down Expand Up @@ -110,8 +111,8 @@ patched in order to speed it up.
import numpy
from timeit import Timer

a = pyfftw.n_byte_align_empty((128, 64), 16, dtype='complex128')
b = pyfftw.n_byte_align_empty((128, 64), 16, dtype='complex128')
a = pyfftw.empty_aligned((128, 64), dtype='complex128')
b = pyfftw.empty_aligned((128, 64), dtype='complex128')

a[:] = numpy.random.randn(128, 64) + 1j*numpy.random.randn(128, 64)
b[:] = numpy.random.randn(128, 64) + 1j*numpy.random.randn(128, 64)
Expand Down Expand Up @@ -192,13 +193,13 @@ a one-dimensional complex array:

import pyfftw

a = pyfftw.n_byte_align_empty(128, 16, 'complex128')
b = pyfftw.n_byte_align_empty(128, 16, 'complex128')
a = pyfftw.empty_aligned(128, dtype='complex128')
b = pyfftw.empty_aligned(128, dtype='complex128')

fft_object = pyfftw.FFTW(a, b)

In this case, we create 2 complex arrays, ``a`` and ``b`` each of
length 128. As before, we use :func:`pyfftw.n_byte_align_empty` to
length 128. As before, we use :func:`pyfftw.empty_aligned` to
make sure the array is aligned.

Given these 2 arrays, the only transform that makes sense is a
Expand All @@ -214,7 +215,7 @@ Similarly, to plan the inverse:

.. testcode::

c = pyfftw.n_byte_align_empty(128, 16, 'complex128')
c = pyfftw.empty_aligned(128, dtype='complex128')
ifft_object = pyfftw.FFTW(b, c, direction='FFTW_BACKWARD')

In this case, the direction argument is given as ``'FFTW_BACKWARD'``
Expand Down Expand Up @@ -264,26 +265,26 @@ by setting the ``normalise_idft=False`` argument.

It is possible to change the data on which a :class:`pyfftw.FFTW`
operates. The :meth:`pyfftw.FFTW.__call__` accepts both an
``input_array`` and and ``output_array`` argument to update the
``input_array`` and an ``output_array`` argument to update the
arrays. The arrays should be compatible with the arrays with which
the :class:`pyfftw.FFTW` object was originally created. Please read the
API docs on :meth:`pyfftw.FFTW.__call__` to fully understand the
requirements for updating the array.

.. doctest::

>>> d = pyfftw.n_byte_align_empty(4, 16, 'complex128')
>>> e = pyfftw.n_byte_align_empty(4, 16, 'complex128')
>>> f = pyfftw.n_byte_align_empty(4, 16, 'complex128')
>>> d = pyfftw.empty_aligned(4, dtype='complex128')
>>> e = pyfftw.empty_aligned(4, dtype='complex128')
>>> f = pyfftw.empty_aligned(4, dtype='complex128')
>>> fft_object = pyfftw.FFTW(d, e)
>>> fft_object.get_input_array() is d # get the input array from the object
>>> fft_object.input_array is d # get the input array from the object
True
>>> f[:] = [1, 2, 3, 4] # Add some data to f
>>> fft_object(f)
array([ 10.+0.j, -2.+2.j, -2.+0.j, -2.-2.j])
>>> fft_object.get_input_array() is d # No longer true!
>>> fft_object.input_array is d # No longer true!
False
>>> fft_object.get_input_array() is f # It has been updated with f :)
>>> fft_object.input_array is f # It has been updated with f :)
True

If the new input array is of the wrong dtype or wrongly strided,
Expand All @@ -307,8 +308,8 @@ transform is to be taken.

import pyfftw

a = pyfftw.n_byte_align_empty((128, 64), 16, 'complex128')
b = pyfftw.n_byte_align_empty((128, 64), 16, 'complex128')
a = pyfftw.empty_aligned((128, 64), dtype='complex128')
b = pyfftw.empty_aligned((128, 64), dtype='complex128')

# Plan an fft over the last axis
fft_object_a = pyfftw.FFTW(a, b)
Expand Down Expand Up @@ -374,7 +375,7 @@ around :class:`pyfftw.FFTW`) is returned.

import pyfftw

a = pyfftw.n_byte_align_empty((128, 64), 16, 'complex128')
a = pyfftw.empty_aligned((128, 64), dtype='complex128')

# Generate some data
ar, ai = numpy.random.randn(2, 128, 64)
Expand Down Expand Up @@ -402,7 +403,7 @@ shape to satisfy the scheme requirements.
The precision of the transform is determined by the dtype of the
input array. If the input array is a floating point array, then
the precision of the floating point is used. If the input array
is not a float point array then a double precision transform is used.
is not a floating point array then a double precision transform is used.
Any calls made to the resultant object with an array of the same
size will then be copied into the internal array of the object,
changing the dtype in the process.
Expand All @@ -423,7 +424,7 @@ array.

.. testcode::

a = pyfftw.n_byte_align_empty((128, 64), 16, 'complex128')
a = pyfftw.empty_aligned((128, 64), dtype='complex128')

fft_wrapper_object = pyfftw.builders.fftn(a, s=(32, 256))

Expand All @@ -435,7 +436,7 @@ Inspecting these objects gives us their shapes:

>>> b.shape
(32, 256)
>>> fft_wrapper_object.get_input_array().shape
>>> fft_wrapper_object.input_array.shape
(32, 256)
>>> a.shape
(128, 64)
Expand All @@ -447,7 +448,8 @@ of the internal array is sliced to include only the last 64 elements.
This way, shapes are made consistent for copying.

Understanding :mod:`numpy.fft`, these functions are largely
self-explanatory. We point the reader to the :mod:`API docs <pyfftw.builders>` for more information.
self-explanatory. We point the reader to the :mod:`API docs <pyfftw.builders>`
for more information.

.. rubric:: Footnotes

Expand Down
7 changes: 2 additions & 5 deletions _static/basic.css
Expand Up @@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
Expand Down Expand Up @@ -89,6 +89,7 @@ div.sphinxsidebar #searchbox input[type="submit"] {

img {
border: 0;
max-width: 100%;
}

/* -- search page ----------------------------------------------------------- */
Expand Down Expand Up @@ -401,10 +402,6 @@ dl.glossary dt {
margin: 0;
}

.refcount {
color: #060;
}

.optional {
font-size: 1.3em;
}
Expand Down
2 changes: 1 addition & 1 deletion _static/default.css
Expand Up @@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- default theme.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
Expand Down