in core/maxframe/dataframe/reduction/aggregation.py [0:0]
def is_funcs_aggregate(func, func_kw=None, ndim=2):
func_kw = func_kw or dict()
if ndim == 1 and func is None:
func, func_kw = func_kw, dict()
to_check = []
if func is not None:
if isinstance(func, (list, tuple)):
to_check.extend(func)
elif isinstance(func, dict):
if ndim == 2:
for f in func.values():
if isinstance(f, Iterable) and not isinstance(f, str):
to_check.extend(f)
else:
to_check.append(f)
else:
if any(isinstance(v, tuple) for v in func.values()):
raise TypeError("nested renamer is not supported")
to_check.extend(func.values())
else:
to_check.append(func)
else:
for v in func_kw.values():
if (
not isinstance(v, tuple)
or len(v) != 2
or (not isinstance(v[1], str) and not callable(v[1]))
):
raise TypeError("Must provide 'func' or tuples of (column, aggfunc).")
else:
to_check.append(v[1])
compiler = ReductionCompiler()
for f in to_check:
if f in _agg_functions:
continue
elif callable(f):
try:
if ndim == 2:
compiler.add_function(f, 2, cols=["A", "B"])
else:
compiler.add_function(f, 1)
except ValueError:
return False
else:
return False
return True