################################################################################
# SPy History file
#
# This file contains release notes for various SPy releases
################################################################################

SPy 0.11
================================================================================
Release date: 2013.04.03

New Featues
-----------

* RX anomaly detector.

* Ability to save and create images in ENVI format.

* Added `GaussianStats` class (returned by `calc_stats`). This class can be
  transformed by a `LinearTransform`.  It has a `get_whitening_transform`
  method that returns a callable transform to whiten image data.

* Added a unit-testing sub-package (`spectral.tests`)

Changes
-------

* Changed severals function to accept GaussianStats objects instead of
  sepaarate mean & covariance.

* Changed names of several functions for consistency:

  - `open_image` replaces `image`.

  - `save_rgb` replaces `save_image`

* Improved support for additional data types by reading byte strings into
  numpy arrays with dtypes instead of using builtin array module.

Bug Fixes
---------

* 32-bit integer image data  was not being read properly.


SPy 0.10.1
================================================================================
Release date: 2013.02.23

This is a bug-fix release that corrects the spectrum displayed when double-
clicking on a raster display.  Version 0.10 introduced a bug that had the
row/column swapped, resulting in either the wrong pixel being plotted or an
exception raised.

SPy 0.10
================================================================================
Release date: 2013.02.17

As of this release, SPy now uses IPython for non-blocking GUI windows. IPython
should be started in "--pylab" mode with the appropriate backend set (see
:ref:`starting_ipython`). The standard python interpreter can still be used if
GUI functions are not being called.

New Features
------------

* Added a linear target detector (MatchedFilter).

* :func:`~spectral.algorithms.transforms.LinearTransform` and
  :func:`~spectral.algorithms.algorithms.transform_image` now handle scalar
  transforms.

* All functions opening a GUI window will now return a proxy object to enable
  access to any associated data (e.g., accessing changed class values in an
  N-D data display).

* GUI functions are now aware of differences in wxWidgets versions
  (2.8.x vs. 2.9.x).

Changes
-------

* SPy no longer requires explicit creation of a new wx thread.  Instead,
  running SPy interactively with GUI functions now requires using IPython
  in "pylab" mode.

* A few functions have been renamed for consistency:

  * `hypercube` is now :func:`~spectral.graphics.graphics.view_cube`.
  
  * `ndwindow is now :func:`~spectral.graphics.graphics.view_nd`.

* numpy is used for more covariance calculations (e.g., class-specific
  covariance) to improve performance on multi-core systems.

* Two new parameters have been added to the `spectral.settings` object:

  #. `START_WX_APP` : If this parameter is True and no wx App exists when a
     GUI function is called, then an App will be started to prevent an error.
     
  #. `WX_GL_DEPTH_SIZE` : If the default GL_DEPTH_SIZE is not supported by the
     host system (resulting in a blank GLCanvas in :func:`~spectral.graphics.view_cube`
     or :func:`~spectral.graphics.view_nd), this parameter can be reduced
     (e.g., to 24 or 16) to enable OpenGL rendering.
  
Bug Fixes
---------

* Spectral plotting failed when double-clicking a transformed image due to
  band info being unavailable.  A check is now performed to prevent this.

* OpenGL-related calls will no longer fail if GLUT or an associated font is
  not available.
  
SPy 0.9
================================================================================
Release date: 2013.01.23

New Features
------------

* Added a linear target detector (MatchedFilter).

* Added a class for linear transformations (LinearTransform).

Changes
-------

* `principal_components` function now returns a object, which contains return
  values previously in a tuple, , as well as the associated linear transform,
  and a `reduce` method.
  
* `linear_discriminant` function now returns an object, which contains return
  values previously in a tuple, as well as the associated linear transform.
  
* Covariance calculation is now performed using 64-bit floats.

Bug Fixes
---------

* Fixed a bug causing `ndwindow` to fail when no class mask is passed as a
  keyword arg.


SPy 0.8
================================================================================
Release date: 2012.07.10

Changes
-------

* Added an N-Dimensional visualization capability.

* Added mouse control for hypercube display.

* Improved read speed of SpyFile objects by about a factor of 10.

Bug Fixes
---------

* Fixed several erroneously implemented deprecation warnings that caused
  infinite recursion in funciton calls.

* Fixed mismatch in parameter names in kmeans_ndarray.

SPy 0.7
================================================================================
Release date: 2012.02.19

Changes
-------

* Changed many function/method names to be more consistent with external
  packages.  Use of most old names will generate a deprecation warning but some
  while require immediate changes to client code.

* :func:`spectral.kmeans` runs about 10 times faster now for loaded images.

Bug Fixes
---------

* The Erdas LAN file interface was modified because the previous reference file
  had mixed endian between header and data sections.  If you are using the old
  sample file *92AV3C*, then start using :download:`92AV3C.lan <data/92AV3C.lan>`,
  which has consistent endian-ness.

* Fixed a few bugs that potentially caused problems with the BIP and BSQ file
  interfaces.


