diff --git a/holoviews/util/transform.py b/holoviews/util/transform.py index 2beeee4133..11a6a2a029 100644 --- a/holoviews/util/transform.py +++ b/holoviews/util/transform.py @@ -171,6 +171,19 @@ def register(cls, key, function): """ cls._custom_funcs[key] = function + @classmethod + def pipe(cls, func, *args, **kwargs): + """ + Wrapper to give multidimensional transforms a more intuitive syntax. + For a custom function 'func' with signature (*args, **kwargs), call as + dim.pipe(func, *args, **kwargs). + """ + args = list(args) # make mutable + for k, arg in enumerate(args): + if isinstance(arg, basestring): + args[k] = dim(arg) + return dim(args[0], func, *args[1:], **kwargs) + # Builtin functions def __abs__(self): return dim(self, abs) def __round__(self, ndigits=None):