Skip to content

Latest commit

 

History

History
540 lines (403 loc) · 19.5 KB

CHANGELOG.rst

File metadata and controls

540 lines (403 loc) · 19.5 KB

1.7.0 (2017-03-01)

Version 1.7.0 introduces support for Python 3.6. Major new features are included for the generalised approximate message passing (GAMP) reconstruction algorims and the fast implementations of matrices. Finally, a few improvements and minor bug fixes are part of this release.

Additions

  • Added the Generalised Weighted Sparse input channel framework with basic Gaussian and Laplace channels to magni.cs.reconstruction.gamp.
  • Added a fast implementation of Structurally Random Matrices (SRMs) to magni.utils.matrices.

Improvements

  • Magni now supports Python 3.6.
  • A normalised mean squared error stop criterion is now also available for the iterative thresholding algorithms in magni.cs.reconstruction.it.

Bug Fixes

  • Fixed a compatibility issue between Magni and Conda >= 4.3.
  • Fixed a number of minor bugs.
  • Various documentation clean-ups.

Other Changes

  • Support for the optional usage of Bottleneck in Magni has been removed.

1.6.0 (2016-11-02)

Version 1.6.0 most notably adds the major new features: approximate message passing (AMP) and generalised approximate message passing (GAMP) reconstruction algorithms. Several smaller additions and improvements in other parts of Magni are also included.

Additions

  • Added approximate message passing (AMP) in magni.cs.reconstruction.amp.
  • Added generalised approximate message passing (GAMP) in magni.cs.reconstruction.gamp, including possibility of two different types of sum approximation in the algorithm.
  • Added support for 2D seperable transforms in magni.utils.matrices.

Improvements

  • Several new problem suites have been added to magni.cs.phase_transition.
  • An option to use logistic regression solver from scikit-learn has been added to magni.cs.phase_transition.
  • Improved task resource utilisation in magni.utils.multiprocessing.
  • Support in magni.utils.validation for validating inputs of functions only on first call (validate once).
  • Allowed ndarrays in a MatrixCollection.
  • The stop criteria and history saving options in magni.cs.reconstruction.it have been updated to reflect the options in the AMP/GAMP algorithms.
  • One dimensional DCT/DFT matrices are now also available in magni.imagining.dictionaries.

Bug Fixes

  • Fixed a validation bug in magni.afm.
  • Fixed ndarray float indexing problems.
  • Fixed Anaconda 4.2 compatibility issues.
  • Fixed a number of minor bugs.
  • Various documentation clean-ups.

1.5.0 (2016-06-30)

Version 1.5.0 is primarily an addition of extensive unittests of multiple parts of magni and a redo of magni.utils.multiprocessing.process. Furthermore, this version includes minor improvements and minor bug fixes.

Additions

  • Added extensive unittests of the following modules and subpackages:
    • magni.reproducibility
    • magni.utils.matrices
    • magni.utils.multiprocessing
    • magni.utils.validation

Improvements

  • Improved magni.reproducibility with the following changes:
    • Added env_export to conda_info in get_conda_info to hold information about
      the active environment in order to include information about pip packages.
    • Added an annotations_sub_group argument to write_custom_annotation to allow
      grouping custom annotations in a tree structure.
  • Improved magni.utils.validation with the following changes:
    • Added a superclass argument to validate_generic to allow validating classes
      based on inheritance.
    • Added the validate_once function to allow validating the arguments of a
      function only the first time the function is called. Furthermore, added the enable_validate_once function to enable validate_once which is disabled by default.
  • Improved magni.utils.multiprocessing.process by adding the option to use concurrent.futures instead of multiprocessing each having some advantages over the other. See the documentation for more information.

Bug Fixes

  • Fixed a bug where importing magni raised an exception even when the package dependencies were met. This was done by making package version checking more robust.
  • Fixed a mathematically incorrect behaviour as, previously, Matrix.T actually implied Matrix.conj().T, and MatrixCollection.T actually implied MatrixCollection.conj().T.
  • Fixed a few holes in the checks of the validation schemes of the validation functions to catch invalid validation schemes.
  • Made all doctests pass even if the example.mi is not available - this is only relevant when retrieving magni from secondary sources.
  • Fixed a number of minor bugs.
  • Various documentation clean-ups.

1.4.0 (2016-01-29)

Version 1.4.0 is primarily an addition of the cs.indicators package, an extension of the imaging.dictionaries package, an extension of the imaging.measurements package, and an extension of the reproducibility package. Furthermore, unittests have been added, examples have been updated and added, and this version includes minor improvements and minor bug fixes.

