Open philippjfr opened 5 months ago
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
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. TheComparator
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.