# rust 1.4.0

## New features

* `ru()` and `ru_rcpp()` have an additional argument `mode` that allows the user to specify the known mode of the input function `logf` instead of finding it using numerical methods.

## Bug fixes and minor improvements

* An extra example has been added to `ru()`, involving different Box-Cox transformation parameters for different component variables.

* The list object returned from the function `ru()` has an extra component named `trans_fn`.  This is an R function that performs the inverse transformation from the transformed variable $\rho$, on which the generalised ratio-of-uniforms method is performed, back to the original variable $\theta$.

* The documentation of the functions `ru()` and `ru_rcpp()` now note that if the argument `n = 0` is passed then the ratio-of-uniforms bounding box is returned but no simulation is performed. This may be useful if the bounding box itself is of interest.

* In the description of the argument `logf` to `ru()` and `ru_rcpp()` it is advised that `logf = ` should be provided explicitly to avoid the potential for argument matching problems.

* In `plot.ru()` the arguments `xlabs` and `ylabs` have been super-seeded by an argument `var_names`, which can be used to provide variable names for use as axis labels.

* Improvements to the package manual.

* Activated 3rd edition of the `testthat` package

* WARNINGs in the CRAN package check results, like "init.c:60:47: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes] extern SEXP _revdbayes_RcppExport_registerCCallable();" have been avoided.

# rust 1.3.13

## Bug fixes and minor improvements

* In help files and vignettes DOIs are used rather than URLs.

# rust 1.3.12

## Bug fixes and minor improvements

* `LazyData: TRUE` has been removed from DESCRIPTION, because there is no data/ directory in rust.

# rust 1.3.11

## Bug fixes and minor improvements

* In `ru()` if `isTRUE()` is used to deal correctly with instances where there are missing values in the generalised ratio-of-uniforms test condition.

# rust 1.3.10

## Bug fixes and minor improvements

* This is a patch that avoids the CRAN package check NOTEs resulting from the use of revdbayes::: instead of revdbayes::.

# rust 1.3.9

* This is a patch aimed at avoiding false positive CRAN package check warnings on some platforms.

# rust 1.3.8

## Bug fixes and minor improvements

* Dependence on the spatstat package has been removed.

* In the S3 plot method `plot.ru()` warnings, stemming from stats::regularize.values(), which is called by stats::approx(), have been suppressed.

* A very basic S3 print method `print.ru()` has been added, which simply prints the call to `ru()` or `ru_rcpp()`.

# rust 1.3.7

## Bug fixes and minor improvements

* An extra argument `shoof` has been added to `ru()` and `ru_rcpp()` to enable the user to have control over the initial value used to check that a non-zero convergence indicator is indeed spurious.

* Functions that are not intended to be called by the user have been moved to rust-internal.R

* Use `inherits()` to check the class of objects returned from `try()`, rather than `class()`.

* Hyperlinks corrected in vignettes.

