# Copyright 2022 The IREE Authors # # Licensed under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception import pandas as pd _LEGEND_0 = ">10.0x better" _LEGEND_1 = ">2.0x, <=10.0x better" _LEGEND_2 = ">=1.0x, <=2.0x better" _LEGEND_3 = ">1.0x, <1.15x worse" _LEGEND_4 = ">=1.15x, <2.0x worse" _LEGEND_5 = ">=2.0x, <10.x worse" _LEGEND_6 = ">=10.0x worse" def get_table_css(): styles = [ dict(selector="tr:hover", props=[("background", "#f4f4f4")]), dict(selector="tbody tr", props=[("background-color", "#ffffff")]), dict(selector="tbody td", props=[("border", "1px solid #dddfe1")]), dict( selector="th", props=[ ("background-color", "#54585d"), ("color", "#ffffff"), ("font-weight", "bold"), ("border", "1px solid #54585d"), ("padding", "10px"), ], ), dict(selector="td", props=[("padding", "10px")]), dict( selector="", props=[ ("border-collapse", "collapse"), ("font-family", "Tahoma, Geneva, sans-serif"), ], ), dict( selector="caption", props=[ ("text-align", "center"), ("padding", "10px"), ("font-weight", "bold"), ("font-size", "1.2em"), ("color", "#636363"), ], ), ] return styles def style_legend(v): if _LEGEND_0 in v: props = "background-color: #0277BD;" elif _LEGEND_1 in v: props = "background-color: #2E7D32;" elif _LEGEND_2 in v: props = "background-color: #66BB6A;" elif _LEGEND_3 in v: props = "background-color: #FBC02D;" elif _LEGEND_4 in v: props = "background-color: #E57373;" elif _LEGEND_5 in v: props = "background-color: #C62828;" else: props = "background-color: #880E4F" return props def generate_header_and_legend(version_html): html = "" html = html + version_html legend = pd.DataFrame(columns=[""]) legend.loc[len(legend)] = [_LEGEND_0] legend.loc[len(legend)] = [_LEGEND_1] legend.loc[len(legend)] = [_LEGEND_2] legend.loc[len(legend)] = [_LEGEND_3] legend.loc[len(legend)] = [_LEGEND_4] legend.loc[len(legend)] = [_LEGEND_5] legend.loc[len(legend)] = [_LEGEND_6] styled_legend = legend.style.set_table_styles(get_table_css()) styled_legend.set_caption("Legend") styled_legend = styled_legend.set_properties(**{"color": "#ffffff"}) styled_legend = styled_legend.set_properties(**{"width": "200px"}) styled_legend = styled_legend.applymap(style_legend) styled_legend = styled_legend.hide(axis="index") styled_legend = styled_legend.hide(axis="columns") html = html + styled_legend.to_html() + "
" return html def style_speedup(v): if v > 10.0: props = "background-color: #0277BD;" elif v > 2.0: props = "background-color: #2E7D32;" elif v >= 1.0: props = "background-color: #66BB6A;" else: props = "background-color: #FBC02D;" return props def style_slowdown(v): if v >= 10.0: props = "background-color: #880E4F" elif v >= 2.0: props = "background-color: #C62828;" elif v > 1.15: props = "background-color: #E57373;" else: props = "background-color: #FBC02D;" return props def style_performance(v): if "faster" in v: return style_speedup(float(v.split("x")[0])) else: return style_slowdown(float(v.split("x")[0])) def style_latency(v): if v == "nan": return "color: #636363" if "faster" in v: return style_speedup(float(v.split("x")[0])) else: return style_slowdown(float(v.split("x")[0])) def style_memory(v): if v == "nan": return "color: #636363" if "smaller" in v: return style_speedup(float(v.split("x")[0])) else: return style_slowdown(float(v.split("x")[0])) def format_latency_comparison(iree_latency, baseline_latency): if iree_latency == 0 or baseline_latency == 0: return "nan" speedup = baseline_latency / iree_latency slowdown = iree_latency / baseline_latency faster_label = "{:.2f}x faster" slower_label = "{:.2f}x slower" latency = ( faster_label.format(speedup) if speedup >= 1.0 else slower_label.format(slowdown) ) return latency def format_memory_comparison(iree_memory, baseline_memory): if iree_memory == 0 or baseline_memory == 0: return "nan" smaller = baseline_memory / iree_memory larger = iree_memory / baseline_memory smaller_label = "{:.2f}x smaller" larger_label = "{:0.2f}x larger" memory = ( smaller_label.format(smaller) if smaller >= 1.0 else larger_label.format(larger) ) return memory