Spaces:
Running
Running
File size: 3,801 Bytes
f9d3b3b 7dfb0b7 f9d3b3b 52c1bfb f9d3b3b 7dfb0b7 f9d3b3b 7dfb0b7 f9d3b3b d937c80 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
from pathlib import Path
import numpy as np
import pandas as pd
import streamlit as st
from mlip_arena.models import REGISTRY as MODELS
valid_models = [
model
for model, metadata in MODELS.items()
if Path(__file__).stem in metadata.get("gpu-tasks", [])
]
DATA_DIR = Path("mlip_arena/tasks/diatomics")
dfs = [
pd.read_json(DATA_DIR / MODELS[model].get("family") / "homonuclear-diatomics.json")
for model in valid_models
]
df = pd.concat(dfs, ignore_index=True)
table = pd.DataFrame()
for model in valid_models:
rows = df[df["method"] == model]
metadata = MODELS.get(model, {})
new_row = {
"Model": model,
"Conservation deviation [eV/Å]": rows["conservation-deviation"].mean(),
"Spearman's coeff. (Energy - repulsion)": rows[
"spearman-repulsion-energy"
].mean(),
"Spearman's coeff. (Force - descending)": rows[
"spearman-descending-force"
].mean(),
"Tortuosity": rows["tortuosity"].mean(),
"Energy jump [eV]": rows["energy-jump"].mean(),
"Force flips": rows["force-flip-times"].mean(),
"Spearman's coeff. (Energy - attraction)": rows[
"spearman-attraction-energy"
].mean(),
"Spearman's coeff. (Force - ascending)": rows[
"spearman-ascending-force"
].mean(),
}
table = pd.concat([table, pd.DataFrame([new_row])], ignore_index=True)
table.set_index("Model", inplace=True)
table.sort_values("Conservation deviation [eV/Å]", ascending=True, inplace=True)
table["Rank"] = np.argsort(table["Conservation deviation [eV/Å]"].to_numpy())
table.sort_values(
"Spearman's coeff. (Energy - repulsion)", ascending=True, inplace=True
)
table["Rank"] += np.argsort(table["Spearman's coeff. (Energy - repulsion)"].to_numpy())
table.sort_values(
"Spearman's coeff. (Force - descending)", ascending=True, inplace=True
)
table["Rank"] += np.argsort(table["Spearman's coeff. (Force - descending)"].to_numpy())
table.sort_values("Tortuosity", ascending=True, inplace=True)
table["Rank"] += np.argsort(table["Tortuosity"].to_numpy())
table.sort_values("Energy jump [eV]", ascending=True, inplace=True)
table["Rank"] += np.argsort(table["Energy jump [eV]"].to_numpy())
table.sort_values("Force flips", ascending=True, inplace=True)
table["Rank"] += np.argsort(table["Force flips"].to_numpy())
table["Rank"] += 1
table.sort_values("Rank", ascending=True, inplace=True)
table["Rank aggr."] = table["Rank"]
table["Rank"] = np.argsort(table["Rank"].to_numpy()) + 1
# table.drop(columns=["rank"], inplace=True)
# table = table.rename(columns={"Rank": "Rank Aggr."})
table = table.reindex(
columns=[
"Rank",
"Rank aggr.",
"Conservation deviation [eV/Å]",
"Spearman's coeff. (Energy - repulsion)",
"Spearman's coeff. (Force - descending)",
"Tortuosity",
"Energy jump [eV]",
"Force flips",
"Spearman's coeff. (Energy - attraction)",
"Spearman's coeff. (Force - ascending)",
]
)
s = (
table.style.background_gradient(
cmap="viridis_r",
subset=["Conservation deviation [eV/Å]"],
gmap=np.log(table["Conservation deviation [eV/Å]"].to_numpy()),
)
.background_gradient(
cmap="Reds",
subset=[
"Spearman's coeff. (Energy - repulsion)",
"Spearman's coeff. (Force - descending)",
],
# vmin=-1, vmax=-0.5
)
.background_gradient(
cmap="RdPu",
subset=["Tortuosity", "Energy jump [eV]", "Force flips"],
)
.background_gradient(
cmap="Blues",
subset=["Rank", "Rank aggr."],
)
)
def render():
st.dataframe(
s,
use_container_width=True,
)
# return table
|