--- a
+++ b/NEWS-4.0
@@ -0,0 +1,554 @@
+===============================================================================
+IT++ version 4.0.7                                         Released: 2009-12-27
+-------------------------------------------------------------------------------
+
+IT++ 4.0.7 is the next maintenance release based on the IT++ stable branch
+itpp-4-0. A list of modifications and bug-fixes is presented below:
+
+
+Modifications:
+--------------
+
+* Added support for automatic detection of MKL 10.2 libraries when using GCC
+
+* Improved performance of the Frobenious norm function
+
+* Improved documentation on the accuracy of LLR calculations
+
+* Disabled optimization flag "-O1" for the debug builds
+
+
+Bug-fixes:
+----------
+
+* Added equality and inequality operators for Vec<complex<double>> type (bug
+  report #2909998)
+
+* Added missing templated instantiations of is_hermitian() and is_unitary()
+  functions (bug report #2392728)
+
+* Added missing include files, so IT++ compiles cleanly with GCC 4.4 (bug
+  report #2780001)
+
+
+===============================================================================
+IT++ version 4.0.6                                         Released: 2008-10-08
+-------------------------------------------------------------------------------
+
+IT++ 4.0.6 is the next maintenance release based on the current IT++ stable
+branch (itpp-4-0). As usual, a brief list of modifications and bug-fixes is
+presented below:
+
+
+Modifications:
+--------------
+
+* Added GDB debugger helper display macros for IT++ data types (feature
+  request [1913404])
+
+* Reduced number of divisions in a sinc() function implementation
+
+* "itpp/config.h" no longer included in "itpp/base/itassert.h" header file
+
+
+Bug-fixes:
+----------
+
+* Fixed broken implementation of toeplitz() function for the case when two
+  different complex-valued input vectors are used as input arguments (bug
+  report [2110119]).
+
+* Fixed a minor bug in GF::set_size() method: the content of "alphapow" and
+  "logalpha" static variables is now properly copied when resizing them.
+
+* Fixed sort() and sort_index() so they again work for vectors with less
+  than two elements.
+
+* Fixed bug [2041474] in Vec<>::split() method, which was a regression with
+  respect to the previous 3.10.x stable releases.
+
+* Fixed incorrect usage of ZDOTU BLAS function when linking to 64-bit MKL
+  library for GNU/Linux (zdotusub Fortran wrapper function is required)
+
+* Suppressed warnings about deprecated "/Wp64" option when compiling with MS
+  Visual C++ Express 2008
+
+
+===============================================================================
+IT++ version 4.0.5                                         Released: 2008-07-19
+-------------------------------------------------------------------------------
+
+IT++ 4.0.5 is the next maintenance release of the current IT++ stable branch
+(itpp-4-0). As usual, a brief list of modifications and bug-fixes is
+presented below:
+
+
+Modifications:
+--------------
+
+* Mat<>::set_size() method now resets the number of rows/columns, if one of
+  the dimensions of a matrix is zero. This is consistent with the
+  constructor behaviour.
+
+* Suppressed a few MSVC++ warnings (C4512, C4701, C4244 and C4100) by minor
+  re-factoring of some code fragments
+
+* Changed the default debugging CFLAGS to "-g -O1" or "-Wall -ggdb -O1
+  -pipe", where the latter set is used with GCC.
+
+* Suppressed GCC 4.3 warnings on "ambiguous else" due to missing braces
+
+* Coding style unified and beautified using Artistic Style (astyle) source
+  code formatter
+
+
+Bug-fixes:
+----------
+
+* Fixed bug [2017948] in parsing from string routine of Vec<int> for "a:b:c"
+  format specifier
+
+* Fixed bug [2004345] causing incorrect result of Mat::concat_vertical(),
+  when one of the input matrices was empty. In such case the result is now a
+  copy of the other (non-empty) matrix.
+
+* Fixed bug [1995743] in BCH::decode() function, which resulted in a
+  decoding failure, while a codeword should have been correctable in theory.
+
+* Fixed one regression due to a missing "inline" keyword in
+  Vec<>::outer_product() specialisation
+
+* Fixed bug [1941219], which reports broken initialisation of
+  Fast_ICA::set_init_guess() method.
+
+
+===============================================================================
+IT++ version 4.0.4                                         Released: 2008-03-31
+-------------------------------------------------------------------------------
+
+IT++ 4.0.4 is the next bug-fix release of the current IT++ stable branch
+(itpp-4-0). As usual, a brief list of modifications and bug-fixes in this
+maintenance release is presented below:
+
+
+Modifications:
+--------------
+
+* Added support for "-1" indexing in Vec<>::del(i1, i2) method. For instance,
+  v.del(4, -1) should delete all elements of v starting from the fourth one.
+
+* In case of an overflow saturate QLLR values instead of aborting.
+
+* Improved performance of expand_base() and calculate_base_matrix() methods
+  of the BLDPC_Parity class
+
+* Const member functions in BERC and BLERC classes are now really "const".
+
+* Added new tests for error counters, converting functions and block LDPC
+  code classes
+
+* Clean-ups of the Vec and Mat classes (removed unnecessary "const"
+  keywords, use consistent naming, use in_range() private methods, revise
+  inlining of functions)
+
+* Minor documentation improvements (spelling fixes in the base module and
+  improved sqr() documentation).
+
+
+Bug-fixes:
+----------
+
+* Fixed bug [1908644] in Modulator<>::set(symbols, bits2symbols) function.
+  The bitmap matrix used in the demodulate_bits() function of the
+  Modulator<> base class was improperly constructed from the input
+  bits2symbols mapping vector. This resulted in demodulation errors for some
+  constellations, e.g. 64-QAM or 8-PSK.
+
+* Fixed wrong size of the resulting bit vector of the LDPC_Code::decode()
+  function
+
+* Fixed wrong conditions in it_assert_debug() calls of elem_mult_out()
+  methods of the Vec and Math classes
+
+* Fading_Generator::generate(int) methods in the derived classes are no
+  longer hidden.
+
+* Warnings are no longer treated as errors under MSVC++ compiler. This
+  should workaround the bug [1900236].
+
+* Fixed incorrect implementation of rint() function not available under
+  MSVC++ compiler
+
+* Fixed complex constructors in operators.cpp to build with g++ 4.3
+
+
+===============================================================================
+IT++ version 4.0.3                                         Released: 2008-02-21
+-------------------------------------------------------------------------------
+
+This bug-fix release is only intended to fix the wrong calling method of
+BLAS zdotu_ function, used in IT++ 4.0.1 and 4.0.2 releases. The problem is
+due to the fact that a std::complex<double> C++ type is not compatible with
+COMPLEX in Fortran. This appears to be especially visible when calling the
+Fortran functions that return a complex result.
+
+Therefore, the most portable solution to call such functions from C++ is to
+use a Fortran wrapper function that passes the complex result as the
+function argument. For this particular problem, the zdotusub_ wrapper
+function is provided. Besides, the configure script provides a new
+"--with-zdotu=<method>" option to override the default calling method of
+zdotu_ function. The valid options are as follows:
+- "zdotusub" - use the zdotusub_ Fortran wrapper function (default, if a
+   Fortran compiler is available)
+- "void" - compatible with BLAS libraries built with g77 compiler and BLAS
+  provided by Intel MKL
+- "none" - not using the zdotu_ function at all
+
+Please note that if IT++ 4.0.2 release works fine for you (all tests pass),
+you do not need to update IT++ to version 4.0.3.
+
+
+===============================================================================
+IT++ version 4.0.2                                         Released: 2008-02-15
+-------------------------------------------------------------------------------
+
+This is the second bug-fix release of the current IT++ stable branch
+(itpp-4-0). A brief list of modifications and bug-fixes in this maintenance
+release is as follows:
+
+
+Modifications:
+--------------
+
+* Documentation improvements:
+  - better description of the encoding/decoding and encoder state setting
+    functions of the Convolutional_Code class
+  - detailed description added to the get_bits2symbols() method of the
+    Modulator base class
+  - missing itpp namespace documentation is now generated (due to the
+    Doxygen's changes)
+
+* Added support for building a DLL library on Cygwin (IT++ has to be linked
+  to Cygwin's libblas and liblapack DLLs).
+
+
+Bug-fixes:
+----------
+
+* Fixed wrong result of the log_add() function for infinite arguments
+  (bug report [1863940])
+
+* Fixed GF2mat_sparse_alist::from_sparse() conversion function, which was
+  not usable for most of non-regular sparse matrices.
+
+* Fixed wrong verbose output of the Parser::get() function for "int" and
+  "bool" types of the parsed variables
+
+* Improved zdotu_ calling convention tests, which should solve problems with
+  blas_test and vec_test reported for 64-bit versions of Debian and SUSE
+  Linux systems (bug report [1855481]). A Fortran wrapper function zdotusub_
+  is no longer distributed with IT++.
+
+
+===============================================================================
+IT++ version 4.0.1                                         Released: 2007-12-15
+-------------------------------------------------------------------------------
+
+This is the first bug-fix release of the current stable itpp-4-0 branch. As
+usual, the maintenance release of the IT++ library is backward compatible
+with previous versions from the same branch (4.0.x), because only bug-fixes
+and modifications that do not break the interface have been included.
+
+Here is a brief summary of the most important changes included in this
+release:
+
+
+Modifications:
+--------------
+
+* Fortran compiler is no longer required for detection of some BLAS/LAPACK
+  implementations. For instance, the BLAS and LAPACK libraries provided by
+  Intel MKL or Apple's Accelerate Framework can be used without Fortran
+  compiler installed.
+
+* Flags and libraries returned by itpp-config and "pkg-config itpp" commands
+  are adjusted to the linker requirements of a particular platform and
+  library type. With this change, the use of "--static" switch should be no
+  longer necessary. This should also fix linking problems to a shared
+  library on Mac OS X.
+
+* Major improvement in calculation performance of SVD and QR decomposition
+  routines, especially for larger matrices.
+
+* "operator*(Vec &v, Mat &m)" documented as deprecated, because its
+  behaviour is equivalent to "outer_product(v, m.get_row(0))".
+
+* "-Werror" flag is not used any more by default when compiling the
+  debugging library.
+
+* Documentation improvements of svd() and diag() functions
+
+* Latest MKL and ACML libraries should be automatically detected on both 32-
+  and 64-bit systems.
+
+* The MS Visual C++ project files now use environment variables (INCLUDE,
+  LIB and PATH) to find the location of header and library files of MKL and
+  ACML. Besides, multi-threaded DLL libraries are built by default.
+
+* "min" and "max" macros are now unconditionally undefined in config.h and
+  config_msvc.h. IT++ uses std::min() and std::max() functions.
+
+* Autoconf 2.60 is now required when building from SVN.
+
+* Improved configure checks for isfinite(), isinf() and isnan() functions.
+  This should improve portability of the library on other UNIX and BSD
+  systems.
+
+* The configuration summary is logged in the config.log file.
+
+* Added "itpp_debug.pc" pkg-config's file for linking with the debugging
+  library.
+
+
+Bug-fixes:
+----------
+
+* Fixed compilation errors when using GCC 4.3 (bug-report [1848375])
+
+* Fixed LDPC tutorial examples (bug-report [1827041])
+
+* Added a workaround for a compilation error of a few explicit
+  instantiations in converters.cpp when using GCC 3.3.x with
+  "-finline-functions" flag enabled (bug-report [1818395])
+
+* The distributed files "itpp.spec" and "itpp-config.1" are no longer
+  removed when invoking a "make distclean" command (bug-report [1818391]).
+
+* Fixed wrong calculation of bessely() caused by incompatible
+  implementations of gamma() and lgamma() functions. This problem was only
+  visible when using an Intel C++ compiler.
+
+* Prevent warnings about string to char* conversions when using GCC >= 4.2
+
+
+===============================================================================
+IT++ version 4.0.0                                         Released: 2007-10-14
+-------------------------------------------------------------------------------
+
+IT++ 4.0.0 is the new stable release based on itpp-3-99 development branch.
+It supersedes our previous 3.10.x stable versions. After over one and a half
+year of intensive development it includes a lot of new features and
+improvements with respect to IT++ 3.10.12 release (the previous stable
+version).
+
+A brief summary of the most important additions and changes is listed below.
+Should you need more detailed history of changes that are new in this
+release, please have a look at the NEWS-3.99 and ChangeLog files.
+
+
+New features:
+-------------
+
+### Base module: ###
+
+* New functions for initializing vectors and matrices from strings
+  implemented. Main features of the improved parser are as follows:
+  - Decimal, octal and hexadecimal notation support according to C/C++
+    conventions, i.e. octal numbers starts with `0' (e.g. `0133', `077'),
+    decimal numbers starts with `1-9' or are single `0' digits, hexadecimal
+    numbers starts with `0x' or `0X' prefix and have at least one `0-9',
+    `a-f' or `A-F' digit after (e.g. 0xFF, 0x0, 0x070).
+  - Mixing of various representations in one string
+  - Signed numbers supported, i.e. with leading `+', `-' signs, e.g.
+    `-1000', `+0133', `-0x1'
+  - Vector values separated with spaces ` ', tabs `\t' or comma `,'
+  - Matlab's "a:b" or "a:b:c" notation for increasing and decreasing
+    values, e.g. "0:2:10", "-9:-18", "4:-1:0", "0x0:0x8:0xFF"
+  - Matrix rows separated with a single semicolon `;'
+  - `NaN' (not a number) and `Inf' (infinity) values properly interpreted
+  - Detection of syntax errors during parsing
+
+* New features of the communication channels:
+  - Implemented missing "Gauss I" and "Gauss II" Doppler spectra required by
+    a few COST207 channel models
+  - Channel_Specification and TDL_Channel classes extended with support of
+    LOS (Rice) fading for any tap. Removed Doppler spectrum of type `Rice',
+    since its generation method was the same as of the `Jakes' one. To
+    obtain the `Rice' spectrum, a relative power, and optionally relative
+    Doppler, needs to be defined for certain taps.
+  - Implemented exponential channel profile generation function
+
+* New implementation of the Normal_RNG and Complex_Normal_RNG classes, which
+  uses so-called Ziggurat algorithm. The new generators are about 4-5 times
+  faster than the previous ones using Box-Mueller method (feature request
+  [1707969] and [1711727]).
+
+* New Sort class implementation included with four different algorithms:
+  Introsort, Heap sort, Quick sort and Insertion sort. The implementation of
+  the new sorting functions is much faster than our previous QS()
+  implementation due to the use of low level pointer arithmetic (feature
+  request [1746876]).
+
+* Added repmat() functions, which expand an input matrix or vector to a
+  larger one by concatenating multiple copies of the input one.
+
+* New methods in Vec and Mat classes: elem_mult_inplace(), elem_mult_out(),
+  elem_div_out(), elem_mult_sum(), elem_div_sum() and sumsum()
+
+* New methods: set_rows() and set_cols() implemented in the Mat class
+
+* Added missing left(), right() and mid() methods to the Array class
+
+### Communications module: ###
+
+* Added new classes for Low-Density Parity Check (LDPC) codes. So-called
+  Block LDPC (B-LDPC) codes, or Quasi-Cyclic LDPC codes are supported as
+  well.
+
+* Added support for MacKay's "alist" representation of sparse GF(2)
+  matrices
+
+* Added systematic codewords support in BCH and RS encoder/decoder classes
+  (feature request [1418250])
+
+* Added a new function waterfilling() to solve water-filling problems
+
+### Statistics module: ###
+
+* Created a new set of Mixture of Gaussians (MOG) classes (Statistics
+  module)
+
+* Added templated Histogram class provided (feature request [1451288])
+
+### Other: ###
+
+* MS Visual C++ .NET project file for linking IT++ with ACML added. Also
+  added MSVC++ project files for building test programs.
+
+
+Modifications:
+--------------
+
+### Base module: ###
+
+* Major changes in IT++ file format related classes:
+  - the new file format (version 3) is incompatible with version 2, which
+    was used in IT++ 3.10.x series; for backward compatibility the previous
+    format can be handled using the it_file_old and it_ifile_old classes,
+    which are considered as deprecated and will be removed from the library
+    in future
+  - data is always saved using a little endian byte ordering; files files
+    written on machines using big or little endian ordering should be
+    identical; endianity variable removed from the data_header structure
+  - all size variables are stored using fixed-width 64-bit unsigned integer
+    type, and therefore are independent of the architecture word size (32-
+    or 64-bit)
+  - short and int data types are explicitly casted to fixed-with types
+    int16_t, uint16_t, int32_t and uint32_t, since C/C++ standards do not
+    assume fixed widths of these types
+  - cleaner and more efficient implementation of the write_data_header()
+    function
+  - added missing implementation of a pack() function, which compacts an
+    opened it_file by removing free space between data blocks
+  - added optional description filed which can be saved with each variable
+  - added missing operators and methods for reading and writing svec and
+    smat data types
+  - test program improved
+  - itload.m and itsave.m M-files updated to be compatible with the latest
+    IT++ file format
+
+* Improved and reorganised existing error handling macros:
+  - using standard NDEBUG flag for controlling it_assert_debug() macro,
+    which replaced a three-level ASSERT_LEVEL definition
+  - for backward compatibility it_assert0() and it_assert1() now behaves the
+    same as it_assert_debug()
+  - added new it_info() and it_info_debug() macros for printing information
+    messages; it_info_debug() is also dependent on the NDEBUG compile-time
+    definition
+  - added it_error_msg_style() function for changing the format of
+    it_assert(), it_error() and it_warning() messages; if style is set to
+    Minimum, file name and line number of the error/assert/warning macro is
+    not printed
+  - error functions extended to handle stream operators like `<<' or
+    `std::endl' in concatenation with strings (feature request [1569867])
+
+* Improved the consistency of the alloc(), free() and set_size() methods in
+  the Array, Mat and Vec classes
+
+* General performance improvements of various operators in Vec and Mat
+  classes by using a copy_vector() function where possible. The
+  copy_vector() function use BLAS 1 routines for double and complex<double>
+  arguments.
+
+* The outer_product() function now uses an extra argument "hermitian", which
+  controls the calculation for complex vectors. By default "hermitian" is
+  set to false, which results in (x * y^T) calculation. If "hermitian" is
+  true, (x * y^H) is calculated. This solution is backward compatible with
+  3.10.x interface of outer_product(). Final fix for bug [1727923].
+
+### Communications module: ###
+
+* Major redesign of 1D and 2D modulator classes. From now, there is only one
+  templated base class Modulator, which can handle 1D (real) and 2D
+  (complex) constellations. Other modulators inherits from this base class.
+  BPSK and PAM modulators are split into: BPSK_c/PAM_c classes which have
+  complex-valued interfaces, and BPSK/PAM that have real-valued interfaces.
+  Besides, demodulate_soft_bits() functions take an additional parameter
+  "method" to switch between Log-MAP or approximate demodulation. The input
+  signal for the Modulator_2D has now a slightly different meaning. Also an
+  improper definition of the QPSK constellation is fixed (it was a 4-QAM
+  modulator previously).
+
+* Important updates in the communication channels:
+  - Fading generators inheritance model redesigned. Now there are three
+    types of fading: Independent, Static and Correlated. The Correlated
+    fading can be generated using Rice (MEDS), FIR or IFFT methods. The
+    default fading type is set to `Independent'.
+  - The delay profile discretization function is improved and moved to the
+    TDL_Channel class. An additional parameter `sampling_time' is required
+    when setting the channel profile using the Channel_Specification object.
+    It is now possible to discretize the channel with too low sampling
+    frequency, but only if the taps being merged into a new single tap use
+    the same Doppler spectrum type.
+  - Cleaned up the interfaces of various fading generator classes
+
+* Improved interfaces of Modulator_ND classes, so they are now more similar
+  to 1D and 2D modulators. BTW, implemented Zero-Forcing (ZF) Log-MAP soft
+  demodulator.
+
+### Signal processing module: ###
+
+* Memory allocation for double and complex<double> based vectors and
+  matrices uses 16-byte alignment. This results in much better performance
+  (up to 30% improvement) of FFT/IFFT and DCT/IDCT operations when using
+  FFTW external library (feature request [1418707]).
+
+### Other: ###
+
+* Removed dependency on the external CBLAS library by providing direct
+  interfaces to Fortran BLAS routines (feature request [1746876]).
+
+* New "Signal Processing", "Statistics" and "Numerical Optimization" modules
+  created from a subset of classes and functions from the "Base" module
+
+* Restructuring of the source files in the "Base" module. Some of the
+  functions grouped in "Linear Algebra" and "Mathematical and Miscellaneous
+  Functions" sub-modules.
+
+* Modularization added to the configuration scripts. It is now possible to
+  select a limited set of modules, which will be built and installed as the
+  IT++ library.
+
+* Improvements in itpp-config and pkg-config's itpp.pc scripts. The changes
+  are intended to follow the distinction between linking to a static and
+  shared version of the library, which is used in pkg-config's itpp.pc file.
+  By default "itpp-config --libs" returns "-I${prefix}/lib -litpp", whereas
+  when "--static" is added in front of "--libs", the returned string is
+  extended with a set of external library names required for proper static
+  linking. Moreover, an additional "--debug" switch has been added, which
+  changes the output of "itpp-config --cflags" and "itpp-config --libs" by
+  providing debugging flags and debugging library name. For backward
+  compatibility "--cflags-opt", "--cflags-debug", "--libs-opt" and
+  "--libs-debug" still exist, but they are not documented and their use is
+  deprecated.
+