Additions

  • Added the cs.indicators module which currently provides functions to calculate the values of the performance indicators; coherence, mutual coherence, and relative energy in relation to measurement matrices and dictionary matrices.
  • Added functionality to the imaging.measurements package.
    • imaging.measurements is now a package rather than a module.
    • A number of functions have been added: construct_pixel_mask,
      lissajous_sample_image, lissajous_sample_surface, uniform_rotated_line_sample_image, uniform_rotated_line_sample_surface, zigzag_sample_image, and zigzag_sample_surface.
  • Added functionality to the reproducibility package:
    • Added the reproducibility.data module which currently provides access to
      the following already existing functions: get_conda_info, get_datetime, get_git_revision, get_magni_config, get_magni_info, get_main_file_name, get_main_file_source, get_main_source, get_platform_info, get_stack_trace.
    • Added a function to reproducibility.data: get_file_hashes.
    • Added a function to reproducibility.io: write_custom_annotation.
  • Added unittests for the cs.indicators module, the imaging.dictionaries package, and the utils.plotting module.
  • Added an iPython Notebook example of the usage of the reproducibility.data module.

Improvements

  • Improved the dictionary matrix generating functions of the imaging.dictionaries package to accept overcomplete DCT and DFT matrices.
  • Rewritten the following functions of the imaging.measurements package for readability and reduced computation time: random_line_sample_image, random_line_sample_surface, uniform_line_sample_image, and uniform_line_sample_surface.
  • Improved the imsubplot function of the imaging.visualisation module to accept more versatile x_ticklabels and y_ticklabels as well as to accept a fixed_clim.
  • Improved the get_git_revision function of the reproducibility.data module to allow for other git root directories and to include git remote -v information.
  • Updated tests.ipynb_examples to support Jupyter in addition to iPython 2 and iPython 3.
  • Updated the following examples to reflect the current state of the package: imaging-dictionaries, imaging-measurements, magni, and reproducibility-io.

Bug Fixes

  • Fixed a few bugs in magni.utils.validation.validate_numeric.
    • The exception for non-numeric variables is now raised by the module with a
      sensical message rather than as a side-effect.
    • The function call now accepts precisions which exist only for some of the
      specified types.
  • Fixed a number of minor bugs.
  • Various documentation clean-ups.

1.3.0 (2015-05-05)

Version 1.3.0 is primarily an extension of the afm package, a generalisation and restructuring of the cs.reconstruction package, and an extension of the imaging package. Furthermore, this version includes minor improvements and minor bug fixes.

Additions

  • Added functionality to the imaging package.
    • A number of functions have been added: double_mirror, get_inscribed_masks,
      visualisation.imsubplot, and visualisation.mask_img_from_coords.
    • imaging.dictionaries is now a package rather than a module. In addition to
      the existing functionality, the package has an added analysis module for analysing dictionaries.
  • Added the utils.types module which currently provides the following general-purpose classes: ClassProperty and ReadOnlyDict.
  • Added functionality to chase data for reproducibility purposes. A number of functions have been added to the reproducibility.io module: chase_database, create_database, read_chases, and remove_chases.
  • Added tests of the cs.phase_transition package and of the cs.reconstruction package.
  • Sphinx >= 1.3 is now required to build the documentation.

Improvements

  • Added functionality for reading and representing all known .mi files.
    • afm.io and afm.types are now packages rather than modules.
    • afm.io.read_mi_file supports all known .mi files.
    • afm.types contains the following classes (of which some are rewrites of
      previous classes): BaseClass, File, FileCollection, image.Buffer, image.Image, spectroscopy.Buffer, spectroscopy.Chunk, spectroscopy.Grid, spectroscopy.Point, and spectroscopy.Spectroscopy.
  • Added functionality for customising the compressive sensing reconstruction algorithms of the cs.reconstruction package.
    • cs.reconstruction.it has been added for general iterative thresholding
      compressive sensing reconstruction functionality. Besides from being able to act as standard iterative hard thresholding and iterative soft thresholding, the threshold operator, the intial point and the step size can be configured.
    • cs.reconstruction.sl0 has been modified for general smoothed l0 compressive
      sensing reconstruction functionality. Besides from being able to act as original smoothed l0 and modified smoothed l0, the sigma, L, and mu parameters can be configured.

Bug Fixes

  • Fixed a number of minor bugs.
  • Various documentation clean-ups.

1.2.0 (2015-03-13)

