Skip to content

Releases: emdgroup/baybe

0.11.0

09 Sep 16:58
98a9383
Compare
Choose a tag to compare

What's Changed

Breaking Changes

  • The public methods of Surrogate models now operate on dataframes in experimental
    representation instead of tensors in computational representation
  • Surrogate.posterior models now returns a Posterior object
  • param_bounds_comp of SearchSpace, SubspaceDiscrete and SubspaceContinuous has
    been replaced with comp_rep_bounds, which returns a dataframe

Added

  • py.typed file to enable the use of type checkers on the user side
  • IndependentGaussianSurrogate base class for surrogate models providing independent
    Gaussian posteriors for all candidates (cannot be used for batch prediction)
  • comp_rep_columns property for Parameter, SearchSpace, SubspaceDiscrete
    and SubspaceContinuous classes
  • New mechanisms for surrogate input/output scaling configurable per class
  • SurrogateProtocol as an interface for user-defined surrogate architectures
  • Support for binary targets via BinaryTarget class
  • Support for bandit optimization via BetaBernoulliMultiArmedBanditSurrogate class
  • Bandit optimization example
  • qThompsonSampling acquisition function
  • BetaPrior class
  • recommend now accepts the pending_experiments argument, informing the algorithm
    about points that were already selected for evaluation
  • Pure recommenders now have the allow_recommending_pending_experiments flag,
    controlling whether pending experiments are excluded from candidates in purely
    discrete search spaces
  • get_surrogate and posterior methods to Campaign
  • tenacity test dependency
  • Multi-version documentation

Changed

  • The transition from experimental to computational representation no longer happens
    in the recommender but in the surrogate
  • Fallback models created by catch_constant_targets are stored outside the surrogate
  • to_tensor now also handles numpy arrays
  • MIN mode of NumericalTarget is now implemented via the acquisition function
    instead of negating the computational representation
  • Search spaces now store their parameters in alphabetical order by name
  • Improvement-based acquisition functions now consider the maximum posterior mean
    instead of the maximum noisy measurement as reference value
  • Iteration tests now attempt up to 5 repeated executions if they fail due to numerical
    reasons

Fixed

  • CategoricalParameter and TaskParameter no longer incorrectly coerce a single
    string input to categories/tasks
  • farthest_point_sampling no longer depends on the provided point order
  • Batch predictions for RandomForestSurrogate
  • Surrogates providing only marginal posterior information can no longer be used for
    batch recommendation
  • SearchSpace.from_dataframe now creates a proper empty discrete subspace without
    index when called with continuous parameters only
  • Metadata updates are now only triggered when a discrete subspace is present
  • Unintended reordering of discrete search space parts for recommendations obtained
    with BotorchRecommender

Removed

  • register_custom_architecture decorator
  • Scalar and DefaultScaler classes

Deprecations

  • The role of register_custom_architecture has been taken over by
    baybe.surrogates.base.SurrogateProtocol
  • BayesianRecommender.surrogate_model has been replaced with get_surrogate

Merged Pull Requests

New Contributors

Full Changelog: 0.10.0...0.11.0

0.10.0

02 Aug 18:56
4282f1c
Compare
Choose a tag to compare

What's Changed

Breaking Changes

  • Providing an explicit batch_size is now mandatory when asking for recommendations
  • RecommenderProtocol.recommend now accepts an optional Objective
  • RecommenderProtocol.recommend now expects training data to be provided as a single
    dataframe in experimental representation instead of two separate dataframes in
    computational representation
  • Parameter.is_numeric has been replaced with Parameter.is_numerical
  • DiscreteParameter.transform_rep_exp2comp has been replaced with
    DiscreteParameter.transform
  • filter_attributes has been replaced with match_attributes

Added

  • Surrogate base class now exposes a to_botorch method
  • SubspaceDiscrete.to_searchspace and SubspaceContinuous.to_searchspace
    convenience constructor
  • Validators for Campaign attributes
  • _optional subpackage for managing optional dependencies
  • New acquisition functions for active learning: qNIPV (negative integrated posterior
    variance) and PSTD (posterior standard deviation)
  • Acquisition function: qKG (knowledge gradient)
  • Abstract ContinuousNonlinearConstraint class
  • Abstract CardinalityConstraint class and
    DiscreteCardinalityConstraint/ContinuousCardinalityConstraint subclasses
  • Uniform sampling mechanism for continuous spaces with cardinality constraints
  • register_hooks utility enabling user-defined augmentation of arbitrary callables
  • transform methods of SearchSpace, SubspaceDiscrete and SubspaceContinuous
    now take additional allow_missing and allow_extra keyword arguments
  • More details to the transfer learning user guide
  • Activated doctests
  • SubspaceDiscrete.from_parameter, SubspaceContinuous.from_parameter,
    SubspaceContinuous.from_product and SearchSpace.from_parameter
    convenience constructors
  • DiscreteParameter.to_subspace, ContinuousParameter.to_subspace and
    Parameter.to_searchspace convenience constructors
  • Utilities for permutation and dependency data augmentation
  • Validation and translation tests for kernels
  • BasicKernel and CompositeKernel base classes
  • Activated pre-commit.ci with auto-update
  • User guide for active learning
  • Polars expressions for DiscreteSumConstraint, DiscreteProductConstraint,
    DiscreteExcludeConstraint, DiscreteLinkedParametersConstraint and
    DiscreteNoLabelDuplicatesConstraint
  • Discrete search space Cartesian product can be created lazily via Polars
  • Examples demonstrating the register_hooks utility: basic registration mechanism,
    monitoring the probability of improvement, and automatic campaign stopping

