                 Changes in version 0.23.0 (2026-08-21)                 

  - fix: hash_input() for functions no longer loses the argument names
    of a body that is a single call.
  - feat: Added a hash_input() method for lists that applies
    hash_input() to all elements.

                 Changes in version 0.22.0 (2026-06-10)                 

  - 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).

                 Changes in version 0.21.0 (2026-02-26)                 

  - 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.

                 Changes in version 0.20.0 (2026-02-20)                 

  - 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().

                 Changes in version 0.19.0 (2025-09-12)                 

  - 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.

                 Changes in version 0.18.0 (2025-05-26)                 

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

                 Changes in version 0.17.0 (2025-05-12)                 

  - 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.

                 Changes in version 0.16.0 (2024-11-28)                 

  - 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.

                 Changes in version 0.15.1 (2024-06-24)                 

  - refactor: Update as_callback() functions.

                 Changes in version 0.15.0 (2024-04-10)                 

  - 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().

                 Changes in version 0.14.0 (2024-02-01)                 

  - 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

                 Changes in version 0.13.0 (2023-09-20)                 

  - 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)

                 Changes in version 0.12.0 (2023-05-12)                 

  - 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.

                 Changes in version 0.11.0 (2022-09-22)                 

  - 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.

                 Changes in version 0.10.0 (2022-01-11)                 

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

                 Changes in version 0.9.5 (2021-11-16)                  

  - Added helper deframe().

                 Changes in version 0.9.4 (2021-09-08)                  

  - Added helper capitalize().
  - Added helper to_decimal().
  - Fixed cleanup in register_namespace_callback().

                 Changes in version 0.9.3 (2021-07-14)                  

  - New (internal) helper functions: calculate_hash() and
    assert_ro_binding()

                 Changes in version 0.9.2 (2021-06-29)                  

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

                 Changes in version 0.9.1 (2021-04-28)                  

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

                 Changes in version 0.9.0 (2021-04-12)                  

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

                 Changes in version 0.8.0 (2021-03-19)                  

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

                 Changes in version 0.7.0 (2021-01-05)                  

  - 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.

                 Changes in version 0.6.0 (2020-11-17)                  

  - 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().

                 Changes in version 0.5.0 (2020-08-13)                  

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

                 Changes in version 0.4.0 (2020-07-17)                  

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

                 Changes in version 0.3.0 (2020-06-03)                  

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

                 Changes in version 0.2.0 (2020-04-15)                  

  - 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.

                 Changes in version 0.1.8 (2020-02-21)                  

  - New function check_packages_installed().
  - New function open_help().

                 Changes in version 0.1.7 (2020-01-28)                  

  - 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.

                 Changes in version 0.1.6 (2019-12-12)                  

  - 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.

                 Changes in version 0.1.5 (2019-09-28)                  

  - 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.

                 Changes in version 0.1.4 (2019-09-17)                  

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

                 Changes in version 0.1.3 (2019-08-22)                  

  - 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

                 Changes in version 0.1.2 (2019-08-07)                  

  - 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.

                 Changes in version 0.1.1 (2019-07-23)                  

  - 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.

                 Changes in version 0.1.0 (2019-07-10)                  

  - Initial release.
