Merge remote-tracking branches 'origin/sub_laptop_5' and 'origin/sub_laptop_6' into main_laptop_1

This commit is contained in:
2026-10-27 21:24:47 +09:00
5 changed files with 16 additions and 1 deletions
+4
View File
@@ -285,6 +285,8 @@ def run_engine(
"truncated_ratio": float(best["truncated_ratio"]),
"floor": _floor(strata, best),
"cells": [int(i) for i in best["cells"]],
"columns": int(best.get("columns") or len(best["cells"])),
"few_columns": bool(best.get("few_columns")),
},
"trials": int(res.trials),
"reference_fs": reference_fs(ground, settings["condition"]),
@@ -355,6 +357,8 @@ def pack(
},
"chainage_m": float(_nearest_chainage(stations, *where)),
"cells": int(np.isfinite(f).sum()),
"columns": best.get("columns"),
"few_columns": bool(best.get("few_columns")),
"trials": int(raw.get("trials") or 0),
},
}
+5
View File
@@ -11,6 +11,7 @@
import "./E04_Stab3D_UI_Style.css";
import { API_BASE_URL, CURRENT_PROJECT_ID_KEY, ROUTES } from "@config/config_frontend";
import { attachCollapsible, createPanelCard } from "@ui/ui_template_collapsible";
import { createBadge } from "@ui/ui_template_badge";
import { createBanner } from "@ui/ui_template_banner";
import { createButton, el, showToast } from "@ui/ui_template_elements";
import { createEmpty } from "@ui/ui_template_empty";
@@ -341,6 +342,7 @@ export function renderE04Stab3D(root: HTMLElement): void {
["E04_Result_Hovland", s.by_method.hovland.toFixed(3)],
["E04_Result_Where", station(nearest?.chainage_m ?? s.chainage_m)],
["E04_Result_Cells", s.cells.toLocaleString()],
["E04_Result_Columns", s.columns == null ? "-" : s.columns.toLocaleString()],
["E04_Result_Trials", s.trials.toLocaleString()],
["E04_Result_Time", `${result.elapsed_s.toFixed(1)} s`],
];
@@ -352,6 +354,9 @@ export function renderE04Stab3D(root: HTMLElement): void {
cell.append(chip);
}
cell.append(value);
if (key === "E04_Result_Columns" && s.few_columns) {
cell.append(" ", createBadge(t("E04_Result_FewColumns"), "warning", { size: 18 }));
}
return {
label: t(key),
value: cell,
+3
View File
@@ -40,6 +40,9 @@ export interface Summary3d {
method: string;
chainage_m: number;
cells: number;
/** 임계 활동체 기둥 수 · 100 미만이면 few_columns (옛 저장본은 없음) */
columns?: number | null;
few_columns?: boolean;
trials: number;
condition: string;
reference_fs: number;
+2 -1
View File
@@ -38,7 +38,7 @@ def _fake_engine(root, stations, ground, settings, on_progress, should_stop):
"x": 101.0, "y": 201.0, "z": 505.0, "r": 6.0, "ratio": 1.0, "azimuth_deg": 0.0,
"f": 0.9, "volume": 120.0, "method": 0,
"hovland": 0.85, "bishop": 0.9, "janbu_corrected": 0.95, "truncated_ratio": 0.0,
"floor": [],
"floor": [], "columns": 42, "few_columns": True,
},
"trials": 7,
"reference_fs": 1.5,
@@ -111,6 +111,7 @@ def test_analyze_cached_force_and_result(client, project, monkeypatch):
done = _wait(client)
assert done["error"] is None and done["percent"] == 100
assert done["summary"]["cells"] == 5 and done["summary"]["verdict"] == "ng"
assert done["summary"]["columns"] == 42 and done["summary"]["few_columns"] is True
assert done["summary"]["by_method"] == {"hovland": 0.85, "bishop": 0.9, "janbu_corrected": 0.95}
# 같은 입력 = 셈하지 않음
again = client.post(f"/api/projects/{PID}/stab/analyze3d", json=BODY).json()
+2
View File
@@ -71,6 +71,8 @@ export const ui_locales_e04 = {
E04_Result_Method: ["다스린 방법", "Governing method"],
E04_Result_Where: ["위치 (가까운 측점)", "Location (nearest station)"],
E04_Result_Cells: ["셀 수", "Cells"],
E04_Result_Columns: ["활동체 기둥 수", "Slip-body columns"],
E04_Result_FewColumns: ["100 미만 경고", "Under 100 - warning"],
E04_Result_Trials: ["시험 활동면 수", "Trial surfaces"],
E04_Result_Time: ["계산 시간", "Run time"],
E04_Result_None: ["이 구간 결과가 없습니다 — [해석]을 누르세요.", "No result for this section."],