# SciPy 0.11.0 Release Notes

SciPy 0.11.0 is the culmination of 8 months of hard work. It contains many new features, numerous bug-fixes, improved test coverage and better documentation. Highlights of this release are:

> - A new module has been added which provides a number of common sparse graph algorithms.

> - New unified interfaces to the existing optimization and root finding functions have been added.

All users are encouraged to upgrade to this release, as there are a large number of bug-fixes and optimizations. Our development attention will now shift to bug-fix releases on the 0.11.x branch, and on adding new features on the master branch.

This release requires Python 2.4-2.7 or 3.1-3.2 and NumPy 1.5.1 or greater.

## New features

### Sparse Graph Submodule

The new submodule `scipy.sparse.csgraph` implements a number of efficient graph algorithms for graphs stored as sparse adjacency matrices. Available routines are:

> - `connected_components` - determine connected components of a graph

> - `laplacian` - compute the laplacian of a graph

> - `shortest_path` - compute the shortest path between points on a positive graph

> - `dijkstra` - use Dijkstra’s algorithm for shortest path

> - `floyd_warshall` - use the Floyd-Warshall algorithm for shortest path

> - `breadth_first_order` - compute a breadth-first order of nodes

> - `depth_first_order` - compute a depth-first order of nodes

> - `breadth_first_tree` - construct the breadth-first tree from a given node

> - `depth_first_tree` - construct a depth-first tree from a given node

> - `minimum_spanning_tree` - construct the minimum spanning tree of a graph

### `scipy.optimize` improvements

The optimize module has received a lot of attention this release. In addition to added tests, documentation improvements, bug fixes and code clean-up, the following improvements were made:

- A unified interface to minimizers of univariate and multivariate functions has been added.

- A unified interface to root finding algorithms for multivariate functions has been added.

- The L-BFGS-B algorithm has been updated to version 3.0.

#### Unified interfaces to minimizers

Two new functions `scipy.optimize.minimize` and `scipy.optimize.minimize_scalar` were added to provide a common interface to minimizers of multivariate and univariate functions respectively. For multivariate functions, `scipy.optimize.minimize` provides an interface to methods for unconstrained optimization (`fmin`, `fmin_powell`, `fmin_cg`, `fmin_ncg`, `fmin_bfgs` and anneal) or constrained optimization (`fmin_l_bfgs_b`, `fmin_tnc`, `fmin_cobyla` and `fmin_slsqp`). For univariate functions, `scipy.optimize.minimize_scalar` provides an interface to methods for unconstrained and bounded optimization (`brent`, `golden`, `fminbound`). This allows for easier comparing and switching between solvers.

#### Unified interface to root finding algorithms

The new function `scipy.optimize.root` provides a common interface to root finding algorithms for multivariate functions, embedding `fsolve`, `leastsq` and `nonlin` solvers.

### `scipy.linalg` improvements

#### New matrix equation solvers

