# mlr3misc 0.22.0

* feat: `as_short_string()` now prints factor values (#173).
* fix: `Dictionary`'s `remove()` now shows the correct key in the "did you mean" suggestion of its error message (#171).
* fix: `encapsulate()` now short-circuits when `.timeout = 0` and returns an immediate `Mlr3ErrorTimeout` log entry instead of silently disabling timeout enforcement.
* fix: `keep_in_bounds()` now has a consistent integer return type in its C call (#172).
* perf: `rcbind()` uses `%in%` instead of `intersect()` for its name check (#175).
* fix: `register_namespace_callback()` now wraps the user callback so it can be invoked by hook callers that pass `package` and `lib_path` arguments (e.g. `pkgload::load_all()`), which previously caused "unused arguments" errors (#180).
* perf: `topo_sort()` uses `set()` for faster updates (#174).
* perf: `unnest()` caches the `lengths()` call (#178).

# mlr3misc 0.21.0

* docs: Clarify the behavior of `encapsulate()` regarding stored conditions and output.
* fix: `encapsulate()` with `"evaluate"` now respects `.seed` and `.opts`.
* refactor: `encapsulate()` with `"evaluate"` no longer stores output, consistent with other encapsulation methods.
* refactor: Messages in `encapsulate()` logs are now stored as `condition` objects instead of `character`.
* feat: `Mlr3Error` objects now support storing parent conditions.

# mlr3misc 0.20.0

* fix: `unnest()` now works with vector-valued elements.
* feat: Add `warn_deprecated()`.
* BREAKING CHANGE: Remove `"msg"` column from encapsulate logs.
* fix: `discard()` no longer removes attributes.
* perf: Use `data.table::fifelse()` instead of `ifelse()`.

# mlr3misc 0.19.0

* feat: Added various new functions for improved error handling.
* feat: `encapsulate()` now returns the specific condition objects along the logs, allowing for  improved error handling on the caller side.

# mlr3misc 0.18.0

* feat: Added `"mirai"` as encapsulation method to `encapsulate()`.

# mlr3misc 0.17.0

* feat: `as_callbacks()` returns a list named by the callback ids now.
* feat: Added logical operators `%check&&%` and `%check||%` for `check_*`-functions from `checkmate` (moved here from `mlr3pipelines`).
* feat: Added helper `cat_cli()`.
* fix: Default `dicts_suggest = NULL` for `dictionary_get_item()` and `dictionary_retrieve_item()` for backward compatibility.
* fix: Wrong assert in `dictionary_sugar_inc_get`.
* feat: Functions `warningf()` and `stopf()` now have a `class` argument and also add the additional class `mlr3warning` and `mlr3error`, respectively.
  The condition object now also includes the call.

# mlr3misc 0.16.0

* fix: `crate()` is using the correct 'topenv' environment now.
* BREAKING CHANGE: Remove the unused 'safe' variants of dictionary getters.
* feat: `dictionary_sugar_get()` and corresponding functions now take a list of dictionaries as optional argument `.dicts_suggest` to look for suggestions if `.key` is not part of the dictionary.

# mlr3misc 0.15.1

* refactor: Update `as_callback()` functions.

# mlr3misc 0.15.0

* Feat: Added `strip_srcrefs` S3 generic, which removes source references from objects
* The RNG state is now copied to the callr session when using `encapsulate()`.

# mlr3misc 0.14.0

* Added argument `.compile` to function `crate()` because R disables byte-code
compilation of functions when changing their enclosing environment
* Added the possibility to include prototype arguments when adding elements to a `Dictionary`
* Removed unused argument `required_args` from `Dictionary` class
* Disable leanification when `ROXYGEN_PKG` environment variable is set

# mlr3misc 0.13.0

* Updated default environment for `crate()` to `topenv()` (#86).
* Added safe methods for dictionary retrieval (#83)
* fix: Fixed an important bug that caused serialized objects to be overly large
  when installing mlr3 with `--with-keep.source` (#88)

# mlr3misc 0.12.0

* Added new encapsulation mode `"try"`.
* Added functions `dictionary_sugar_inc_get` and `dictionary_sugar_inc_mget`
  which  allow to conveniently add suffixes to dictionary ids when retrieving
  objects.

# mlr3misc 0.11.0

* Added initial support for a callback mechanism, see `as_callback()`.
* Added helper `catn()`.
* Added helper `set_params()`.
* Added assign method for `get_private()`.
* Elements of a dictionary via `dictionary_sugar_mget()` are now returned named.

# mlr3misc 0.10.0

* Added helper `get_private()`.
* Added helper `map_br()` and `map_bc()`.
* Added helper `recycle_vectors()`.
* Added helpers `walk()`, `iwalk()` and `pwalk()`.

# mlr3misc 0.9.5

* Added helper `deframe()`.

# mlr3misc 0.9.4

* Added helper `capitalize()`.
* Added helper `to_decimal()`.
* Fixed cleanup in `register_namespace_callback()`.


# mlr3misc 0.9.3

* New (internal) helper functions: `calculate_hash()` and `assert_ro_binding()`

# mlr3misc 0.9.2

* R6 objects retrieved from the dictionary are now properly cloned.

# mlr3misc 0.9.1

* Fixed compilation for R versions older than 3.5.0 (#59).

# mlr3misc 0.9.0

* Changed return type of `reorder_vector()`.
* Added assertions in `pmap()` to avoid a segfault (#56).
* Added `count_missing()`.

# mlr3misc 0.8.0

* New function `reorder_vector()`.
* `formulate()` can now quote all terms, defaulting to quote all terms on the
  right hand side.

# mlr3misc 0.7.0

* Make more map functions work nicely with data frames and data tables.
* `formulate()` now supports multiple LHS terms.
* Added `format_bib()` and `cite_bib()` helpers for working with bibentries and
  roxygen2.

# mlr3misc 0.6.0

* New argument `.timeout` for `invoke()`.
* New argument `.timeout` for `encapsulate()`.
* Removed `cite_bib()` and Rd macro `\cite{}` and removed orphaned package
  `bibtex` from suggests.
* New argument `quietly` for `require_namespaces()`.
* New function `crate()` to cleanly separate a function from its environment.
* New function `register_namespace_callback()`.

# mlr3misc 0.5.0

* Added `compose()` function for function composition.
* Added method `leanify_package()` that shrinks the size of serialized R6
  objects.

# mlr3misc 0.4.0

* Added helper functions to assist in generating Rd documentation for 'mlr3'
  objects.

# mlr3misc 0.3.0

* Introduced a placeholder for column name prefixes in `unnest()`.

# mlr3misc 0.2.0

* Fixed an issue with `rcbind()` for columns of `x` named `y` (#42).
* Fixed broken `on.exit()` in `invoke()` if both a seed and a list of options
  were provided.

# mlr3misc 0.1.8

* New function `check_packages_installed()`.
* New function `open_help()`.

# mlr3misc 0.1.7

* `map_dtr()`, `imap_dtr()` and `pmap_dtr()` now pass `.idcol` down to argument
  `idcol` of `data.table::rbindlist()`.
* `cite_bib()` can now handle packages with multiple citation entries.
* Added argument `wrap` to `catf()`, `messagef()`, `warningf()` and `stopf()` to
  wrap the respective messages to a customizable width.
* Added `with_package()` helper, similar to the one in package `withr`.

# mlr3misc 0.1.6

* `cite_bib()` or Rd macro `\cite{}` can now return the citation information of
  the package if key is set to `"pkg::citation"`.
* Updated dictionary helpers.

# mlr3misc 0.1.5

* Fixed error in C code discovered by UBSAN checks on CRAN.
* Added `dictionary_sugar_mget()`.
* Renamed `dictionary_sugar()` to `dictionary_sugar_get()`.
* Added function `cite_bib()` and Rd macro `\cite{}` to insert entries from
  bibtex files into roxygen documentation.
* `unnest()` now creates list columns for non atomic list elements.

# mlr3misc 0.1.4

* Added argument `na_rm` to `which_max()` and `which_min()`.
* Fixed a bug in `as_short_string()` for empty atomic vectors.

# mlr3misc 0.1.3

* New function `detect()`.
* New function `dictionary_sugar()`.
* It is now asserted that the return value of `Dictionary$get()` is an R6 object.
* Fix some assertions in `Dictionary`

# mlr3misc 0.1.2

* New function `named_vector()`.
* New function `keep_in_bounds()`.
* New function `set_col_names()`.
* New function `distinct_values()`.
* Added argument `.key` to `rowwise_table()`.
* Additional arguments passed to `Dictionary$get()` and `Dictionary$mget()`
  must now be named.

# mlr3misc 0.1.1

* New function `encapsulate()` to call functions while recording a log.
* `invoke()`: New arguments `.opts` and `.seed` to temporarily set options or
  random seeds, respectively.
* Fixed warnings about partial argument matching.

# mlr3misc 0.1.0

* Initial release.
