Changes in version 2.3.2
========================

* Bug fixes

   o stk_param_estim.m: Fix a bug related to parameter objects. More precisely,
     use (:) indexing systematically to access the vector of numerical
     parameters corresponding to a given parameter object.

   o @stk_kreq_qr/get.m: Fix a call to dot () to make it work when there is only
     one observation.

   o Add missing field "Depends" to the DESCRIPTION file in the Octave package.

* Minor changes

   o stk_param_getdefaultbounds.m: Return empty lower and upper bounds for
     parameter classes that do not implement the stk_param_getdefaultbounds
     (instead of calling error).

   o Add optional field "Autoload" to the DESCRIPTION file in the Octave package.


Changes in version 2.3.1
========================

* Bug fixes

   o stk_optim_hasfmincon.m: Detect fmincon by trying to use it, instead of
     relying on the result of the exist function (ticket #30 closed).

   o stk_param_estim.m: Make sure that the bounds that we use for the lnv
     parameter contain the starting point lnv0 when it is provided.

   o @stk_dataframe/set.m: Fix stk_error calls (missing mnemonic).

   o stk_distrib_bivnorm_cdf.m: Fix a bug in the case of mixtures of
     singular and non-singular cases.

   o @stk_dataframe/subsasgn.m: Preserve column names when deleting rows, even
     if the resulting array is empty.

* Minor changes

   o stk_init.m: Clear persistent variables. As a consequence, stk_init can now
     be used to restart STK completely.

   o stk_commonsize.m: Accept empty dimensions, under the condition that all
     input arguments have the same empty dimensions (in which case the result is
     empty).

   o stk_commonsize.m: is now faster when some arguments already have the proper
     size (unnecessary calls to repmat are avoided).

   o stk_distrib_normal_cdf.m, stk_distrib_bivnorm_cdf.m: are now slightly
     faster (unnecessary calls to stk_commonsize are avoided).


Changes in version 2.3.0
========================

* Model structures

   o lognoisevariance is now considered a mandatory field. For backward
     compatibility, a missing or empty lognoisevariance field is interpreted as
     -inf. A nan value in the lognoisevariance field is now interpreted as
     meaning that the variance of the noise must be estimated.

   o model.param is set to nan by stk_model. This special value indicates that
     the parameters must be estimated from the data before any prediction can
     be done.

   o Improved documentation for stk_model.

* Parameter estimation

   o stk_param_init defaults to using the input value of model.lognoisevariance
     if it is not NaN, and estimating the variance if it is NaN. The meaning of
     the fifth argument, now called DO_ESTIM_LNV, has thus slightly changed: it
     is used to force or prevent the estimation of the variance of the noise,
     regardless of the value of model.lognoisevariance.

   o stk_param_init also supports the heteroscedastic noisy case, but only when
     the variance of the noise is assumed to be known.

   o stk_param_init_lnv is a new function that provides a rough estimate of the
     variance of the noise (in the spirit of stk_param_init).

   o stk_param_estim estimates the variance of the noise if either
       a) param0lnv is provided and is not empty (as in STK <= 2.2.0), or
       b) model.lognoisevariance is NaN (new behaviour).
     If param0lnv is not provided, a starting point is obtained using the new
     stk_param_init_lnv function. In all cases (whether lnv is estimated or not)
     a meaningful value is returned for lnv (equal to model.nognoisevariance
     when lnv is not estimated).

   o stk_param_estim can provide a value for param0 when it is missing from the
     list of input arguments.

   o stk_param_relik: Compute G = W' * K * W in such a way that the result is
     always (?) symmetric.

* Prediction

   o stk_predict computes lambda_mu and RS only when necessary,
     depending on the number of output arguments.

* Covariance functions

   o stk_noisecov now has a 'pairwise' argument, like the others.

* Sampling

   o stk_sampling_randunif accepts empty dim argument when box is provided

* Simulation of Gaussian process sample paths

   o stk_generate_samplepaths.m: Do not add observation noise to the generated
     sample paths. This is consistent with stk_predict, which returns posterior
     variances for the unknown function, not for future noisy observations.

   o stk_conditioning.m: Simulate sample paths conditioned on noisy observations
     when the additional NOISE_SIM argument is provided.

   o stk_generate_samplepaths.m: Fix conditioning on noisy observations, which
     was not implemented properly until now.

   o stk_generate_samplepaths.m: The output is an stk_dataframe object if either
     MODEL.response_name exists and is a non-empty string, or one of the input
     arguments (XI, ZI, XT) is an stk_dataframe object.

   o stk_conditioning.m: The output is an stk_dataframe object if either LAMBDA
     or ZSIM is an stk_dataframe object.

