# Release Notes¶

## Upcoming release¶

## ODL 0.6.0 Release Notes (2017-04-20)¶

Besides many small improvements and additions, this release is the first one under the new Mozilla Public License 2.0 (MPL-2.0).

### New features¶

- The Kaczmarz method has been added to the
`solvers`

(PR 840). - Most immutable types now have a
`__hash__`

method (PR 840). - A variant of the Conjugate Gradient solver for non-linear problems has been added (PR 554).
- There is now an example for tomographic reconstruction using Total Generalized Variation (TGV). (PR 883).
- Power spaces can now be created using the
`**`

operator, e.g.,`odl.rn(3) ** 4`

. Likewise, product spaces can be created using multiplication`*`

, i.e.,`odl.rn(3) * odl.rn(4)`

(PR 882). - A
`SamplingOperator`

for the extraction of values at given indices from arrays has been added, along with its adjoint`WeightedSumSamplingOperator`

(PR 940). - Callbacks can now be composed with operators, which can be useful, e.g., for transforming the current iterate before displaying it (PR 954).
`RayTransform`

(and thus also`fbp_op`

) can now be directly used on spaces of complex functions (PR 970).

### Improvements¶

- In
`CallbackPrintIteration`

, a step number between displays can now be specified (PR 871). `OperatorPointwiseProduct`

got its missing`derivative`

(PR 877).`SeparableSum`

functionals can now be indexed to retrieve the constituents (PR 898).- Better self-printing of callbacks (PR 881).
`ProductSpaceOperator`

and subclasses now have`size`

and`__len__`

, and the parent also has`shape`

. Also self-printing of these operators is now better (PR 901).- Arithmetic methods of
`LinearSpace`

have become more permissive in the sense that operations like`space_element + raw_array`

now works if the array can be cast to an element of the same space (PR 902). - There is now a (work-in-progress) document on the release process with the aim to avoid errors (PR 872).
- The MRC extended header implementation is now much simpler (PR 917).
- The
`show_discrete_data`

workhorse is now more robust towards arrays with`inf`

and`nan`

entries regarding colorbar settings (PR 921). - The
`title`

in`CallbackShow`

are now interpreted as format string with iteration number inserted, which enables updating the figure title in real time (PR 923). - Installation instructions have been arranged in a better way, grouped after different ways of installing (PR 884).
- A performance comparison example pure ASTRA vs. ODL with ASTRA for 3d cone beam has been added (PR 912).
`OperatorComp`

avoids an operator evaluation in`derivative`

in the case when the left operator is linear (PR 957).`FunctionalComp`

now has a default implementation of`gradient.derivative`

if the operator in the composition is linear (PR 956).- The
`saveto`

parameter of`CallbackShow`

can now be a callable that returns the file name to save to when called on the current iteration number (PR 955).

### Changes¶

- The
`sphinxext`

submodule has been from upstream (PR 846). - The renames
`TensorGrid`

->`RectGrid`

and`uniform_sampling`

->`uniform_grid`

have been made, and separate class`RegularGrid`

has been removed in favor of treating regular grids as a special case of`RectGrid`

. Instances of`RectGrid`

have a new property`is_uniform`

for this purpose. Furthermore, uniformity of`RectPartition`

and`RectGrid`

is exposed as property per axis using`is_uniform_byaxis`

(PR 841). `extent`

of grids and partitions is now a property instead of a method (PR 889).- The number of iterations in solvers is no longer optional since the old default 1 didn’t make much sense (PR 888).
- The
`nlevels`

argument of`WaveletTransform`

is now optional, and the default is the maximum number of levels as determined by the new function`pywt_max_nlevels`

(PR 880). `MatVecOperator`

is now called`MatrixOperator`

and has been moved to the`tensor_ops`

module. This solves a circular dependency issue with ODL subpackages (PR 911).- All step parameters of callbacks are now called just
`step`

(PR 929). - The
`impl`

name for the scikit-image back-end in`RayTransform`

has been changed from`scikit`

to`skimage`

(PR 970). - ODL is now licensed under the Mozilla Public License 2.0 (PR 977).