Solvers for the Sylvester equation (`scipy.linalg.solve_sylvester`, discrete and continuous Lyapunov equations (`scipy.linalg.solve_lyapunov`, `scipy.linalg.solve_discrete_lyapunov`) and discrete and continuous algebraic Riccati equations (`scipy.linalg.solve_continuous_are`, `scipy.linalg.solve_discrete_are`) have been added to `scipy.linalg`. These solvers are often used in the field of linear control theory.

#### QZ and QR Decomposition

It is now possible to calculate the QZ, or Generalized Schur, decomposition using `scipy.linalg.qz`. This function wraps the LAPACK routines sgges, dgges, cgges, and zgges.

The function `scipy.linalg.qr_multiply`, which allows efficient computation of the matrix product of Q (from a QR decomposition) and a vector, has been added.

#### Pascal matrices

A function for creating Pascal matrices, `scipy.linalg.pascal`, was added.

### Sparse matrix construction and operations

Two new functions, `scipy.sparse.diags` and `scipy.sparse.block_diag`, were added to easily construct diagonal and block-diagonal sparse matrices respectively.

`scipy.sparse.csc_matrix` and `csr_matrix` now support the operations `sin`, `tan`, `arcsin`, `arctan`, `sinh`, `tanh`, `arcsinh`, `arctanh`, `rint`, `sign`, `expm1`, `log1p`, `deg2rad`, `rad2deg`, `floor`, `ceil` and `trunc`. Previously, these operations had to be performed by operating on the matrices’ `data` attribute.

### LSMR iterative solver

LSMR, an iterative method for solving (sparse) linear and linear least-squares systems, was added as `scipy.sparse.linalg.lsmr`.

### Discrete Sine Transform

Bindings for the discrete sine transform functions have been added to `scipy.fftpack`.

### `scipy.interpolate` improvements

For interpolation in spherical coordinates, the three classes `scipy.interpolate.SmoothSphereBivariateSpline`, `scipy.interpolate.LSQSphereBivariateSpline`, and `scipy.interpolate.RectSphereBivariateSpline` have been added.

### Binned statistics (`scipy.stats`)

The stats module has gained functions to do binned statistics, which are a generalization of histograms, in 1-D, 2-D and multiple dimensions: `scipy.stats.binned_statistic`, `scipy.stats.binned_statistic_2d` and `scipy.stats.binned_statistic_dd`.

## Deprecated features

`scipy.sparse.cs_graph_components` has been made a part of the sparse graph submodule, and renamed to `scipy.sparse.csgraph.connected_components`. Calling the former routine will result in a deprecation warning.

`scipy.misc.radon` has been deprecated. A more full-featured radon transform can be found in scikits-image.

`scipy.io.save_as_module` has been deprecated. A better way to save multiple Numpy arrays is the `numpy.savez` function.

The xa and xb parameters for all distributions in `scipy.stats.distributions` already weren’t used; they have now been deprecated.

## Backwards incompatible changes

### Removal of `scipy.maxentropy`

The `scipy.maxentropy` module, which was deprecated in the 0.10.0 release, has been removed. Logistic regression in scikits.learn is a good and modern alternative for this functionality.

### Minor change in behavior of `splev`

The spline evaluation function now behaves similarly to `interp1d` for size-1 arrays. Previous behavior:

    >>> from scipy.interpolate import splev, splrep, interp1d
    >>> x = [1,2,3,4,5]
    >>> y = [4,5,6,7,8]
    >>> tck = splrep(x, y)
    >>> splev([1], tck)
    4.
    >>> splev(1, tck)
    4.

Corrected behavior:

    >>> splev([1], tck)
    array([ 4.])
    >>> splev(1, tck)
    array(4.)

This affects also the `UnivariateSpline` classes.

### Behavior of `scipy.integrate.complex_ode`

The behavior of the `y` attribute of `complex_ode` is changed. Previously, it expressed the complex-valued solution in the form:

    z = ode.y[::2] + 1j * ode.y[1::2]

Now, it is directly the complex-valued solution:

    z = ode.y

### Minor change in behavior of T-tests

The T-tests `scipy.stats.ttest_ind`, `scipy.stats.ttest_rel` and `scipy.stats.ttest_1samp` have been changed so that 0 / 0 now returns NaN instead of 1.

## Other changes

The SuperLU sources in `scipy.sparse.linalg` have been updated to version 4.3 from upstream.

The function `scipy.signal.bode`, which calculates magnitude and phase data for a continuous-time system, has been added.

The two-sample T-test `scipy.stats.ttest_ind` gained an option to compare samples with unequal variances, i.e. Welch’s T-test.

`scipy.misc.logsumexp` now takes an optional `axis` keyword argument.

## Authors

This release contains work by the following people (contributed at least one patch to this release, names in alphabetical order):

- Jeff Armstrong

- Chad Baker

- Brandon Beacher +

- behrisch +

- borishim +

- Matthew Brett

- Lars Buitinck

- Luis Pedro Coelho +

- Johann Cohen-Tanugi

- David Cournapeau

- dougal +

- Ali Ebrahim +

- endolith +

- Bjørn Forsman +

- Robert Gantner +

- Sebastian Gassner +

- Christoph Gohlke

- Ralf Gommers

- Yaroslav Halchenko

- Charles Harris

- Jonathan Helmus +

- Andreas Hilboll +

- Marc Honnorat +

- Jonathan Hunt +

- Maxim Ivanov +

- Thouis (Ray) Jones

- Christopher Kuster +

- Josh Lawrence +

- Denis Laxalde +

- Travis Oliphant

- Joonas Paalasmaa +

- Fabian Pedregosa

- Josef Perktold

- Gavin Price +

- Jim Radford +

- Andrew Schein +

- Skipper Seabold

- Jacob Silterra +

- Scott Sinclair

- Alexis Tabary +

- Martin Teichmann

- Matt Terry +

- Nicky van Foreest +

- Jacob Vanderplas

- Patrick Varilly +

- Pauli Virtanen

- Nils Wagner +

- Darryl Wally +

- Stefan van der Walt

- Liming Wang +

- David Warde-Farley +

- Warren Weckesser

- Sebastian Werk +

- Mike Wimmer +

- Tony S Yu +

A total of 55 people contributed to this release. People with a “+” by their names contributed a patch for the first time.