def call_on_recarr(func, params, recarr, param2arg=None): """ Call `func` with `params` over `recarr`. The `param2arg` function, when specified, is used to get an argument given a parameter name; otherwise, the parameter itself is used as an argument. When the argument is a `Column` object, the proper column from `recarr` is used as its value. """ args = [] for param in params: if param2arg: arg = param2arg(param) else: arg = param if hasattr(arg, 'pathname'): # looks like a column arg = getNestedField(recarr, arg.pathname) # This is needed because the extension doesn't check for # unaligned arrays anymore. The reason for doing this is that, # for unaligned arrays, a pure copy() in Python is faster than # the equivalent in C. I'm not completely sure why. if not arg.flags.aligned and arg.ndim > 1: # See the comments in `tables.numexpr.evaluate()` for the # reasons of copying unaligned, *multidimensional* arrays. arg = arg.copy() args.append(arg) return func(*args)
def call_on_recarr(func, params, recarr, param2arg=None): """ Call `func` with `params` over `recarr`. The `param2arg` function, when specified, is used to get an argument given a parameter name; otherwise, the parameter itself is used as an argument. When the argument is a `Column` object, the proper column from `recarr` is used as its value. """ args = [] for param in params: if param2arg: arg = param2arg(param) else: arg = param if hasattr(arg, 'pathname'): # looks like a column arg = getNestedField(recarr, arg.pathname) args.append(arg) return func(*args)