### Bugfixes¶

- Fix an argument order error in the gradient of
`QuadraticForm`

(PR 868). - Lots of small documentation fixes where ”, optional” was forgotten in the Parameters section (PR 554).
- Fix an indexing bug in the
`indicate_proj_axis`

phantom (PR 878). - Fix wrong inheritance order in
`FileReaderRawBinaryWithHeader`

that lead to wrong`header_size`

(PR 893). - Comparison of arbitrary objects in Python 2 is now disabled for a some ODL classes where it doesn’t make sense (PR 933).
- Fix a bug in the angle calculation of the scikit-image back-end for Ray transforms (PR 947).
- Fix issue with wrong integer type in
`as_scipy_operator`

(PR 960). - Fix wrong scaling in
`RayTransform`

and adjoint with unweighted spaces (PR 958). - Fix normalization bug of
`min_pt`

and`max_pt`

parameters in`RectPartition`

(PR 971). - Fix an issue with
`*args`

in`CallbackShow`

that lead to the`title`

argument provided twice (PR 981). - Fix an unconditional
`pytest`

import that lead to an`ImportError`

if pytest was not installed (PR 982).

## ODL 0.5.3 Release Notes (2017-01-17)¶

Lots of small improvements and feature additions in this release.
Most notable are the remarkable performance improvements to the ASTRA bindings (up to 10x), the addition of `fbp_op`

to create filtered back-projection operators with several filter and windowing options, as well as further performance improvements to operator compositions and the `show`

methods.

### New features¶

- Add the
`SeparableSum(func, n)`

syntax for n-times repetition of the same summand (PR 685). - Add the Ordered Subsets MLEM solver
`odl.solvers.osmlem`

for faster EM reconstruction (PR 647). - Add
`GroupL1Norm`

and`IndicatorGroupL1UnitBall`

for mixed L1-Lp norm regularization (PR 620). - Add
`fbp_op`

helper to create filtered back-projection operators for a range of geometries (PR 703). - Add 2-dimensional FORBILD phantom (PR 694, PR 804, PR 820).
- Add
`IndicatorZero`

functional in favor of of`ConstantFunctionalConvexConj`

(PR 707). - Add reader for MRC data files and for custom binary formats with fixed header (PR 716).
- Add
`NuclearNorm`

functional for multi-channel regularization (PR 691). - Add
`CallbackPrint`

for printing of intermediate results in iterative solvers (PR 691). - Expose Numpy ufuncs as operators in the new
`ufunc_ops`

subpackage (PR 576). - Add
`ScalingFunctional`

and`IdentityFunctional`

(PR 576). - Add
`RealPart`

,`ImagPart`

and`ComplexEmbedding`

operators (PR 706). - Add
`PointwiseSum`

operator for vector fields (PR 754). - Add
`LineSearchFromIterNum`

for using a pre-defined mapping from iteration number to step size (PR 752). - Add
`axis_labels`

option to`DiscreteLp`

for custom labels in plots (PR 770). - Add Defrise phantom for cone beam geometry testing (PR 756).
- Add
`filter`

option to`fbp_op`

and`tam_danielson_window`

and`parker_weighting`

helpers for helical/cone geometries (PR 756, PR 806, PR 825). - Add ISTA (
`proximal_gradient`

) and FISTA (`accelerated_proximal_gradient`

) algorithms, among others useful for L1 regularization (PR 758). - Add
`salt_pepper_noise`

helper function (PR 758). - Expose FBP filtering as operator
`fbp_filter_op`

(PR 780). - Add
`parallel_beam_geometry`

helper for creation of simple test geometries (PR 775). - Add
`MoreauEnvelope`

functional for smoothed regularization (PR 763). - Add
`saveto`

option to`CallbackShow`

to store plots of iterates (PR 708). - Add
`CallbackSaveToDisk`

and`CallbackSleep`

(PR 798). - Add a utility
`signature_string`

for robust generation of strings for`repr`

or`str`

(PR 808).

### Improvements¶

