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