Version 1.2.0 is primarily a rewrite of the validation and configuration parts of the package combined with the addition of automated testing capabilities. Furthermore, this version includes minor improvements and bug fixes.

Additions

  • Added automated testing capabilities.
    • tests/run_tests.py runs all tests in the directory.
    • tests/wrap_doctests.py and tests/ipynb_examples.py check that all doctests and ipython notebook examples of the package produce the expected results.
    • tests/style_checks.py checks the code of the importable package for various errors using pyflakes, for PEP8 conformance, and for acceptable cyclomatic complexity using radon.
    • tests/build_docs.py checks that the documentation of the package can be
      automatically generated using sphinx.
    • tests/config.py, tests/imaging_evaluation.py, and tests/reproducibility.py
      test specific parts of the package.

Improvements

  • Rewritten validation functionality.
    • magni.utils.validation.validate_generic has been added for validation of generic (generally non-numeric) variables through an interface which is less error-prone and has a higher abstraction level than validate.
    • magni.utils.validation.validate_numeric has been added for validation of numeric variables through an interface which is less error-prone and has a higher abstraction level than validate and validate_ndarray.
    • magni.utils.validation.validate_levels has been added for validation of
      "nested" variables (sequences, sets, mappings, etc.) through an interface which is less error-prone and has a higher abstraction level than validate.
  • Updated every validation call in the package to use the new validation functionality resulting in improved validation.
  • Rewritten magni.utils.config.Configger to provide a subset of the interface of a dict in addition to the get and set methods.
  • Updated every config module in the package to use the new Configger functionality resulting in increased readability.
  • Changed some of the configuration parameter names which may cause the new version of the package to be incompatible with code written for a previous version (sorry, but this should not happen again).
    • In cs.phase_transition.config: renamed 'n' to 'problem_size'.
    • In cs.reconstruction.iht.config: renamed 'kappa' to 'kappa_fixed', and 'threshold_rho' to 'threshold_fixed'.
    • In cs.reconstruction.sl0.config: replaced 'algorithm' by 'sigma_start', 'L', and 'mu'; replaced 'L' by 'L_geometric_start' and 'L_fixed'; and renamed 'L_update' to 'L_geometric_ratio', 'mu' to 'mu_fixed', 'mu_end' to 'mu_step_end', 'mu_start' to 'mu_step_start', 'sigma_min' to 'sigma_stop_fixed', and 'sigma_update' to 'sigma_geometric'.
  • Changed doctests to import required modules to allow nosetests and similar software to run the doctests of the package.
  • Added a configuration option in magni.utils.multiprocessing.config, 'silence_exceptions', to silence exceptions when using magni.utils.multiprocessing.process.
  • Made minor improvements to selected parts of the package.

Bug Fixes

  • Fixed a number of minor bugs.

1.1.0 (2014-11-25)

Version 1.1.0 is primarily an improvement of the IPython Notebook examples and the docstring examples. Furthermore, this version includes minor improvements and bug fixes.

Additions

  • Added markdown comments and more visual output to the IPython Notebook examples.

Improvements

  • Changed docstring examples to yield more robust output and thus pass doctests in a wider variety of environments.
  • Changed docstring examples relying on the provided example.mi file to unconditionally pass rather than fail if the example file is unavailable.
  • Changed the default colormap from 'jet' to 'coolwarm'.
  • Made minor improvements to selected parts of the package.

Bug Fixes

  • Fixed a number of minor bugs.

1.0.0 (2014-05-23)

Version 1.0.0 is the first public release of the Magni package. The present version is essentially a rewrite of most of the code featured in version 0.1.0 alongside a lot of new code. The additions and improvements are reflected directly in the extensive documentation of this version. The present entry in the changelog is thus kept to a minimum whereas future versions will include fewer additions and improvements and they will be accompanied by more detailed changelog entries.