- New documentation on the operator derivative notion in ODL (PR 668).
- Add largescale tests for the convex conjugates of functionals (PR 744).
- Add
`domain`

parameter to`LinDeformFixedTempl`

for better extensibility (PR 748). - Add example for sparse tomography with TV regularization using the Douglas-Rachford solver (PR 746).
- Add support for 1/r^2 scaling in cone beam backprojection with ASTRA 1.8 using a helper function for rescaling (PR 749).
- Improve performance of operator scaling in certain cases (PR 576).
- Add documentation on testing in ODL (PR 704).
- Replace occurrences of
`numpy.matrix`

objects (PR 778). - Implement Numpy-style indexing for
`ProductSpaceElement`

objects (PR 774). - Greatly improve efficiency of
`show`

by updating the figure in place instead of re-creating (PR 789). - Improve efficiency of operator derivatives by short-circuiting in case of a linear operator (PR 796).
- Implement simple indexing for
`ProducSpaceOperator`

(PR 815). - Add caching to ASTRA projectors, thus making algorithms run much faster (PR 802).

### Changes¶

- Rename
`vector_field_space`

to`tangent_bundle`

in vector spaces (more adequate for complex spaces) (PR 702). - Rename
`show`

parameter of`show`

methods to`force_show`

(PR 771). - Rename
`elem.ufunc`

to`elem.ufuncs`

where implemented (PR 809). - Remove “Base” from weighting base classes and rename
`weight`

parameter to`weighting`

for consistency (PR 810). - Move
`tensor_ops`

module from`odl.discr`

to`odl.operator`

for more general application (PR 813). - Rename
`ellipse`

to`ellipsoid`

in names intended for 3D cases (PR 816). - Pick the fastest available implementation in
`RayTransform`

by default instead of`astra_cpu`

(PR 826).

### Bugfixes¶

- Prevent ASTRA cubic voxel check from failing due to numerical rounding errors (PR 721).
- Implement the missing
`__ne__`

in`RectPartition`

(PR 748). - Correct adjoint of
`WaveletTransform`

(PR 758). - Fix issue with creation of phantoms in a space with degenerate shape (PR 777).
- Fix issue with Windows paths in
`collect_ignore`

. - Fix bad dict lookup with
`RayTransform.adjoint.adjoint`

. - Fix rounding issue in a couple of indicator functionals.
- Several bugfixes in
`show`

methods. - Fixes to outdated example code.

## ODL 0.5.2 Release Notes (2016-11-02)¶

Another maintenance release that fixes a number of issues with installation and testing, see issue 674, issue 679, and PR 692 and PR 696.

## ODL 0.5.1 Release Notes (2016-10-24)¶

This is a maintenance release since the test suite was not bundled with PyPI and Conda packages as intended already in 0.5.0.
From this version on, users can run `python -c "import odl; odl.test()"`

with all types of installations (from PyPI, Conda or from source).

## ODL 0.5.0 Release Notes (2016-10-21)¶

This release features a new important top level class `Functional`

that is intended to be used in optimization methods.
Beyond its parent `Operator`

, it provides special methods and properties like `gradient`

or `proximal`

which are useful in advanced smooth or non-smooth optimization schemes.
The interfaces of all solvers in `odl.solvers`

have been updated to make use of functionals instead of their proximals, gradients etc. directly.

Further notable changes are the implementation of an `as_writable_array`

context manager that exposes arbitrary array storage as writable Numpy arrays, and the generalization of the wavelet transform to arbitrary dimensions.

See below for a complete list of changes.

### New features¶

- Add
`Functional`

class to the solvers package. (PR 498)`Functional`

is a subclass of odl`Operator`

and intended to help in formulating and solving optimization problems. It contains optimization specific features like`proximal`

and`convex_conj`

, and built-in intelligence for handling things like translation, scaling of argument or scaling of functional. * Migrate all solvers to work with`Functional`

‘s instead of raw proximals etc. (PR 587) *`FunctionalProduct`

and`FunctionalQuotient`

which allow evaluation of the product/quotient of functions and also provides a gradient through the Leibniz/quotient rules. (PR 586) *`FunctionalDefaultConvexConjugate`