SPy 0.6
================================================================================
Release date: 2011.01.17

- New Features:

  - Support for parsing & loading spectra from the ASTER Spectral Library.
  
  - Ability to save ENVI spectral library files.

  - :meth:`spectral.kmeans` will accept a :exc:`KeyboardInterrupt` exception
    (i.e., CTRL-C) and return the results as of the previous iteration.

  - Documention is now online via Sphinx.

- Changes

  - Major changes to module/sub-module layout. Biggest change is that the top-
    level module is now "spectral" instead of "Spectra" (capitalization). Many
    functions/classes have moved between files and sub-modules but that should
    be transparent to most users since the most obvious names are automatically
    imported into the top-level module namespace.

  - Additional ENVI data file extensions are now searched (.bil, .bsq, .bip,)

  - Changed default colors in :obj:`spectral.spyColors`, which is the default
    color palette used by :meth:`spectral.viewIndexed`.

  - :meth:`spectral.transformImage` is now the means to apply a linear transform
    to an image (rather than creating a :class:`spectral.TransformedImage`
    directly) because it handles both :class:`spectral.SpyFile` and
    :class:`numpy.ndarray` objects.

  - 64-bit floats are now used for covariance matrices.

  - Changed SPECTRAL_DATA path delimiter from semi-colon to colon.
    
- Bug fixes

  - Fixed a bug preventing successful reading of ENVI header files where an
    equal ("=") symbol appears in a parameter value.

  - Fixed bug where a ColorScale might return an incorrect color if the scale
    contained negative values.

  - :meth:`cluster` would fail if only 2 clusters were requested.
  
  - :meth:`kmeans` was reporting an incorrect number of pixels reassigned
    between iterations (did not affect final convergence).

  - :meth:`logDeterminant` was crashing when receiving negative values.
  
  - Missing a potential byte swap in :meth:`spectral.io.bilfileBilFile.readDatum`.


SPy 0.5
================================================================================
Release date: 2010.07.11

- New Features:

  - Spectral plots with Pylab (Matplotlib)
  
  - Spectral band resampling
  
  - Support for spectral libraries in ENVI .hdr/.sli format.
  
  - Faster processing - Added a "load" method to the SpyFile object that loads
    an entire image into an ImageArray object to avoid frequent disk reads.
    
  - PerceptronClassifier now accepts an arbitrary number of hidden layers.

- Changes

  - isoCluster renamed kmeans, which now creates 10 clusters by default.
  
  - Removed many classes/modules/functions from the top-level namespace.
  
  - Changed names of sub-package file input functions to create a common interface.
  
- Bug fixes

  - Fixed a bug in the PerceptronClassifier that prevented neuron bias to be
    considered properly.

SPy 0.4
================================================================================
Release date: 2008.02.28

- New Features: None

- Changes

  - Migrated from Numeric to NumPy.

  - Migrated to wxPython 2.8+.

  - Now compatible with Python 2.5.


SPy 0.3
================================================================================
Release date: 2006.07.19

- New Features:

  - Neural network classifier (PerceptronClassifier) added.  This classifier
    is implementad as a Multi-Layer Perceptron with a single hidden layer. As
    with neural networks in general, choosing the right number of hidden layer
    neurons heavily influences training time and final classification accuracy.

  - Hypercube visualization added.  Call the hypercube function to render
    an interactive hypercube that can be translated, rotated, and stretched.
    You can also specify the image bands to display on the top face of the cube,
    as well as the color scale to be used on the sides.  PyOpenGL and GLUT must
    be installed to render hypercubes.

  - SPECTRAL_DATA environment variable is now searched for file names passed to
    the image function. SPECTRAL_DATA is expected to be a semicolon-delimited
    list of directory names.  As one would expect, the current working directory
    is always searched first.

- Changes

  - The TrainingClassSet class was introduced to replace the simple list of
    TrainingClass objects that was previously being passed to classifiers.
    This provides a more generic interface for extending SPy capabilities and
    allows generic iterators to be used for both training and classification.

  - The canonicalAnalysis function (which was a misnomer) was renamed to
    linearDiscriminant (which is also aliased to lda).

  - The transformStatistics method of SpyFile and TrainingClass was renamed to
    just transform.  For TrainingClass, this method should rarely be called
    anyway because the TrainigClassSet.transform method handles applying
    the transform to all associated TrainingClass objects.


SPy 0.2
================================================================================
Release date: 2006.06.16

- New Features:

  - BSQ interleaved files are now supported.
  - Mahalanobis Classifier has been added.

- Package layout has changed in a few significant ways:

  - There is now an Algorithms sub-package.
  - Classification algorithms are now python classes, derived from Classifier.
  - Iterators are now used for many algorithms.

- Better progress indicator output for lengthy operations and integration with
  other tools.


SPy 0.1
================================================================================
Release date: 2001.11.28

This is the initial release of SPy.
