def summarize(
self,
summary_func_map: Dict[str, Callable],
groupby_cols: List[str] = ['participant_id', 'session_id', 'session_uuid'],
**kwargs,
):
"""
Summarize scored data using task-specific summary functions, with metadata.
Parameters:
summary_func_map (Dict[str, Callable]): Map of activity/task -> summary function.
**kwargs: Additional arguments passed to the summarization functions.
"""
if self.grouped_scored is None:
raise ValueError("Scoring must be completed before summarizing.")
self.summary_func_map = summary_func_map
# TODO: add a default func map
# summary_func_map = {
# "Symbol Search": m2c2.tasks.symbol_search.summarize,
# "Grid Memory": m2c2.tasks.grid_memory.summarize,
# }
try:
# Determine columns based on data source (diff keys, diff platforms)
# Apply group-specific summarization
self.grouped_summary = summarize_by_group_key(
self.grouped_scored,
summary_func_map,
groupby_cols=groupby_cols,
**kwargs,
)
# Optionally flatten into one wide dataframe
self.flat_summary = pd.concat(
self.grouped_summary.values(), ignore_index=True
)
log_info(
"[S] Summarization by activity completed.",
{"session_timestamp": self.timestamp},
)
except Exception as e:
log_exception(
"Summarization by activity failed",
e,
{
"session_timestamp": self.timestamp,
"activities": list(self.grouped_scored.keys()),
},
)
raise
return self