which acts as a default for`Functional.convex_conj`

, providing it with a proximal property. (PR 588) *`IndicatorBox`

and`IndicatorNonnegativity`

which are indicator functions on a box shaped set and the set of nonnegative numbers, respectively. They return 0 if all points in a vector are inside the box, and infinity otherwise. (PR 589) * Add`Functional``s for ``KullbackLeibler`

and`KullbackLeiblerCrossEntropy`

, together with corresponding convex conjugates (PR 627). Also add proximal operator for the convex conjugate of cross entropy Kullback-Leibler divergence, called`proximal_cconj_kl_cross_entropy`

(PR 561) - Add
`ResizingOperator`

for shrinking and extending (padding) of discretized functions, including a variety of padding methods. (PR 499) - Add
`as_writable_array`

that allows casting arbitrary array-likes to a numpy array and then storing the results later on. This is intended to be used with odl vectors that may not be stored in numpy format (like cuda vectors), but can be used with other types like lists. (PR 524) - Allow ASTRA backend to be used with arbitrary dtypes. (PR 524)
- Add
`reset`

to`SolverCallback`

that resets the callback to its initial state. (issue 552) - Add
`nonuniform_partition`

utility that creates a partition with non-uniformly spaced points. This is useful e.g. when the angles of a tomography problem are not exactly uniform. (PR 558) - Add
`Functional`

class to the solvers package.`Functional`

is a subclass of odl`Operator`

and intended to help in formulating and solving optimization problems. It contains optimization specific features like`proximal`

and`convex_conj`

, and built-in intelligence for handling things like translation, scaling of argument or scaling of functional. (PR 498) - Add
`FunctionalProduct`

and`FunctionalQuotient`

which allow evaluation of the product/quotient of functions and also provides a gradient through the Leibniz/quotient rules. (PR 586) - Add
`FunctionalDefaultConvexConjugate`

which acts as a default for`Functional.convex_conj`

, providing it with a proximal property. (PR 588) - Add
`IndicatorBox`

and`IndicatorNonnegativity`

which are indicator functions on a box shaped set and the set of nonnegative numbers, respectively. They return 0 if all points in a vector are inside the box, and infinity otherwise. (PR 589) - Add proximal operator for the convex conjugate of cross entropy Kullback-Leibler divergence, called
`proximal_cconj_kl_cross_entropy`

(PR 561) - Add
`Functional`

‘s for`KullbackLeibler`

and`KullbackLeiblerCrossEntropy`

, together with corresponding convex conjugates (PR 627) - Add tutorial style example. (PR 521)
- Add MLEM solver. (PR 497)
- Add
`MatVecOperator.inverse`

. (PR 608) - Add the
`Rosenbrock`

standard test functional. (PR 602) - Add broadcasting of vector arithmetic involving
`ProductSpace`

vectors. (PR 555) - Add
`phantoms.poisson_noise`

. (PR 630) - Add
`NumericalGradient`

and`NumericalDerivative`

that numerically compute gradient and derivative of`Operator`

‘s and`Functional`

‘s. (PR 624)

### Improvements¶

- Add intelligence to
`power_method_opnorm`

so it can terminate early by checking if consecutive iterates are close. (PR 527) - Add
`BroadcastOperator(op, n)`

,`ReductionOperator(op, n)`

and`DiagonalOperator(op, n)`

syntax. This is equivalent to`BroadcastOperator(*([op] * n))`

etc, i.e. create`n`

copies of the operator. (PR 532) - Allow showing subsets of the whole volume in
`DiscreteLpElement.show`

. Previously this allowed slices to be shown, but the new version allows subsets such as`0 < x < 3`

to be shown as well. (PR 574) - Add
`Solvercallback.reset()`

which allows users to reset a callback to its initial state. Applicable if users want to reuse a callback in another solver. (PR 553) `WaveletTransform`

and related operators now work in arbitrary dimensions. (PR 547)- Several documentation improvements. Including:
- Improved installation docs and update of Chambolle-Pock documentation. (PR 121)