* Objects representing sets

   o stk_hrect: new class to describe hyper-rectangle objects.

   o stk_boundingbox.m: constructs the bounding box for a set of points.

* Examples

   o stk_example_kb04 demonstrates how it is possible to estimate the variance
     of the noise without providing a initial guess for it.

   o stk_example_kb09.m demonstrates how to simulate conditional sample paths in
     the case of noisy observations, both in the homoscedastic and in the
     heteroscedastic cases.

* Miscellaneous

   o stk_distrib_bivnorm_cdf computes bivariate normal probabilities.

   o stk_disp_progress.m: New function that displays a textual progress
     indicator.

   o stk_feval handles cell-arrays of functions (ticket #19 closed),
     multivariate outputs (ticket #20 closed), and uses vectorized calls by
     default (unless a progress indicator is displayed).

   o sort, mtimes, uplus and uminus are now overloaded for stk_dataframe objects

   o min, max are now able to return a second output argument (index of
     mininizer or maximizer) for stk_dataframe arguments.

   o Now the output of stk_dataframe is always an stk_dataframe object.
     Previously, this wasn't true if the first input argument was, e.g., an
     stk_factorialdesign object.

   o stk_distrib_normal_ei, stk_distrib_student_ei: bugfix (the
     optional input argument "minimize" was not taken into account).

   o stk_distrib_normal_cdf.m: Fix the zero-variance case.


Changes in version 2.2.1
========================

* Octave 4.0 compliance

   o Fix unit tests   

* Octave package

   o Do not ship stk_test and stk_runtests with the Octave package


Changes in version 2.2.0
========================

* Octave package

   o The STK is now available both as an "all-purpose" Matlab/Octave toolbox (as
     usual) and as a full-fledged Octave package that can be installed using
     `pkg install`.

* Core

   o stk_model now also accepts function handles for covariance_type.

   o stk_ortho_func is deprecated and will be completeky replaced, in the 3.x
     series, by linear model objects. In the meantime, stk_ortho_func has been
     kept as a gateway to stk_lm_* functions and now supports the case of cubic
     polynomial models.

   o stk_cholcov: new function that adaptively adds a little bit of noise on the
     diagonal of a covariance matrix to help chol succeed, when the first
     factorization returned by chol is not complete (a warning is emitted when
     doing so). Used in stk_param_init, @stk_kreq_qr/get, stk_param_relik...

   o @stk_kreq_qr: heuristic improvement of numerical conditioning (implemented
     in the new private function compute_P_scaling).

* Covariance functions

   o Accept invRho = 0 in anisotropic covariance functions.

   o stk_sf_matern: Handle special cases (3/2, 5/2, Inf) explicitely, and handle
     large values of the smoothness parameter nu better.

   o Handle the case of Gaussian isotropic and anisotropic covariance functions
     in stk_param_init and stk_param_getdefaultbounds.

* Linear models

   o Introduce linear models objects. Currently, the following linear model
     object classes are available: stk_lm_null, stk_lm_constant, stk_lm_affine,
     stk_lm_quadratic, stk_lm_cubic and stk_lm_matrix.

   o Linear model objects are still considered an experimental feature. They can
     be accessed by setting model.order to nan, in which case model.lm is
     expected to contain a linear model object.

   o stk_example_misc03: New example script that demonstrates the use of linear
     model objects.

* Sample path simulation (stk_generate_samplepaths)

   o The simulation of conditioned sample paths has been made easier (see ticket
     #3 on SF). This is demonstrated by stk_example_kb08.

   o Now uses model.response_name (if available) to create column names for the
     output array, and xt.rownames (if available) to create row names.

   o stk_generate_samplepaths can deal with replicated rows in xt.

* Parameter estimation

   o stk_param_estim
      - Warn about constant-response data.
      - Return an additional 'info' structure, which currently contains the
        criterion that has been used, the criterion value at the optimum, and
        the bounds.
      - Add a new (optional) input argument that will make it possible, in the
        future, to select which estimation criterion to use.

   o stk_param_relik
      - Check symmetry of G = W' * K * W and apply a naive fix if it is not
        (emit a warning when doing so).
      - Improved implementation, which seems to reduce the number of warnings
        related to bad conditioning, and also improve the performance for
        large n (about 1000, say).

   o New optimization options (can bet set thorugh stk_options_set)
      - Add global options to control upper/lower bounds for param estim.
      - (Matlab) Add a 'optim_display_level' option to control the verbosity
        fmincon/fminsearch. Its default value is 'off'.

   o stk_param_gls: new function that computes the GLS estimator.

* Array objects (stk_dataframe, stk_factorialdesign)

   o stk_length: New function that returns the "length" of an array, currently
     defined as its number of rows.

   o Improved display for both stk_dataframe and stk_factorial objects

   o Fix and improve accessors (subsasgn, subsref, set, get, fieldnames)

   o Minimalist support for linear indexing on stk_dataframe objects

   o New overloaded methods: @stk_dataframe/abs, @stk_dataframe/reshape

   o @stk_dataframe/plot: Full rewrite to improve compatibility with the base
     plot function. The case where x is an stk_dataframe objects with two or
     more columns is now handled in a way that is consistent with the base plot
     function (i.e., if x has two columns, then we get two 1D plots).

   o @stk_dataframe/horzcat, @stk_dataframe/vertcat: Now the result is always an
     stk_dataframe object, and has row names iff either one of the two arguments
     doesn't have row names, or the row names of both arguments agree.

   o @stk_dataframe/bsxfun: Modify the behaviour of bsxfun for stk_dataframe
     objects. The result is always an stk_dataframe object, and has column names
     iff either one of the two arguments doesn't have columns names or the
     columns names of both arguments agree.

Graphics

   o stk_plot2d is deprecated and will be removed in the 3.x series. Use
     contour, mesh, surf... directly instead (they are now overloaded for
     stk_factorialdesign objects).

   o stk_plot1d: Improved flexibility in the way input arguments are handled.

   o stk_figure does not set the axis title any more.

Pareto domination

   o stk_isdominated: New function that returns true for dominated rows.

   o stk_paretofind: New function that finds non-dominated points.

   o stk_example_misc04: New example script illustrating random Pareto fronts.

* Faster and less verbose startup

   o Stop bothering users at startup with information that they can find in the
     README file anyway.

   o Don't display selected optimizers at startup.

   o In Matlab, don't bother checking if the PCT is installed.

* Documentation

   o New HTML documentation, available in the "all-purpose" Matlab/Octave
     release (doc/html directory) and online on Source-Forge at
     <http://kriging.sourceforge.net/htmldoc>.

   o Lots of fixes and improvements in help texts.

   o Add a CITATION file, which explains how to cite STK in publications.

   o stk_testfun_braninhoo: Fix domain bounds in the documentation.

* Miscellaneous

   o Options set/get
      - stk_options_set: Add a reset feature.
      - stk_options_set: Prevent persistent from being cleared (bugfix)

   o Remove page_screen_output (not needed anymore).

   o Restore the stk_ prefix for distrib_* functions (distrib_normal_cdf is
     renamed to stk_distrib_normal_cdf, distrib_student_ei to
     stk_distrib_student_ei, etc.)

   o Lots of internal changes, minor changes, etc. not worth mentioning here.


Changes in version 2.1.1
========================

* This is a minor bugfix release.

   o Fix a bug in stk_param_init.

   o Add size checks to several functions.

   o Warn Octave users about the problem with MEX-files in privates folders:
     Octave must be restarted when stk_init is run for the first time.


Changes in version 2.1.0
========================

* Several ways to get help, report bugs or ask for new features on Sourceforge
  are now proposed to the user (both in README or stk_init.m)

* Examples

    o Existing examples have been improved: descriptions rewritten; graphical
      options controlled globally thanks to dedicated plotting functions
      (stk_figure; stk_subplot, stk_axes, stk_title...); + lots of minor changes

    o New examples
        - kb06: ordinary kriging VS linear trend
        - kb07: simulations of Matern sample paths with different various nu
        - doe03: one-dimensional Bayesian optimization (expected improvement)

* Covariance functions

    o New function: stk_gausscov_iso.m (isotropic Gaussian covariance model)

    o New function: stk_gausscov_aniso.m (anisotropic Gaussian covariance model)

* Special functions

    o The precision of stk_sf_matern has been improved around 0 for high nu

    o New function: stk_sf_gausscorr (Gaussian correlation function in 1D)

* Design of experiments

    o New function: stk_phipcrit (phi_p criterion for space-filling designs)

    o New function: stk_maxabscorr (maximal pairwise absolute correlation)

* Probability distributions

    o A new 'probability distributions' module has been initiated
      (read misc/distrib/README to understand the reasons why)

    o Currently provides: pdf, cdf and expected improvement (EI) for the
      Gaussian and Student t distributions

* Matlab/Octave compatibility throughout all supported releases has been
  strengthened, thanks to the creation of a Matlab/Octave Langage Extension
  (MOLE) module

    o octave_quantile removed; instead, a replacement for quantile() is provided
      by the MOLE when needed.

    o new function graphicstoolkit(), providing a kind of replacement for
      graphics_toolkit(), that also work in Matlab and old Octave releases

    o ...

* Miscellaneous

    o stk_plot1dsim has been removed (use stk_plot1d instead)

    o plotting functions now work directly on the current axes

    o An optional 'box' argument has been added to stk_sampling_halton_rr2

    o stk_feval now uses input row names for its output

* Bugfixes

    o @stk_kreq_qr/stk_update is now (inefficient but) working

    o isequal() is now working for stk_dataframe and stk_kreq_qr objects in
      Octave 3.2.x (explicit overloading was required for these old releases)

    o and many other tiny little things


Changes in version 2.0.3
========================

* This is a minor bugfix release.

   o Fix a bug core/stk_predict.m (related to blockwise computations)


Changes in version 2.0.2
========================

* This is a minor bugfix release.

   o Fix a bug in @stk_dataframe/subsref.m (handle colnames properly when
     ()-indexing is used to extract a subset of rows).

   o Fix a bug in @stk_dataframe/stk_dataframe.m (make sure that .data contains
     numerical data) and add a copy constructor.


Changes in version 2.0.1
========================

* This is a minor bugfix release.

   o Fix a bug in stk_predict (don't compute the optional outputs lambda and mu
     when they are not requested by the caller).

   o Fix a bug in stk_sampling_olhs (fail neatly when called with n = 2).


Changes in version 2.0.0
========================

* Required Octave version number has been raised to 3.2.2.

* Important changes to the public API

   o New R-like data structures: @stk_dataframe, @stk_factorial_design.

   o The structures previously used everywhere in STK (with a ".a" field) are
     still supported but should be considered as deprecated (and will probably
     be completely removed in the next major release).

   o As a result, stk_predict () does not return a ".a/.v" structure any
     more. Instead, it returns an stk_dataframe object with two variables called
     "mean" and "var".

   o The function that computes (the opposite of the log of) the restricted
     likelihood is now called stk_param_relik instead of stk_remlqrg.

* Many improvements in the internal structure of STK, for the sake of clarity
  (for those who happen to read the code) and efficiency:

   o @stk_kreq_qr: new class for encapsulating basic computations related
     to a Gaussian process (kriging) model.

   o The old Kx_cache/Px_cache mechanism, for working efficiently on finite
     spaces, has been replaced by a new covariance fonction: stk_discretecov.

   o A new framework to encapsulate various approaches to parallel
     computations. Currently only supporting 'none' or 'parfor' (Mathworks' PCT
     toolbox parfor loops) engines, more to come later.

* Experimental support for parameter objects.

   o model.param is now allowed to be an object from a user-defined class. This
     feature is experimental, and not really used currently in the toolbox.

   o A new function stk_param_getdefaultbounds () has appeared in ./param, that
     was previously hidden in stk_predict (). It can be overridden in the case
     where model.param is an object from a user-defined class.

* New sampling algorithms and related functions

   o Fill-distance computation: exact (using Pronzato & Müller, Statistics &
     Computing, 2011) or approximate (using a space-filling reference set).

   o Van Der Corput and Halton RR2-scrambled sequences (quasi-MC)

   o NOLHS designs (Cioppa & Lucs, Technometrics, 2007)

* Miscellaneous

   o misc/options: a new system for managing options

   o octave_quantile(): replacement for the missing quantile() function in base
     Matlab (Mathworks' Statistics toolbox is not a requirement of STK).

   o Add MEX-files for computing "Gibbs-Paciorek quadratic forms" to support
     future work on non-stationary covariance functions.

   o AUTHORS: a list of maintainers and contributors can now be found at the
     root of the source tree.

   o stk_compile_all: now recompiles MEX-files automatically if the source code
     has changed.

   o Various new utility functions, tiny or not-so-tiny improvements,
     bugfixes here and there...


Changes in version 1.2
======================

* stk_predict
   o Now offers the possibility to compute the posterior covariance
     matrix (it is returned as a fourth optional argument).
   o Has been modified to work with non-stationary covariance functions.

* Added a new "pairwise" option to all covariance functions and also to
  stk_dist (formerly stk_distance_matrix). This options allows to compute
  only the diagonal of the full distance/covariance matrix).

* Space-filling designs
   o New function (stk_filldist) to compute the (discretized) fill distance.
   o New function (stk_sampling_olhs) to generate Orthogonal Latin
     Hypercube (OLH) samples using the algorithm of Ye (1998).

* New (experimental) function to choose automatically the starting point for
  a parameter estimation optimization procedure (stk_param_init).

* New functions to work with boxes: stk_rescale, stk_normalize.

* More flexible representation of data
   o Improved the flexibility most functions (stk_predict, stk_param_estim,
     ...), which are now accepting both matrices and "data structures"
     (with an 'a' field) as input arguments.
   o New function: stk_datastruct.

* Regular grids
   o New function stk_plot2d() that serves has a wrapper around
     {surf|contour|mesh|pcolor}-type functions, to plot data defined
     over a two-dimensional regular grid.
   o stk_sampling_regulargrid now also returns 'ndgrid-style' coordinate
     matrices stored in new .coord field.

* Examples
   o Reorganized the example folder and renamed all example scripts.
   o New example (stk_example_misc03) to demonstrate the effect of
     adding a prior on the covariance parameters.
   o Improved graphical outputs in stk_example_kb03.
   o New test function: stk_testfun_braninhoo (Branin-Hoo).

* Miscellaneous
   o Renamed stk_distancematrix to stk_dist.
   o Various new utility functions: stk_runexamples, stk_disp_framedtext,
     stk_disp_examplewelcome, stk_plot_shadedci, stk_octave_config.
   o Improved Octave-specific configuration.
   o Lots of bugfixes and improvements.


Changes in version 1.1
======================

* New special functions for the Matern 3/2 and 5/2 correlation
  functions (stk_sf_matern32, stk_sf_matern52). New covariance
  functions (stk_materncov32_iso, stk_materncov32_aniso, ...).

* New MEX-file to compute the separation distance (stk_mindist).

* New function to generate random Latin Hypercube Samples
  (stk_sampling_randomlhs). Renamed stk_sampling_cartesiangrid to
  stk_sampling_regulargrid, and changed the meaning of the first
  argument for consistency with other stk_sampling_* functions.

* Improved stk_model function. Now provides default parameters for
  several families of covariance functions.

* Renamed fields in "model" structures (covariance_cache to Kx_cache
  and P0 to Px_cache). A new field 'dim' has been added to the 'model'
  structure.

* Changed the order of the arguments of the functions that use the
  structure 'model'. Now, 'model' is always the first argument.

* Changed stk_param_estim to make it possible to estimate noise
  variance.

* Fixed issues in stk_param_estim.m related to the definition of the
  search domain and the selection of (constrained/unconstrained)
  optimizer.

* Renamed stk_conditionning to stk_conditioning.

* New functions for a more flexible and efficient management of STK's
  configuration in stk_init (path, compilation of MEX-file, checking
  for optional packages, selection of the default optimizer, ...).

* New functions for unit testing, based on Octave's testing system
  (stk_test, stk_runtests). Tests have been added to most functions in
  the toolbox.

* Improved documentation & new examples.

* Improved argument checking and error messages.

* Improved compatibility with older versions of Octave and Matlab.

* Lots of minor changes and bug fixes.

* Complete reorganization of the code (better directory structure).
