Skip to content

Releases: mad-lab-fau/tpcp

v0.9.1

09 Sep 07:46
Compare
Choose a tag to compare

[0.9.1] - 2022-09-08

Fixed

  • Classes without init can now pass the tpcp checks

Added

  • You can nest parameter annotations into ClassVar and they will still be processed.
    This is helpful when using dataclasses and annotating nested parameter values.

v0.9.0

11 Aug 07:48
Compare
Choose a tag to compare

This release drops Python 3.7 support!

Added

  • Bunch new high-level documentation
  • Added submission version of JOSS paper

Changed

  • The aggregate methods of custom aggregators now gets the list of datapoints in additions to the scores.
    Both parameters are now passed as keyword only arguments.

v0.8.0

09 Aug 08:02
Compare
Choose a tag to compare

[0.8.0] - 2022-08-09

Added

  • An example on how to use the dataclass decorator with tpcp classes. (#41)
  • In case you need complex aggregations of scores across data points, you can now wrap the return values of score
    functions in custom Aggregators.
    The best plac eto learn about this feature is the new "Custom Scorer" example.
    (#42)
  • All cross_validation based methods now have a new parameter called mock_labels.
    This can be used to provide a "y" value to the split method of a sklearn-cv splitter.
    This is required e.g. for Stratified KFold splitters.
    (#43)

Changed

  • Most of the class proccesing and sanity checks now happens in the init (or rather a post init hook) instead of during
    class initialisation.
    This increases the chance for some edge cases, but allows to post-process classes, before tpcp checks are run.
    Most importantly, it allows the use of the dataclass decorator in combination with tpcp classes.
    For the "enduser", this change will have minimal impact.
    Only, if you relied on accessing special tpcp class parameters before the class (e.g. __field_annotations__) was
    initialised, you will get an error now.
    Other than that, you will only notice a very slight overhead on class initialisation, as we know need to run some
    basic checks when you call the init or get_params.
    (#41)
  • The API of the Scorer class was modified.
    In case you used custom Scorer before, they will likely not work anymore.
    Further, we removed the error_score parameter from the Scorer and all related methods, that forwarded this parameter
    (e.g. GridSearch).
    Error that occur in the score function will now always be raised!
    If you need special handling of error cases, handle them in your error function yourself (i.e. using try-except).
    This gives more granular control and makes the implementation of the expected score function returns much easier on
    the tpcp side.
    (#42)

v0.7.0

23 Jun 09:52
Compare
Choose a tag to compare

[0.7.0] - 2022-06-23

Added

  • The Dataset class now has a new parameter group, which will return the group/row information, if there is only a
    single group/row left in the dataset.
    This parameter returns either a string or a namedtuple to make it easy to access the group/row information.
  • The Dataset.groups parameter now returns a list of namedtuples when it previously returned a list of normal tuples.
  • New is_single_group and assert_is_single_group methods for the Dataset class are added.
    They are shortcuts for calling self.is_single(groupby_cols=self.groupby_cols) and
    self.assert_is_single(groupby_cols=self.groupby_cols).

Removed

  • We removed the OptimizableAlgorithm base class, as it is not really useful.
    We recommend implementing your own base class or mixin if you are implementing a set of algorithms that need a normal
    and an optimizable version.

v6.0.3

31 May 10:33
Compare
Choose a tag to compare
  • It is now possible to use namedtuples as parameters and they are correctly cloned
    (#39)

v0.6.2

21 Apr 14:42
Compare
Choose a tag to compare

v0.6.1 - Some bug fixes

05 Apr 12:32
Compare
Choose a tag to compare

Changed

  • Fixed bug with tensor hashing (#37)
  • Fixed an issue with memoization during hashing (#37)
  • Fixed an issue that the safe_optimize_wrapper could not correctly detect changes to mutable objects.
    This is now fixed by pre-calculating all the hashes. (#38)

v0.6.0 - Optuna optimizer and pytorch fixes

04 Apr 14:18
Compare
Choose a tag to compare

Added

  • A new class to wrap the optimization framework Optuna.
    CustomOptunaOptimize can be used to create custom wrapper classes for various Optuna optimizations, that play
    nicely with tpcp and can be nested within tpcp operations. (#27)
  • A new example for the CustomOptunaOptimize wrapper that explains how to create complex custom optimizers using
    Optuna and the new Scorer callbacks (see below) (#27)
  • Scorer now supports an optional callback function, which will be called after each datapoint is scored.
    (#29)
  • Pipelines, Optimize objects, and Scorer are now Generic. This improves typing (in particular with VsCode), but
    means a little bit more typing (pun intended), when creating new Pipelines and Optimizers
    (#29)
  • Added option for scoring function to return arbitrary additional information using the NoAgg wrapper
    (#31)
  • (experimental) Torch compatibility for hash based comparisons (e.g. in the safe_run wrapper). Before the wrapper
    would fail, with torch module subclasses, as their pickle based hashes where not consistent.
    We implemented a custom hash function that should solve this.
    For now, we will consider this feature experimental, as we are not sure if it breaks in certain use-cases.
    (#33)
  • tpcp.types now exposes a bunch of internal types that might be helpful to type custom Pipelines and Optimizers.
    (#34)

Changed

  • The return type for the individual values in the Scorer class is not List[float] instead of np.ndarray.
    This also effects the output of cross_validate, GridSearch.gs_results_ and GridSearchCV.cv_results_
    (#29)
  • cf now has "faked" return type, so that type checkers in the user code, do not complain anymore.
    (#29)
  • All TypeVar Variables are now called SomethingT instead of Something_ (#34)

v0.5.0 - Some features and many docs

15 Mar 17:17
Compare
Choose a tag to compare

[0.5.0] - 2022-03-15

Added

  • The make_optimize_safe decorator (and hence, the Optimize method) make use of the parameter annotations to check
    that only parameters marked as OptimizableParameter are changed by the self_optimize method.
    This check also supports nested parameters, in case the optimization involves optimizing nested objects.
    (#9)
  • All tpcp objects now have a basic representation that is automatically generated based on their parameters
    (#13)
  • Added algo optimization and evaluation guide and improved docs overall
    (#26)
  • Added examples for all fundamental concepts
    (#23)

v0.4.0 Core Rework (Again!)

13 Dec 09:49
Compare
Choose a tag to compare