### Changes¶

- Change definition of
`LinearSpaceVector.multiply`

to match the definition used by Numpy. (PR 509) - Rename the parameters
`padding_method`

in`diff_ops.py`

and`mode`

in`wavelet.py`

to`pad_mode`

. The parameter`padding_value`

is now called`pad_const`

. (PR 511) - Expose
`ellipse_phantom`

and`shepp_logan_ellipses`

to`odl.phantom`

. (PR 529) - Unify the names of minimum (
`min_pt`

), maximum (`max_pt`

) and middle (`mid_pt`

) points as well as number of points (`shape`

) in grids, interval products and factory functions for discretized spaces. (PR 541) - Remove
`simple_operator`

since it was never used and did not follow the ODL style. (PR 543) The parameter`padding_value`

is now called`pad_const`

. - Remove
`Interval`

,`Rectangle`

and`Cuboid`

since they were confusing (Capitalized name but not a class) and barely ever used. Users should instead use`IntervalProd`

in all cases. (PR 537) - The following classes have been renamed (PR 560):
`LinearSpaceVector`

->`LinearSpaceElement`

`DiscreteLpVector`

->`DiscreteLpElement`

`ProductSpaceVector`

->`ProductSpaceElement`

`DiscretizedSetVector`

->`DiscretizedSetElement`

`DiscretizedSpaceVector`

->`DiscretizedSpaceElement`

`FunctionSetVector`

->`FunctionSetElement`

`FunctionSpaceVector`

->`FunctionSpaceElement`

- Change parameter style of differential operators from having a
`pad_mode`

and a separate`edge_order`

argument that were mutually exclusive to a single`pad_mode`

that covers all cases. Also added several new pad modes to the differential operators. (PR 548) - Switch from RTD documentation hosting to gh-pages and let Travis CI build and deploy the documentation. (PR 536)
- Update name of
`proximal_zero`

to`proximal_const_func`

. (PR 582) - Move unit tests from top level
`test/`

to`odl/test/`

folder and distribute them with the source. (PR 638) - Update pytest dependency to [>3.0] and use new featuers. (PR 653)
- Add pytest option
`--documentation`

to test all doctest examples in the online documentation. - Remove the
`pip install odl[all]`

option since it fails by default.

### Bugfixes¶

- Fix
`python -c "import odl; odl.test()"`

not working on Windows. (PR 508) - Fix a
`TypeError`

being raised in`OperatorTest`

when running`optest.ajoint()`

without specifying an operator norm. (PR 525) - Fix scaling of scikit ray transform for non full scan. (PR 523)
- Fix bug causing classes to not be vectorizable. (PR 604)
- Fix rounding problem in some proximals (PR 661)

## ODL 0.4.0 Release Notes (2016-08-17)¶

This release marks the addition of the `deform`

package to ODL, adding functionality for the deformation
of `DiscreteLp`

elements.

## ODL 0.3.1 Release Notes (2016-08-15)¶

This release mainly fixes an issue that made it impossible to `pip install odl`

with version 0.3.0.
It also adds the first really advanced solvers based on forward-backward and Douglas-Rachford
splitting.

### New features¶

### Improvements¶

`DiscreteLp.element()`

now allows non-vectorized and 1D scalar functions as input. (PR 476)- Speed improvements in the unit tests. (PR 479)
- Uniformization of
`__init__()`

docstrings and many further documentation and naming improvements. (PR 489, PR 482, PR 491) - Clearer separation between attributes that are intended as part of the subclassing API and those that are not. (PR 471)
- Chambolle-Pock solver accepts also non-linear operators and has better documentation now. (PR 490)
- Clean-up of imports. (PR 492)
- All solvers now check that the given start value
`x`

is in`op.domain`

. (PR 502) - Added test for in-place evaluation of the ray transform. (PR 500)

## ODL 0.3.0 Release Notes (2016-06-29)¶

This release marks the removal of `odlpp`

from the core library. It has instead been moved to a separate library, `odlcuda`

.

### New features¶

- To enable cuda backends for the odl spaces, an entry point
`'odl.space'`

