def chart()

in benchmark/muse_chart.py [0:0]


def chart(df, device, batch_size, plot_on):
    fdf = df[
        (df["Device"] == device)
        & (df["Use Xformers"] == True)
        & ((df["Use Fused Residual Norm"] == True) | (df["Use Fused Residual Norm"].isna()))
        & (df["Batch Size"] == batch_size)
    ]

    chart_values = {
        # "stable diffusion 1.5; timesteps 12": fdf[
        #     (fdf["Model Name"] == "stable_diffusion_1_5") & (fdf["Timesteps"] == "12")
        # ].iloc[0]["Median"],
        "stable diffusion 1.5; resolution 512; timesteps 20": fdf[
            (fdf["Model Name"] == "stable_diffusion_1_5") & (fdf["Timesteps"] == "20")
        ].iloc[0]["Median"],
        "sdxl; resolution 1024; timesteps 12": fdf[(fdf["Model Name"] == "sdxl") & (fdf["Timesteps"] == "12")].iloc[0]["Median"],
        "sdxl; resolution 1024; timesteps 20": fdf[(fdf["Model Name"] == "sdxl") & (fdf["Timesteps"] == "20")].iloc[0]["Median"],
        "ssd 1b; resolution 1024; timesteps 12": fdf[(fdf["Model Name"] == "ssd_1b") & (fdf["Timesteps"] == "12")].iloc[0]["Median"],
        "ssd 1b; resolution 1024; timesteps 20": fdf[(fdf["Model Name"] == "ssd_1b") & (fdf["Timesteps"] == "20")].iloc[0]["Median"],
        "wurst; resolution 1024": fdf[(fdf["Model Name"] == "wurst")].iloc[0]["Median"],
        "lcm; resolution 512; timesteps 4": fdf[(fdf["Model Name"] == "lcm") & (fdf["Timesteps"] == "4")].iloc[0]["Median"],
        "lcm; resolution 512; timesteps 8": fdf[(fdf["Model Name"] == "lcm") & (fdf["Timesteps"] == "8")].iloc[0]["Median"],
        "muse; resolution 256; timesteps 12": fdf[
            (fdf["Model Name"] == "muse") & (fdf["Resolution"] == 256) & (fdf["Timesteps"] == "12")
        ].iloc[0]["Median"],
        # "muse; resolution 256; timesteps 20": fdf[
        #     (fdf["Model Name"] == "muse") & (fdf["Resolution"] == 256) & (fdf["Timesteps"] == "20")
        # ].iloc[0]["Median"],
        "muse; resolution 512; timesteps 12": fdf[
            (fdf["Model Name"] == "muse") & (fdf["Resolution"] == 512) & (fdf["Timesteps"] == "12")
        ].iloc[0]["Median"],
        # "muse; resolution 512; timesteps 20": fdf[
        #     (fdf["Model Name"] == "muse") & (fdf["Resolution"] == 512) & (fdf["Timesteps"] == "20")
        # ].iloc[0]["Median"],
        "sd-turbo; resolution 512; timesteps 1": fdf[
            (fdf["Model Name"] == "sd_turbo")
        ].iloc[0]['Median'],
        "sdxl-turbo; resolution 1024; timesteps 1": fdf[
            (fdf["Model Name"] == "sdxl_turbo")
        ].iloc[0]['Median'],
    }

    # Gives consistent colors from chart to chart
    colors = [
        # "b",  # Blue
        "g",  # Green
        "r",  # Red
        "c",  # Cyan
        "m",  # Magenta
        "y",  # Yellow
        "k",  # Black
        "purple",
        "#FF5733",  # Hex code for a shade of orange
        (0.2, 0.4, 0.6),  # RGB tuple for a shade of blue
        "lime",  # Named color
        "navy",  # Named color
        "hotpink",  # Named color
    ]

    colors = {x: y for x, y in zip(chart_values.keys(), colors)}

    chart_values = [x for x in chart_values.items()]
    chart_values = sorted(chart_values, key=lambda x: x[1])

    placement = 0

    for label, value in chart_values:
        color = colors[label]

        # gross but we barely run this code
        label = f"{label}; {value} s"
        label = "\n".join(label.split(";"))

        bars = plot_on.bar(placement, value, width=bar_width, label=label, color=color)
        bar = bars[0]
        yval = bar.get_height()
        plot_on.text(
            bar.get_x() + bar.get_width() / 2,
            yval + 0.05,
            label,  # f"{label}; {value}", # yval,
            ha="center",
            va="bottom",
            fontsize="small",
        )
        placement = placement + bar_width + 0.05