Changed

  • Passing an Objective to Campaign is now optional
  • GaussianProcessSurrogate models are no longer wrapped when cast to BoTorch
  • Restrict upper versions of main dependencies, motivated by major numpy release
  • Sampling methods in qNIPV and BotorchRecommender are now specified via
    DiscreteSamplingMethod enum
  • Interval class now supports degenerate intervals containing only one element
  • add_fake_results now directly processes Target objects instead of a Campaign
  • path argument in plotting utility is now optional and defaults to Path(".")
  • UnusedObjectWarning by non-predictive recommenders is now ignored during simulations
  • The default kernel factory now avoids strong jumps by linearly interpolating between
    two fixed low and high dimensional prior regimes
  • The previous default kernel factory has been renamed to EDBOKernelFactory and now
    fully reflects the original logic
  • The default acquisition function has been changed from qEI to qLogEI for improved
    numerical stability

Removed

Fixed

  • sequential flag of SequentialGreedyRecommender is now set to True
  • Serialization bug related to class layout of SKLearnClusteringRecommender
  • MetaRecommenders no longer trigger warnings about non-empty objectives or
    measurements when calling a NonPredictiveRecommender
  • Bug introduced in 0.9.0 (PR #221, commit 3078f3), where arguments to to_gpytorch
    are not passed on to the GPyTorch kernels
  • Positive-valued kernel attributes are now correctly handled by validators
    and hypothesis strategies
  • As a temporary workaround to compensate for missing IndexKernel priors,
    fit_gpytorch_mll_torch is used instead of fit_gpytorch_mll when a TaskParameter
    is present, which acts as regularization via early stopping during model fitting

Deprecations

  • SequentialGreedyRecommender class replaced with BotorchRecommender
  • SubspaceContinuous.samples_random has been replaced with
    SubspaceContinuous.sample_uniform
  • SubspaceContinuous.samples_full_factorial has been replaced with
    SubspaceContinuous.sample_from_full_factorial
  • Passing a dataframe via the data argument to the transform methods of
    SearchSpace, SubspaceDiscrete and SubspaceContinuous is no longer possible.
    The dataframe must now be passed as positional argument.
  • The new allow_extra flag is automatically set to True in transform methods
    of search space classes when left unspecified

Expired Deprecations (from 0.7.*)

  • Interval.is_finite property
  • Specifying target configs without type information
  • Specifying parameters/constraints at the top level of a campaign configs
  • Passing numerical_measurements_must_be_within_tolerance to Campaign
  • batch_quantity argument
  • Passing allow_repeated_recommendations or allow_recommending_already_measured
    to MetaRecommender (or former Strategy)
  • *Strategy classes and baybe.strategies subpackage
  • Specifying MetaRecommender (or former Strategy) configs without type information

Merged Pull Requests

Read more

0.9.1

04 Jun 13:31
7b94314
Compare
Choose a tag to compare

What's Changed

Changed

  • Discrete searchspace memory estimate is now natively represented in bytes

Fixed

  • Non-GP surrogates not working with deepcopy and the simulation package due to
    slotted base class
  • Datatype inconsistencies for various parameters' values and comp_df and
    SubSelectionCondition's selection related to floating point precision

Merged Pull Requests

Full Changelog: 0.9.0...0.9.1

0.9.0

21 May 18:54
3a67df4
Compare
Choose a tag to compare

What's Changed

Added

  • Class hierarchy for objectives
  • AdditiveKernel, LinearKernel, MaternKernel, PeriodicKernel,
    PiecewisePolynomialKernel, PolynomialKernel, ProductKernel, RBFKernel,
    RFFKernel, RQKernel, ScaleKernel classes
  • KernelFactory protocol enabling context-dependent construction of kernels
  • Preset mechanism for GaussianProcessSurrogate
  • hypothesis strategies and roundtrip test for kernels, constraints, objectives,
    priors and acquisition functions
  • New acquisition functions: qSR, qNEI, LogEI, qLogEI, qLogNEI
  • GammaPrior, HalfCauchyPrior, NormalPrior, HalfNormalPrior, LogNormalPrior
    and SmoothedBoxPrior classes
  • Possibility to deserialize classes from optional class name abbreviations
  • Basic deserialization tests using different class type specifiers
  • Serialization user guide
  • Environment variables user guide
  • Utility for estimating memory requirements of discrete product search space
  • mypy for search space and objectives

Changed

  • Reorganized acquisition.py into acquisition subpackage
  • Reorganized simulation.py into simulation subpackage
  • Reorganized gaussian_process.py into gaussian_process subpackage
  • Acquisition functions are now their own objects
  • acquisition_function_cls constructor parameter renamed to acquisition_function
  • User guide now explains the new objective classes
  • Telemetry deactivation warning is only shown to developers
  • torch, gpytorch and botorch are lazy-loaded for improved startup time
  • If an exception is encountered during simulation, incomplete results are returned
    with a warning instead of passing through the uncaught exception
  • Environment variables BAYBE_NUMPY_USE_SINGLE_PRECISION and
    BAYBE_TORCH_USE_SINGLE_PRECISION to enforce single point precision usage

Removed

  • model_params attribute from Surrogate base class, GaussianProcessSurrogate and
    CustomONNXSurrogate
  • Dependency on requests package

Fixed

  • n_task_params now evaluates to 1 if task_idx == 0
  • Simulation no longer fails in ignore mode when lookup dataframe contains duplicate
    parameter configurations
  • Simulation no longer fails for targets in MATCH mode
  • closest_element now works for array-like input of all kinds
  • Structuring concrete subclasses no longer requires providing an explicit type field
  • _target(s) attributes of Objectives are now de-/serialized without leading
    underscore to support user-friendly serialization strings
  • Telemetry does not execute any code if it was disabled
  • Running simulations no longer alters the states of the global random number generators

Deprecations

  • The former baybe.objective.Objective class has been replaced with
    SingleTargetObjective and DesirabilityObjective
  • acquisition_function_cls constructor parameter for BayesianRecommender
  • VarUCB and qVarUCB acquisition functions

Expired Deprecations (from 0.6.*)

  • BayBE class
  • baybe.surrogate module
  • baybe.targets.Objective class
  • baybe.strategies.Strategy class

Merged Pull Requests

New Contributors

Full Changelog: 0.8.2...0.9.0

0.8.2

27 Mar 11:27
6e78cc6
Compare
Choose a tag to compare

What's Changed

Added

  • Simulation user guide
  • Example for transfer learning backtesting utility
  • pyupgrade pre-commit hook
  • Better human readable __str__ representation of objective and targets
  • Alternative dataframe deserialization from pd.DataFrame constructors

Changed

  • More detailed and sophisticated search space user guide
  • Support for Python 3.12
  • Upgraded syntax to Python 3.9
  • Bumped onnx version to fix vulnerability
  • Increased threshold for low-dimensional GP priors
  • Replaced fit_gpytorch_mll_torch with fit_gpytorch_mll

Fixed

  • telemetry dependency is no longer a group (enables Poetry installation)

Merged Pull Requests

Full Changelog: 0.8.1...0.8.2

0.8.1

11 Mar 12:38
792b166
Compare
Choose a tag to compare

What's Changed

Added

  • Better human readable __str__ representation of campaign
  • README now contains an example on substance encoding results
  • Transfer learning user guide
  • from_simplex constructor now also takes and applies optional constraints

Changed

  • Full lookup backtesting example now tests different substance encodings
  • Replaced unmaintained mordred dependency by mordredcommunity
  • SearchSpaces now use ndarray instead of Tensor

Fixed

  • from_simplex now efficiently validated in Campaign.validate_config

Merged Pull Requests

Full Changelog: 0.8.0...0.8.1

0.8.0

29 Feb 15:48
e71783b
Compare
Choose a tag to compare

What's Changed

Changed

  • BoTorch dependency bumped to >=0.9.3

Removed

  • Workaround for BoTorch hybrid recommender data type
  • Support for Python 3.8

Merged Pull Requests

Full Changelog: 0.7.4...0.8.0

0.7.4

28 Feb 12:19
12d4d67
Compare
Choose a tag to compare

What's Changed

Added

  • Subpackages for the available recommender types
  • Multi-style plotting capabilities for generated example plots
  • JSON file for plotting themes
  • Smoke testing in relevant tox environments
  • ContinuousParameter base class
  • New environment variable BAYBE_CACHE_DIR that can customize the disk cache directory
    or turn off disk caching entirely
  • Options to control the number of nonzero parameters in SubspaceDiscrete.from_simplex
  • Temporarily ignore ONNX vulnerabilities
  • Better human readable __str__ representation of search spaces
  • pretty_print_df function for printing shortened versions of dataframes
  • Basic Transfer Learning example
  • Repo now has reminders (https://github.com/marketplace/actions/issue-reminder) enabled
  • mypy for recommenders

Changed

  • Recommenders now share their core logic via their base class
  • Remove progress bars in examples
  • Strategies are now called MetaRecommender's and part of the recommenders.meta
    module
  • Recommender's are now called PureRecommender's and part of the recommenders.pure
    module
  • strategy keyword of Campaign renamed to recommender
  • NaiveHybridRecommender renamed to NaiveHybridSpaceRecommender

Fixed

  • Unhandled exception in telemetry when username could not be inferred on Windows
  • Metadata is now correctly updated for hybrid spaces
  • Unintended deactivation of telemetry due to import problem
  • Line wrapping in examples

Deprecations

  • TwoPhaseStrategy
  • SequentialStrategy
  • StreamingSequentialStrategy

Merged Pull Requests

New Contributors

Full Changelog: 0.7.3...0.7.4

0.7.3

09 Feb 13:59
ad7b913
Compare
Choose a tag to compare

What's Changed

Added

  • Copy button for code blocks in documentation
  • mypy for campaign, constraints and telemetry
  • Top-level example summaries
  • RecommenderProtocol as common interface for Strategy and Recommender
  • SubspaceDiscrete.from_simplex convenience constructor

Changed

  • Order of README sections
  • Imports from top level baybe.utils no longer possible
  • Renamed utils.numeric to utils.numerical
  • Optional chem dependencies are lazily imported, improving startup time

Fixed

  • Several minor issues in documentation
  • Visibility and constructor exposure of Campaign attributes that should be private
  • TaskParameters no longer disappear from computational representation when the
    search space contains only one task parameter value
  • Failing baybe import from environments containing only core dependencies caused by
    eagerly loading chem dependencies
  • tox coretest now uses correct environment and skips unavailable tests
  • Basic serialization example no longer requires optional chem dependencies

Removed

  • Detailed headings in table of contents of examples

Deprecations

  • Passing numerical_measurements_must_be_within_tolerance to the Campaign
    constructor is no longer supported. Instead, Campaign.add_measurements now
    takes an additional parameter to control the behavior.
  • batch_quantity replaced with batch_size
  • allow_repeated_recommendations and allow_recommending_already_measured are now
    attributes of Recommender and no longer attributes of Strategy

Merged Pull Requests

New Contributors

Full Changelog: 0.7.2...0.7.3

0.7.2

24 Jan 14:56
8552b18
Compare
Choose a tag to compare

What's Changed

Added

  • Target enums
  • mypy for targets and intervals
  • Tests for code blocks in README and user guides
  • hypothesis strategies and roundtrip tests for targets, intervals, and dataframes
  • De-/serialization of target subclasses via base class
  • Docs building check now part of CI
  • Automatic formatting checks for code examples in documentation
  • Deserialization of classes with classmethod constructors can now be customized
    by providing an optional constructor field
  • SearchSpace.from_dataframe convenience constructor

Changed

  • Renamed bounds_transform_func target attribute to transformation
  • Interval.is_bounded now implements the mathematical definition of boundedness
  • Moved and renamed target transform utility functions
  • Examples have two levels of headings in the table of content
  • Fix orders of examples in table of content
  • DiscreteCustomConstraint validator now expects dataframe instead of series
  • ignore_example flag builds but does not execute examples when building documentation
  • New user guide versions for campaigns, targets and objectives
  • Binarization of dataframes now happens via pickling

Fixed

  • Wrong use of tolerance argument in constraints user guide
  • Errors with generics and type aliases in documentation
  • Deduplication bug in substance_data hypothesis
  • Use pydoclint as flake8 plugin and not as a stand-alone linter
  • Margins in documentation for desktop and mobile version
  • Intervals can now also be deserialized from a bounds iterable
  • SubspaceDiscrete and SubspaceContinuous now have de-/serialization methods

Removed

  • Conda install instructions and version badge
  • Early fail for different Python versions in regular pipeline

Deprecations

  • Interval.is_finite replaced with Interval.is_bounded
  • Specifying target configs without explicit type information is deprecated
  • Specifying parameters/constraints at the top level of a campaign configuration JSON is
    deprecated. Instead, an explicit searchspace field must be provided with an optional
    constructor entry.

Merged Pull Requests

New Contributors

Full Changelog: 0.7.1...0.7.2