has been added where external libraries can hook in to add`FnBase`

and`NtuplesBase`

type spaces. - Add pytest fixtures
`'fn_impl'`

and`'ntuple_impl'`

to the test config`conf.py`

. These can now be accessed from any test. - Allow creation of general spaces using the
`fn`

,`cn`

and`rn`

factories. These functions now take an`impl`

parameter which defaults to`'numpy'`

but with odlcuda installed it may also be set to`'cuda'`

. The old numpy specific`Fn`

,`Cn`

and`Rn`

functions have been removed.

### Changes¶

- Moved all CUDA specfic code out of the library into odlcuda. This means that
`cu_ntuples.py`

and related files have been removed. - Rename
`ntuples.py`

to`npy_ntuples.py`

. - Added
`Numpy`

to the numy based spaces. They are now named`NumpyFn`

and`NumpyNtuples`

. - Prepended
`npy_`

to all methods specific to`ntuples`

such as weightings.

## ODL 0.2.4 Release Notes (2016-06-28)¶

### New features¶

- Add
`uniform_discr_fromdiscr`

(PR 467). - Add conda build files (commit 86ff166).

### Bugfixes¶

- Fix bug in submarine phantom with non-centered space (PR 469).
- Fix crash when plotting in 1d (commit 3255fa3).

## ODL 0.2.3 Release Notes (2016-06-12)¶

### New features¶

`uniform_sampling`

now supports the`nodes_on_bdry`

option introduced in`RectPartition`

(PR 308).`DiscreteLpVector.show`

has a new`coords`

option that allows to slice by coordinate instead of by index (PR 309).- New
`uniform_discr_fromintv`

to discretize an existing`IntervalProd`

instance (PR 318). - The
`operator.oputils`

module has a new function`as_scipy_operator`

which exposes a linear ODL operator as a`scipy.sparse.linalg.LinearOperator`

. This way, an ODL operator can be used seamlessly in SciPy’s sparse solvers (PR 324). - New
`Resampling`

operator to resample data between different discretizations (PR 328). - New
`PowerOperator`

taking the power of an input function (PR 338). - First pointwise operators acting on vector fields:
`PointwiseInner`

and`PointwiseNorm`

(PR 346). - Examples for FBP reconstruction (PR 364) and TV regularization using the Chambolle-Pock method (PR 352).
- New
`scikit-image`

based implementation of`RayTransform`

for 2D parallel beam tomography (PR 352). `RectPartition`

has a new method`append`

for simple extension (PR 370).- The ODL unit tests can now be run with
`odl.test()`

(PR 373). - Proximal of the Kullback-Leibler data discrepancy functional (PR 289).
- Support for SPECT using
`ParallelHoleCollimatorGeometry`

(PR 304). - A range of new proximal operators (PR 401) and some calculus rules (PR 422) have been added, e.g. the proximal of the convex conjugate or of a translated functional.
- Functions with parameters can now be sampled by passing the parameter values to the sampling
operator. The same is true for the
`element`

method of a discrete function space (PR 406). `ProducSpaceOperator`

can now be indexed directly, returning the operator component(s) corresponding to the index (PR 407).`RectPartition`

now supports “almost-fancy” indexing, i.e. indexing via integer, slice, tuple or list in the style of NumPy (PR 386).- When evaluating a
`FunctionSetVector`

, the result is tried to be broadcast if necessary (PR 438). `uniform_partition`

now has a more flexible way of initialization using`begin`

,`end`

,`num_nodes`

and`cell_sides`

(3 of 4 required) (PR 444).

### Improvements¶

- Product spaces now utilize the same weighting class hierarchy as
`Rn`

type spaces, which makes the weight handling much more transparent and robust (PR 320). - Major refactor of the
`diagnostics`

module, with better output, improved derivative test and a simpler and more extensible way to generate example vectors in spaces (PR 338). - 3D Shepp-Logan phantom sliced in the middle is now exactly the same as the 2D Shepp-Logan phantom (PR 368).
- Improved usage of test parametrization, making decoration of each test function obsolete. Also the printed messages are better (PR 371).
`OperatorLeftScalarMult`