* pkgdown documentation at [https://paulnorthrop.github.io/rust/](https://paulnorthrop.github.io/rust/)

# rust 1.3.6

## Bug fixes and minor improvements

* Further steps are taken in the opimisations used to set up the ratio-of-uniforms bounding box (specifically in find_a() and in cpp_find_a()) to avoid erroneous (lack of) convergence warnings. These can occur if we start the optimisation algorithm too close to the solution.

* LF line endings used in inst/include/rust.h and inst/include/rust_RcppExports.h to avoid CRAN NOTE

# rust 1.3.5

## Bug fixes and minor improvements

* The summary method for class "ru" is now set up according to Section 8.1 of the R FAQ at (https://cran.r-project.org/doc/FAQ/R-FAQ.html).

* In the extra checks used to try to avoid erroneous convergence warnings lower and upper bounds on the parameters are now used.  

* Corrected minor typo in the penultimate sentence of the "Cauchy density" subsection in the "When can rust be used vignette": b1* should be b1+.

# rust 1.3.4

## Bug fixes and minor improvements

* Removed unnecessary dependence on the current release of R that caused an installation error on r-oldrel.

# rust 1.3.3

## New features

* New vignette. "When can rust be used?".

# rust 1.2.3

## Bug fixes and minor improvements

* In `ru()` and `ru_rcpp()` the constant `hscale` is used to shift `logf` (and hence scale the target density f) in function `logf` in the returned object.  This helps to avoid over/under-flow when contouring f in `plot.ru` when `d = 2`.

* The `var_names` argument to `ru_rcpp` didn't work.  This has been corrected.

* The arguments `lower, upper` to `ru` and `ru_rcpp` are now used, at least partly even when `rotate = TRUE`.  See the updated description of `lower, upper` in the documentation of `ru` and `ru_rcpp`.

* That the function `logf` supplied to `ru` or `ru_rcpp` should return `-Inf` when the density f is zero is stated explicitly in the help files.

* ru() did not work when `trans = "user"` and `d` > 1. This has been corrected.

* Extra checks are used to try to avoid erroneous convergence warnings.

* Incorrectly formatted link to the Rcpp Gallery webpage corrected in the vignette "Rusting Faster: Simulation using Rcpp".

* Extra examples provided for `ru` and for `ru_rcpp`: (a) Cauchy, (b) half-Cauchy and (c) bivariate normal x bivariate student-t.

# rust 1.2.2

## Bug fixes and minor improvements

* An overloading ambiguity has been corrected to ensure installation on Solaris.

# rust 1.2.1

## Bug fixes and minor improvements

* Corrected C++ function `vecpow` to avoid compilation errors on some platforms.

* Unnecessary dependence on packages `devtools` and `roxygen2` via Suggests is removed.

* Minor edit to vignette: provide link directly to example C++ file `user_fns.cpp` in `src` directory, rather than the the (identical) `example_user_fns.cpp` file in the `vignettes` directory.

# rust 1.2.0

## New features

* Packages Rcpp (https://CRAN.R-project.org/package=Rcpp) and RcppArmadillo (https://CRAN.R-project.org/package=RcppArmadillo) are used to speed up the computations if the user provides a C++ function to evaluate their target log-density. 

* New functions: `ru_rcpp`, `find_lambda_rcpp` and `find_lambda_one_d_rcpp`.  

* New vignette. "Rusting faster: Simulation using Rcpp".

## Bug fixes and minor improvements

* Bug fixed in `plot.ru()`: previously `plot.ru()` failed when `d > 2`  and no axis label names were provided.

* Bug fixed in `plot.ru` : previously, in the `d = 2` case, providing the graphical parameter `col` produced an error because `col = 8` was hard-coded in a call to `points`. Now the extra argument `points_par` enables the user to provide a list of arguments to `points`.

* "using `pairs()`" removed from the last sentence Description of `plot.ru()` because `pairs()` is not used when `d > 2`, rather a single plot is produced for each pair of variables.

* Obsolete function `rho_to_theta()` removed from function `ru` in `ru_sampling.R`.

* If the user calls `ru` (or `ru_rcpp`) with `trans = "user"` but doesn't supply `phi_to_theta` then an error is returned.

* `plot.ru` edited to avoid warning message that occurred in the `d=1` case when `breaks` was supplied as an argument.

* The functions `rgpd`, `gpd_sum_stats`, `gpd_init` and `gpd_logpost` are now exported.

# rust 1.1.0

## New features

* `plot.ru()` can now be used when `d > 2`: it produces pairwise plots of the simulated values.

* `find_lamba()`: argument `init_lambda` added to enable the user to supply an initial value for the Box-Cox transformation vector `lambda`.

## Bug fixes and minor improvements

* Unnecessary print statement `print(dim(phi))` removed from function `find_lambda()`.

* Unnecessary print statement `print(a_algor)` removed from function `ru()`.

* Correct `lambda$init` to `lambda$init_psi` in `ru()` when extracting Box-Cox information.
   
* Documentation of `ru()` updated to include a description of the returned function `logf_rho()` and simulated values `sim_vals_rho` and to clarify the meaning of the returned value of `f_mode`.

* `ru()`: the expression for the inverse Box-Cox transformation in the case where lambda is exactly 0 has been corrected. 

* `find_lambda()`: carry out calculation of the target on a shifted log scale to avoid underflow.

* Set up `plot.ru()` so that if the user supplies axis labels then they are used and otherwise the column name(s) of `ru_object$sim_vals` are used. Also enable plotmath symbols to be rendered in the axis labels.
