Breaking Changes
- Lookup callables for simulation are now expected to accept/return dataframes with
the corresponding parameter/target column labels
Added
- SHAP explanations via the new `SHAPInsight` class
- Optional `insights` dependency group
- Insights user guide
- Example for a traditional mixture
- `allow_missing` and `allow_extra` keyword arguments to `Objective.transform`
- `add_noise_to_perturb_degenerate_rows` utility
- `benchmarks` subpackage for defining and running performance tests
– `Campaign.toggle_discrete_candidates` to dynamically in-/exclude discrete candidates
- `filter_df` utility for filtering dataframe content
- `arrays_to_dataframes` decorator to create lookups from array-based callables
- `DiscreteConstraint.get_valid` to conveniently access valid candidates
- Functionality for persisting benchmarking results on S3 from a manual pipeline run
- `remain_switched` option to `TwoPhaseMetaRecommender`
- `is_stateful` class variable to `MetaRecommender`
- `get_non_meta_recommender` method to `MetaRecommender`
Changed
- `SubstanceParameter` encodings are now computed exclusively with the
`scikit-fingerprints` package, granting access to all fingerprints available therein
- Example for slot-based mixtures has been revised and grouped together with the new
traditional mixture example
- Memory caching is now non-verbose
- `CustomDiscreteParameter` does not allow duplicated rows in `data` anymore
- De-/activating Polars via `BAYBE_DEACTIVATE_POLARS` now requires passing values
compatible with `strtobool`
- All arguments to `MetaRecommender.select_recommender` are now optional
- `MetaRecommender`s can now be composed of other `MetaRecommender`s
- For performance reasons, search space manipulation using `polars` is no longer
guaranteed to produce the same row order as the corresponding `pandas` operations
- `allow_repeated_recommendations` has been renamed to
`allow_recommending_already_recommended` and is now `True` by default
Fixed
- Rare bug arising from degenerate `SubstanceParameter.comp_df` rows that caused
wrong number of recommendations being returned
- `ContinuousConstraint`s can now be used in single point precision
- Search spaces are now stateless, preventing unintended side effects that could lead to
incorrect candidate sets when reused in different optimization contexts
- `qNIPV` not working with single `MIN` targets
- Passing a `TargetTransformation` without passing `bounds` when creating a
`NumericalTarget` now raises an error
- Crash when using `ContinuousCardinalityConstraint` caused by an unintended interplay
between constraints and dropped parameters yielding empty parameter sets
- Minimizing a single `NumericalTarget` with specified bounds/transformation via
`SingleTargetObjective` no longer erroneously maximizes it
- `allow_*` flags are now context-aware, i.e. setting them in a context where they are
irrelevant now raises an error instead of passing silently
Removed
- `botorch_function_wrapper` utility for creating lookup callables
Deprecations
- Passing a dataframe via the `data` argument to `Objective.transform` is no longer
possible. The dataframe must now be passed as positional argument.
- The new `allow_extra` flag is automatically set to `True` in `Objective.transform`
when left unspecified
- `get_transform_parameters` has been replaced with `get_transform_objects`
- Passing a dataframe via the `data` argument to `Target.transform` is no longer
possible. The data must now be passed as a series as first positional argument.
- `SubstanceEncoding` value `MORGAN_FP`. As a replacement, `ECFP` with 1024 bits and
radius of 4 can be used.
- `SubstanceEncoding` value `RDKIT`. As a replacement, `RDKIT2DDESCRIPTORS` can be used.
- The `metadata` attribute of `SubspaceDiscrete` no longer exists. Metadata is now
exclusively handled by the `Campaign` class.
- `get_current_recommender` and `get_next_recommender` of `MetaRecommender` have become
obsolete and calling them is no longer possible
- Passing `allow_*` flags to recommenders is no longer supported since the necessary
metadata required for the flags is no longer available at that level. The
functionality has been taken over by `Campaign`.