Skip to content

Commit 0566d28

Browse files
committed
tidy app and analysis
1 parent 316c86d commit 0566d28

File tree

5 files changed

+256
-77
lines changed

5 files changed

+256
-77
lines changed

ml_peg/analysis/molecular/Diatomics/analyse_Diatomics.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
CALC_PATH = CALCS_ROOT / "molecular" / "Diatomics" / "outputs"
2424
OUT_PATH = APP_ROOT / "data" / "molecular" / "Diatomics"
2525
CURVE_PATH = OUT_PATH / "curves"
26-
PERIODIC_TABLE_PATH = OUT_PATH / "periodic_tables"
2726

2827

2928
METRICS_CONFIG_PATH = Path(__file__).with_name("metrics.yml")
@@ -241,11 +240,11 @@ def _load_pair_data() -> dict[str, pd.DataFrame]:
241240

242241
persist_diatomics_pair_data = periodic_curve_gallery(
243242
curve_dir=CURVE_PATH,
244-
periodic_dir=PERIODIC_TABLE_PATH,
245-
overview_title="Homonuclear diatomic curves: {model}",
246-
overview_formats=("svg",),
247-
focus_title_template="Diatomics involving {element}",
248-
focus_formats=("png",),
243+
periodic_dir=None,
244+
overview_title=None,
245+
overview_formats=(),
246+
focus_title_template=None,
247+
focus_formats=(),
249248
series_columns={"force_parallel": "force_parallel"},
250249
x_ticks=(0.0, 2.0, 4.0, 6.0),
251250
y_ticks=(-20.0, -10.0, 0.0, 10.0, 20.0),
@@ -293,18 +292,13 @@ def collect_metrics(
293292

294293
for model_name, df in data.items():
295294
metrics, well_depths = aggregate_model_metrics(df)
296-
if not metrics:
297-
continue
298295

299296
row = {"Model": model_name} | metrics
300297
rows.append(row)
301298

302299
model_well_depths[model_name] = well_depths
303300

304301
columns = ["Model"] + list(DEFAULT_THRESHOLDS.keys())
305-
if not rows:
306-
metrics_df = pd.DataFrame(columns=columns)
307-
return metrics_df, model_well_depths
308302

309303
metrics_df = pd.DataFrame(rows).reindex(columns=columns)
310304
return metrics_df, model_well_depths

ml_peg/analysis/utils/decorators.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -604,13 +604,13 @@ def render_periodic_table_grid(
604604
def periodic_curve_gallery(
605605
*,
606606
curve_dir: Path,
607-
periodic_dir: Path,
608-
overview_title: str,
609-
overview_formats: tuple[str, ...] = ("svg",),
607+
periodic_dir: Path | None = None,
608+
overview_title: str | None = None,
609+
overview_formats: tuple[str, ...] = (),
610610
overview_figsize: tuple[float, float] | None = (36, 20),
611611
overview_suptitle: dict[str, Any] | None = None,
612-
focus_title_template: str | None = "Diatomics involving {element}",
613-
focus_formats: tuple[str, ...] = ("png",),
612+
focus_title_template: str | None = None,
613+
focus_formats: tuple[str, ...] = (),
614614
focus_figsize: tuple[float, float] = (30, 15),
615615
focus_dpi: int = 200,
616616
pair_column: str = "pair",
@@ -634,11 +634,13 @@ def periodic_curve_gallery(
634634
curve_dir
635635
Directory where per-pair JSON payloads will be written per model.
636636
periodic_dir
637-
Directory where periodic-table overviews and per-element figures are stored.
637+
Optional directory for periodic-table overviews and per-element figures. When
638+
omitted, only the curve payloads are written.
638639
overview_title
639-
Format string used for the overview title (receives ``model`` keyword).
640+
Format string used for the overview title (receives ``model`` keyword). Ignored
641+
if ``overview_formats`` is empty.
640642
overview_formats
641-
File formats to emit for overview figure.
643+
File formats to emit for overview figure. Empty tuple disables overview output.
642644
overview_figsize
643645
Matplotlib figsize for the overview grid.
644646
overview_suptitle
@@ -647,7 +649,7 @@ def periodic_curve_gallery(
647649
Format string for per-element focus plots (receives ``element`` and ``model``).
648650
Set to ``None`` to disable focus figures.
649651
focus_formats
650-
File formats for per-element focus plots.
652+
File formats for per-element focus plots. Empty tuple disables focus output.
651653
focus_figsize
652654
Matplotlib figsize for focus plots.
653655
focus_dpi
@@ -673,7 +675,7 @@ def periodic_curve_gallery(
673675
emits the associated gallery assets.
674676
"""
675677
curve_dir = Path(curve_dir)
676-
periodic_dir = Path(periodic_dir)
678+
periodic_dir = Path(periodic_dir) if periodic_dir else None
677679

678680
default_series = {"distance": distance_column, "energy": energy_column}
679681
if series_columns:
@@ -956,22 +958,32 @@ def wrapper(*args, **kwargs):
956958
)
957959

958960
curve_dir.mkdir(parents=True, exist_ok=True)
959-
periodic_dir.mkdir(parents=True, exist_ok=True)
961+
if periodic_dir:
962+
periodic_dir.mkdir(parents=True, exist_ok=True)
960963

961964
for model_name, frame in model_frames.items():
962965
if frame is None or frame.empty:
963966
continue
964967
_write_curve_payloads(model_name, frame)
965968

969+
# Skip image/manifest generation when no formats are requested or
970+
# when no periodic_dir is supplied.
971+
if not periodic_dir or (
972+
not overview_formats
973+
and not (focus_title_template and focus_formats)
974+
):
975+
continue
976+
966977
model_periodic_dir = periodic_dir / model_name
967978
model_periodic_dir.mkdir(parents=True, exist_ok=True)
968979
elements_dir = model_periodic_dir / "elements"
969980
elements_dir.mkdir(parents=True, exist_ok=True)
970981

971-
overview_rendered = _render_overview(model_name, frame)
972982
manifest: dict[str, Any] = {"elements": {}}
973-
if overview_rendered and overview_formats:
974-
manifest["overview"] = f"overview.{overview_formats[0]}"
983+
if overview_formats:
984+
overview_rendered = _render_overview(model_name, frame)
985+
if overview_rendered:
986+
manifest["overview"] = f"overview.{overview_formats[0]}"
975987

976988
if focus_title_template and focus_formats:
977989
available_elements: set[str] = set()

ml_peg/app/molecular/Diatomics/app_Diatomics.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
from dash import Dash, dcc
6+
from dash.dcc import Loading
67
from dash.html import Div, Label
78

89
from ml_peg.app import APP_ROOT
@@ -15,6 +16,7 @@
1516
BENCHMARK_NAME = "Diatomics"
1617
DATA_PATH = APP_ROOT / "data" / "molecular" / "Diatomics"
1718
PERIODIC_TABLE_PATH = DATA_PATH / "periodic_tables"
19+
CURVE_PATH = DATA_PATH / "curves"
1820

1921

2022
class DiatomicsApp(BaseApp):
@@ -26,7 +28,9 @@ def register_callbacks(self) -> None:
2628
model_dropdown_id=f"{BENCHMARK_NAME}-model-dropdown",
2729
element_dropdown_id=f"{BENCHMARK_NAME}-element-dropdown",
2830
figure_id=f"{BENCHMARK_NAME}-figure",
29-
manifest_dir=PERIODIC_TABLE_PATH,
31+
manifest_dir=CURVE_PATH,
32+
overview_label="Homonuclear diatomics",
33+
curve_dir=CURVE_PATH,
3034
)
3135

3236

@@ -40,33 +44,37 @@ def get_app() -> DiatomicsApp:
4044
Benchmark layout and callback registration.
4145
"""
4246
model_options = [{"label": model, "value": model} for model in MODELS]
43-
default_model = model_options[0]["value"] if model_options else None
47+
default_model = model_options[0]["value"]
48+
overview_label = "Homonuclear diatomics"
4449

4550
extra_components = [
4651
Div(
4752
[
48-
Label("Select Model:"),
53+
Label("Select model:"),
4954
dcc.Dropdown(
5055
id=f"{BENCHMARK_NAME}-model-dropdown",
5156
options=model_options,
5257
value=default_model,
5358
clearable=False,
5459
style={"width": "300px", "marginBottom": "20px"},
5560
),
56-
Label("Select Element:"),
61+
Label("Select heteronuclear element:"),
5762
dcc.Dropdown(
5863
id=f"{BENCHMARK_NAME}-element-dropdown",
59-
options=[{"label": "All", "value": "All"}],
60-
value="All",
64+
options=[{"label": overview_label, "value": overview_label}],
65+
value=overview_label,
6166
clearable=False,
6267
style={"width": "300px"},
6368
),
6469
],
6570
style={"marginBottom": "20px"},
6671
),
67-
dcc.Graph(
68-
id=f"{BENCHMARK_NAME}-figure",
69-
style={"height": "700px", "width": "100%", "marginTop": "20px"},
72+
Loading(
73+
dcc.Graph(
74+
id=f"{BENCHMARK_NAME}-figure",
75+
style={"height": "700px", "width": "100%", "marginTop": "20px"},
76+
),
77+
type="circle",
7078
),
7179
]
7280

0 commit comments

Comments
 (0)