and`OperatorRightScalarMult`

now have proper inverses (PR 388).- Better behavior of display methods if arrays contain
`inf`

or`NaN`

(PR 376). - Adjoints of Fourier transform operators are now correctly handled (PR 396).
- Differential operators now have consistent boundary behavior (PR 405).
- Repeated scalar multiplication with an operator accumulates the scalars instead of creating a new operator each time (PR 429).
- Examples have undergone a major cleanup (PR 431).
- Addition of
`__len__`

at several places where it was missing (PR 425).

### Bugfixes¶

- The result of the evaluation of a
`FunctionSpaceVector`

is now automatically cast to the correct output data type (PR 331). `inf`

values are now properly treated in`BacktrackingLineSearch`

(PR 348).- Fix for result not being written to a CUDA array in interpolation (PR 361).
- Evaluation of
`FunctionSpaceVector`

now works properly in the one-dimensional case (PR 362). - Rotation by 90 degrees / wrong orientation of 2D parallel and fan beam projectors and back-projectors fixed (PR 436).

### Changes¶

`odl.set.pspace`

was moved to`odl.space.pspace`

(PR 320)- Parameter
`ord`

in norms etc. has been renamed to`exponent`

(PR 320) `restriction`

and`extension`

operators and parameters have been renamed to`sampling`

and`interpolation`

, respectively (PR 337).- Differential operators like
`Gradient`

and`Laplacian`

have been moved from`odl.discr.discr_ops`

to`odl.discr.diff_ops`

(PR 377) - The initialization patterns of
`Gradient`

and`Divergence`

were unified to allow specification of domain or range or both (PR 377). `RawDiscretization`

and`Discretization`

were renamed to`DiscretizedSet`

and`DiscretizedSpace`

, resp. (PR 406).- Diagonal “operator matrices” are now implemented with a class
`DiagonalOperator`

instead of the factory function`diagonal_operator`

(PR 407). - The
`...Partial`

classes have been renamed to`Callback...`

. Parameters of solvers are now`callback`

instead of`partial`

(PR 430). - Occurrences of
`dom`

and`ran`

as initialization parameters of operators have been changed to`domain`

and`range`

throughout (PR 433). - Assignments
`x = x.space.element(x)`

are now required to be no-ops (PR 439)

## ODL 0.2.2 Release Notes (2016-03-11)¶

From this release on, ODL can be installed through `pip`

directly from the Python package index.

## ODL 0.2.1 Release Notes (2016-03-11)¶

Fix for the version number in setup.py.

## ODL 0.2 Release Notes (2016-03-11)¶

This release features the Fourier transform as major addition, along with some minor improvements and fixes.

### New Features¶

- Add
`FourierTransform`

and`DiscreteFourierTransform`

, where the latter is the fully discrete version not accounting for shift and scaling, and the former approximates the integral transform by taking shifted and scaled grids into account. (PR 120) - The
`weighting`

attribute in`FnBase`

is now public and can be used to initialize a new space. - The
`FnBase`

classes now have a`default_dtype`

static method. - A
`discr_sequence_space`

has been added as a simple implementation of finite sequences with multi-indexing. `DiscreteLp`

and`FunctionSpace`

elements now have`real`

and`imag`

with setters as well as a`conj()`

method.`FunctionSpace`

explicitly handles output data type and allows this attribute to be chosen during initialization.`FunctionSpace`

,`FnBase`

and`DiscreteLp`

spaces support creation of a copy with different data type via the`astype()`

method.- New
`conj_exponent()`

utility to get the conjugate of a given exponent.

### Improvements¶

- Handle some not-so-unlikely corner cases where vectorized functions don’t behave as they should.
In particular, make 1D functions work when expressions like
`t[t > 0]`

are used. `x ** 0`

evaluates to the`one()`

space element if implemented.

### Changes¶

- Move
`fast_1d_tensor_mult`

to the`numerics.py`

module.

## ODL 0.1 Release Notes (2016-03-08)¶

First official release.