The public interface introduced is as follows:

  • magni.afm.config.get
  • magni.afm.config.set
  • magni.afm.io.read_mi_file
  • magni.afm.reconstruction.analyse
  • magni.afm.reconstruction.reconstruct
  • magni.afm.types.Buffer
  • magni.afm.types.Image
  • magni.cs.phase_transition.config.get
  • magni.cs.phase_transition.config.set
  • magni.cs.phase_transition.io.load_phase_transition
  • magni.cs.phase_transition.plotting.plot_phase_transition_colormap
  • magni.cs.phase_transition.plotting.plot_phase_transitions
  • magni.cs.phase_transition.determine
  • magni.cs.reconstruction.iht.config.get
  • magni.cs.reconstruction.iht.config.set
  • magni.cs.reconstruction.iht.run
  • magni.cs.reconstruction.sl0.config.get
  • magni.cs.reconstruction.sl0.config.set
  • magni.cs.reconstruction.sl0.run
  • magni.imaging.dictionaries.get_DCT
  • magni.imaging.dictionaries.get_DFT
  • magni.imaging.domains.MultiDomainImage
  • magni.imaging.evaluation.calculate_mse
  • magni.imaging.evaluation.calculate_psnr
  • magni.imaging.evaluation.calculate_retained_energy
  • magni.imaging.measurements.construct_measurement_matrix
  • magni.imaging.measurements.plot_pattern
  • magni.imaging.measurements.plot_pixel_mask
  • magni.imaging.measurements.random_line_sample_image
  • magni.imaging.measurements.random_line_sample_surface
  • magni.imaging.measurements.spiral_sample_image
  • magni.imaging.measurements.spiral_sample_surface
  • magni.imaging.measurements.square_spiral_sample_image
  • magni.imaging.measurements.square_spiral_sample_surface
  • magni.imaging.measurements.uniform_line_sample_image
  • magni.imaging.measurements.uniform_line_sample_surface
  • magni.imaging.measurements.unique_pixels
  • magni.imaging.preprocessing.detilt
  • magni.imaging.visualisation.imshow
  • magni.imaging.visualisation.shift_mean
  • magni.imaging.visualisation.stretch_image
  • magni.imaging.mat2vec
  • magni.imaging.vec2mat
  • magni.reproducibility.io.annotate_database
  • magni.reproducibility.io.read_annotations
  • magni.reproducibility.io.remove_annotations
  • magni.utils.multiprocessing.config.get
  • magni.utils.multiprocessing.config.set
  • magni.utils.multiprocessing.File
  • magni.utils.multiprocessing.process
  • magni.utils.config.Configger
  • magni.utils.matrices.Matrix
  • magni.utils.matrices.MatrixCollection
  • magni.utils.plotting.setup_matplotlib
  • magni.utils.plotting.colour_collections
  • magni.utils.plotting.div_cmaps
  • magni.utils.plotting.linestyles
  • magni.utils.plotting.markers
  • magni.utils.plotting.seq_cmaps
  • magni.utils.validation.decorate_validation
  • magni.utils.validation.disable_validation
  • magni.utils.validation.validate
  • magni.utils.validation.validate_ndarray
  • magni.utils.split_path

Improvements

  • Rewrote 'magni.cs.phase_transition' to use 'magni.utils' functionality and simplify the code significantly.
  • Rewrote 'magni.cs.phase_transition' to use pytables instead of h5py by using 'magni.utils.multiprocessing.File' to increase the abstraction level.
  • Refactored 'magni.cs.reconstruction' to use a consistent naming convention for the modules of a reconstruction algorithm.
  • Added validation options to the functions of the 'magni.utils.validation' module.
  • Reformatted the packages, modules, and functions in the present package to be PEP8 compliant.
  • Documented the packages, modules, and functions in the present package in a format compatible with the sphinx numpydoc plugin according to https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt

0.1.0 (2013-10-28)

Version 0.1.0 is basically the merge of selected functionality from two previous Python packages, the Compressive Sensing Simulation Framework ('cssf') and the Wind Analysis Framework ('waf'). A few essential improvements and a single bug fix are included in this version but everything else is postponed to be included in the next version.

Additions

  • Copied a number of subpackages from the Compressive Sensing Simulation Framework ('cssf') package into the present package with minor changes:
    • The 'cssf.iht' subpackage as 'magni.cs.reconstruction.iht'.
    • The 'cssf.sl0' subpackage as 'magni.cs.reconstruction.sl0'.
    • The 'cssf.test' subpackage as 'magni.cs.phase_transition'.
  • Copied a number of subpackages from the Wind Analysis Framework ('waf') package into the present package with minor changes:
    • The 'waf.multiprocessing' subpackage as 'magni.utils.multiprocessing'.
    • Elements ('_util.split_path', '_validation.decorate_validation', and '_validation.validate') of the 'waf.utils' subpackage as 'magni.utils'.

Improvements

  • Changed 'magni.cs.phase_transition' to run simulations in parallel to reduce the time spent on simulating reconstruction algorithms.
  • Changed 'magni.utils.validation' to include the function 'disable_validation' which globally disables validation to reduce the time spent on computations.

Bug Fixes

  • Fixed a bug with multiprocessing and mkl competing for CPU cores.