{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# DSFB Semiconductor End-to-End Notebook\n",
"\n",
"This notebook runs the `dsfb-semiconductor` crate as a non-intrusive, read-only DSFB interpretation layer. It fetches or validates SECOM, probes PHM 2018, runs the SECOM benchmark, runs the PHM 2018 benchmark, renders the operator-facing figures, and surfaces the generated PDF and ZIP artifacts."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from pathlib import Path\n",
"import json\n",
"import subprocess\n",
"\n",
"CRATE = Path('/home/one/dsfb/crates/dsfb-semiconductor')\n",
"MANIFEST = CRATE / 'Cargo.toml'\n",
"DATA_ROOT = CRATE / 'data'\n",
"RAW_ROOT = DATA_ROOT / 'raw'\n",
"OUTPUT_ROOT = CRATE / 'output-dsfb-semiconductor'\n",
"\n",
"def run_cmd(args, cwd=CRATE):\n",
" print(' '.join(map(str, args)))\n",
" completed = subprocess.run(args, cwd=cwd, check=True, text=True, capture_output=True)\n",
" print(completed.stdout)\n",
" if completed.stderr:\n",
" print(completed.stderr)\n",
" return completed\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"run_cmd(['cargo', 'run', '--manifest-path', str(MANIFEST), '--', 'fetch-secom', '--data-root', str(RAW_ROOT)])\n",
"run_cmd(['cargo', 'run', '--manifest-path', str(MANIFEST), '--', 'probe-phm2018', '--data-root', str(DATA_ROOT)])\n",
"run_cmd(['cargo', 'run', '--manifest-path', str(MANIFEST), '--', 'run-secom', '--data-root', str(RAW_ROOT), '--output-root', str(OUTPUT_ROOT)])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"secom_runs = sorted(OUTPUT_ROOT.glob('*_dsfb-semiconductor_secom'))\n",
"latest_secom = secom_runs[-1]\n",
"print(latest_secom)\n",
"run_cmd(['cargo', 'run', '--manifest-path', str(MANIFEST), '--', 'run-phm2018', '--data-root', str(DATA_ROOT), '--output-root', str(OUTPUT_ROOT), '--secom-run-dir', str(latest_secom)])\n",
"phm_runs = sorted(OUTPUT_ROOT.glob('*_dsfb-semiconductor_phm2018'))\n",
"latest_phm = phm_runs[-1]\n",
"print(latest_phm)\n",
"run_cmd(['cargo', 'run', '--manifest-path', str(MANIFEST), '--', 'render-non-intrusive-artifacts', '--run-dir', str(latest_secom)])\n",
"run_cmd(['cargo', 'run', '--manifest-path', str(MANIFEST), '--', 'render-unified-value-figure', '--secom-run-dir', str(latest_secom), '--phm-run-dir', str(latest_phm), '--paper-tex', str(CRATE / 'paper' / 'semiconductor.tex')])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import Image, display\n",
"\n",
"display(Image(filename=str(latest_secom / 'figures' / 'dsfb_non_intrusive_architecture.png')))\n",
"display(Image(filename=str(latest_secom / 'figures' / 'dsfb_unified_value_figure.png')))\n",
"\n",
"artifacts = {\n",
" 'report_pdf': str(latest_secom / 'report.pdf'),\n",
" 'results_zip': str(latest_secom / 'results.zip'),\n",
" 'episode_summary_csv': str(latest_secom / 'dsfb_episode_summary.csv'),\n",
" 'episode_precision_csv': str(latest_secom / 'dsfb_episode_precision.csv'),\n",
" 'recall_metrics_csv': str(latest_secom / 'dsfb_recall_metrics.csv')\n",
"}\n",
"print(json.dumps(artifacts, indent=2))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}