def build_table()

in src/backend/entrypoints/jupyter/flow_constructor.py [0:0]


def build_table(experiment: Experiment, symbols=None, columns=None, condition=None):
    import pandas as pd

    dataframes = []

    if symbols is None:
        symbols = experiment.tradable_symbols

    for symbol in symbols:
        columns_ = columns if columns is not None else experiment.data_by_symbol[symbol].keys()
        for column in columns_:
            if column in experiment.data_by_symbol[symbol].keys():
                df = pd.DataFrame({f"{symbol}_{column}": experiment.data_by_symbol[symbol][column]})
                df.columns.names = ["symbol"]
                dataframes.append(df)

        columns_ = columns if columns is not None else experiment.lclsglbls.keys()
        for column in columns_:
            #            print(column, symbol)
            if (
                column in experiment.lclsglbls.keys()
                and isinstance(experiment.lclsglbls[column], dict)
                and symbol in experiment.lclsglbls[column].keys()
                and isinstance(experiment.lclsglbls[column][symbol], pd.Series)
            ):
                df = pd.DataFrame({f"{symbol}_{column}": experiment.lclsglbls[column][symbol]})
                df.columns.names = ["symbol"]
                dataframes.append(df)

        columns_ = columns if columns is not None else experiment.trading_stats_by_symbol[symbol].keys()
        for column in columns_:
            if (
                symbol in experiment.trading_stats_by_symbol.keys()
                and column in experiment.trading_stats_by_symbol[symbol].keys()
            ):
                df = pd.DataFrame({f"{symbol}_{column}": experiment.trading_stats_by_symbol[symbol][column]})
                df.columns.names = ["symbol"]
                dataframes.append(df)

    columns_ = columns if columns is not None else experiment.strategy_stats.keys()
    for column in columns_:
        if column in experiment.strategy_stats.keys():
            df = pd.DataFrame({f"{column}": experiment.strategy_stats[column]})
            df.columns.names = ["symbol"]
            dataframes.append(df)

    merged = pd.concat(dataframes, axis=1)

    # Apply condition if one is provided
    if condition is not None:
        merged = merged[condition(merged)]

    return merged