def _unpack_data_series_dict(data, **kwargs):
    time_column: str = kwargs.pop('time_column', 'TimeGenerated')
    source_columns: list = kwargs.pop('source_columns', None)
    if (not source_columns):
        source_columns = ['NewProcessName', 'EventID', 'CommandLine']
    def_source_columns = (set(source_columns) if source_columns else set())
    tool_tip_columns: Set[str] = set()
    min_time = pd.Timestamp(pd.Timestamp.max)
    max_time = pd.Timestamp(pd.Timestamp.min)
    y_index = 0
    series_count = len(data)
    (colors, palette_size) = _get_color_palette(series_count)
    for series_def in data.values():
        data_columns: Set[str] = set()
        series_data = series_def['data']
        src_cols = series_def.get('source_columns', def_source_columns)
        data_columns.update((src_cols if src_cols else def_source_columns))
        tool_tip_columns.update(data_columns)
        time_col = series_def.get('time_column', None)
        if (not time_col):
            time_col = time_column
            series_def['time_column'] = time_col
        min_time = min(min_time, series_data[time_col].min())
        max_time = max(max_time, series_data[time_col].max())
        data_columns.update([time_col])
        graph_df = series_data[list(data_columns)].copy()
        graph_df['y_index'] = y_index
        series_def['y_index'] = y_index
        ser_color = series_def.get('color', None)
        if (not ser_color):
            ser_color = colors[(y_index % palette_size)]
            series_def['color'] = ser_color
        _wrap_df_columns(graph_df, 50)
        series_def['source'] = ColumnDataSource(graph_df)
        y_index += 1
    return (tool_tip_columns, min_time, max_time)
def _unpack_data_series_dict(data, **kwargs):
    time_column: str = kwargs.pop('time_column', 'TimeGenerated')
    source_columns: list = kwargs.pop('source_columns', None)
    if (not source_columns):
        source_columns = ['NewProcessName', 'EventID', 'CommandLine']
    def_source_columns = (set(source_columns) if source_columns else set())
    tool_tip_columns: Set[str] = set()
    min_time = pd.Timestamp(pd.Timestamp.max)
    max_time = pd.Timestamp(pd.Timestamp.min)
    y_index = 0
    series_count = len(data)
    (colors, palette_size) = _get_color_palette(series_count)
    for series_def in data.values():
        data_columns: Set[str] = set()
        series_data = series_def['data']
        src_cols = series_def.get('source_columns', def_source_columns)
        data_columns.update((src_cols if src_cols else def_source_columns))
        tool_tip_columns.update(data_columns)
        time_col = series_def.get('time_column', None)
        if (not time_col):
            time_col = time_column
            series_def['time_column'] = time_col
        min_time = min(min_time, series_data[time_col].min())
        max_time = max(max_time, series_data[time_col].max())
        data_columns.update([time_col])
        graph_df = series_data[list(data_columns)].copy()
        graph_df['y_index'] = y_index
        series_def['y_index'] = y_index
        ser_color = series_def.get('color', None)
        if (not ser_color):
            ser_color = colors[(y_index % palette_size)]
            series_def['color'] = ser_color
        _wrap_df_columns(graph_df, 50)
        series_def['source'] = ColumnDataSource(graph_df)
        y_index += 1
    return (tool_tip_columns, min_time, max_time)