holoviz/param

Define Comparator equality functions for more types

Opened this issue · 1 comments

The Comparator in Param is used to check if a Parameter value has changed and therefore needs to trigger all watchers to inform them of this change. The Comparator was designed to be extended to support different object types and should cover at least the basic types that Param supports. There is also a tradeoff though, if a comparison is more expensive than the computations that could be triggered by the parameter value change then it's not worth it. For that reason we initially did not implement comparisons for things like arrays, however we should consider implementing some kind of size based cut-off where the comparator just gives up.

Here's a list of objects that we should definitely implement comparisons for:

  • pathlib.Path

and here's some objects that we should at least consider:

  • np.ndarray
  • pd.Series
  • pd.DataFrame

There's probably many I've missed.

Hi, for my own purposes I added a "custom" equality function for pd.Dataframe like this:

import param.parameterized
param.parameterized.Comparator.equalities.update(
    {pd.DataFrame: lambda obj1, obj2: obj1.equals(obj2)}
    )

More info here:
https://discourse.holoviz.org/t/param-watch-and-onlychanged-true-unexpected-behaviour-on-param-dataframe/6871