# splines2 0.4.5

## Minor changes

* Improved the computational efficiency of finding the knot intervals for `x`
  (by replacing the naive binary search implementation with `std::upper_bound`
  and `std::distance`).


# splines2 0.4.4

## New features

* Added the `makepredictcall()` methods for all available spline basis functions
  to help `model.frame.default()` create the right matrices when predicting from
  models with terms such as `bSpline()`, etc.  Thanks Zheyuan Li for suggesting
  this feature.
* Added arguments `derivs` and `integal` to `bSpline()` for consistency with
  `mSpline()` and `bernsteinPoly()`, etc.

## Minor changes

* Made the internal checking procedure more strict to throw an error if any
  internal knots are placed at or outside boundary:
  [issue 5](https://github.com/wenjie2wang/splines2/issues/5).

## Bug fixes

* Fixed the `predict()` method for `cSpline` objects when `scale = FALSE`.


# splines2 0.4.3

## New features

* Enabled extended knot sequence that allows multiplicity of internal knots for
  B-splines, M-splines, I-splines, and C-splines in the C++ interface.
* Added type conversion to `BernsteinPoly` and `PeriodicMSpline` objects to the
  C++ interface.

## Minor changes

* Added testing examples for constructing spline basis functions via the C++
  interface.


# splines2 0.4.2

## New features

* Added `knots()` methods to extract internal knots and boundary knots from a
  given *splines2* object.

## Major changes

* Updated the generation of the knot sequence for periodic M-splines following
  Piegl and Tiller (1997), which relaxed the previous requirement that
  `length(knots) >= degree` to `length(knots) >= degree - 1`.


# splines2 0.4.1

## New features

* Added function `naturalSpline()` providing implementation of nonnegative
  natural cubic splines.
* Added argument `periodic` to function `mSpline()` for periodic M-splines.
* Added argument `integral` to function `mSpline()` for integrals of M-splines
  or periodic M-splines.
* Added `deriv()`, `predict()`, and `print()` method for `naturalSpline` class
  object.

## Minor changes

* Updated the `deriv()` method for `mSpline` class object for periodic
  M-splines.


# splines2 0.3.1

## Minor changes

* Modified testing examples for CRAN tests on r-patched-solaris-x86 and
  r-oldrel-macos-x86_64.


# splines2 0.3.0

## New features

* Added function `bernsteinPoly()` providing implementation of generalized
  Bernstein polynomials.
* Added C++ interface that can be easily integrated with **Rcpp**.

## Major changes

* Changed most implementations from R to C++ with help of **Rcpp** and
  **RcppArmadillo** to boost the performance.

## Minor changes

* Made piece-wise constant basis functions continuous at right boundary knot for
  consistency with spline basis matrix of non-zero degrees.
* Changed the default value of argument `intercept` in function `iSpline()` and
  `cSpline()` to `TRUE` for a complete set of spline basis functions in
  shape-restricted regression.
* Removed the corresponding M-spline basis from attributes of outputs from
  `iSpline()` and `cSpline()`.
* Removed the corresponding B-spline basis from attributes of outputs from
  `bSpline()`.

## Bug fixes

* Fixed `deriv.mSpline()` method for third derivatives of scaled C-splines.


# splines2 0.2.8

## Bug fixes

* Fixed inconsistency of argument `df` for piecewise constant basis functions
  when `knots = NULL`.

## Minor changes

* Rewrote testing suite for using the **tinytest** package instead of
  **testthat**.


# splines2 0.2.7

## Minor changes

* Updated tests for R development version.


# splines2 0.2.6

## Minor changes

* Added checks for any internal knot incorrectly placed outside of the boundary
  knots and added warnings for users' reference.


# splines2 0.2.5

## Minor changes

* Added more tests and increased code coverage.

## Bug fixes

* Fixed evaluation of derivatives of M-splines for a single value. Thanks Ina
  Jazic for reporting the bug and providing possible fix.
* Fixed `deriv.cSpline()` method for derivatives of order greater than two when
  `scale = TRUE`.


# splines2 0.2.4

## New features

* Added function `dbs()` generating derivative of given order of B-splines. It
  is a similar function with `splines::splineDesign()`. However, it provides a
  more user-friendly interface and more consistent handling on `NA`'s.
* Added `deriv()` methods for derivatives of given order of any existing
  **splines2** object that can be generated currently.

## Major changes

* Added argument `derivs` to function `mSpline()` and `iSpline()` for
  derivatives.
* Changed all the classes of object generated for a better dispatching on
  methods.

## Minor changes

* Added tests for all major functions with the help of package **testthat**.

## Bug fixes

* Fixed the generation of splines without any internal knot.


# splines2 0.2.3

## Bug fixes

* Fixed one-piece constant basis for M-splines.


# splines2 0.2.2

## Bug fixes

* Fixed the NA's handling in all the functions constructing spline basis matrix.


# splines2 0.2.1

## New features

* Added function `bSpline()` generating B-spline basis allowing zero degree or
  piecewise constant basis based on function `bs()` in the **splines** package.
* Introduced function `bSpline()` to allow M-splines of degree zero.
* Added function `cSpline()` constructing convex spline (C-spline) basis.
* Added `predict()` methods for `bSpline2` object and `cSpline` object generated
  by `bSpline()` and `cSpline()`, respectively.
* Added `print()` methods for all **splines2** objects developed so far.

## Major changes

* Improved the function `iSpline()` to construct I-spline basis directly from
  B-spline basis instead of M-spline basis.

## Minor changes

* Updated all CRAN URL to a canonical form suggested.


# splines2 0.1.0

## New features

* The first version of **splines2** providing functions constructing M-spline,
  I-spline, and integral of B-spline basis.
