Merge remote-tracking branch 'origin/sub_laptop_3' into sub_laptop_2

This commit is contained in:
2026-11-05 19:56:32 +09:00
91 changed files with 203 additions and 19307 deletions
@@ -7,12 +7,9 @@
from __future__ import annotations
import importlib
import itertools
import re
import sys
from decimal import ROUND_DOWN, ROUND_HALF_UP, ROUND_UP, Decimal
from pathlib import Path
import master_keys as mk
@@ -31,27 +28,13 @@ _OPS = ("<=", ">=", "==", "!=", "<", ">")
_ARITH = re.compile(r"[\d.\s+\-*/()]*\d[\d.\s+\-*/()]*") # 분수·식 값 칸(「1/1.30」)
# 흐름도 로직(줄에 「흐름」) 셈 — 서버(`M01_MasterData_Store_Flow`)가 꽂음 · 없으면 옛 셈만
# 꼴 = (master, 키, 줄, 입력) → `run` 과 같은 꼴(돈 = 줄 · 비목 합 · 계 / 돈 아님 = 결과)
FLOW_RUN = None
# 흐름 로직 입력 = 「설계 때 정할 것」 → 입력 꼴(이름 · 단위 · 고르기 · 범위 · 예시) — 서버가 꽂음
FLOW_INPUTS = None
CALC_FIELDS = ("중간", "호표", "결과", "덧줄") # 계산 칸 — 흐름 로직 줄엔 없음(입력은 둠)
def _flow_hooks() -> None:
"""흐름 셈 · 입력 갈래를 깖 — 서버가 안 깔았으면(스크립트 · 시험) 여기서 서버 모듈을 불러 깖."""
if FLOW_RUN is None or FLOW_INPUTS is None:
root = str(Path(__file__).resolve().parents[3])
if root not in sys.path:
sys.path.insert(0, root)
importlib.import_module("M01_MasterData.M01_MasterData_Store_Flow")
CALC_FIELDS = ("중간", "호표", "결과", "덧줄") # 계산 칸
FLOW_GONE = "흐름도 로직은 걷음 — M01 시트로 다시 만듦" # 794-1b · 저장된 흐름 로직 0
def inputs_of(row: dict) -> list[dict]:
"""흐름의 「설계 때 정할 것」 → 입력 꼴(이름 · 단위 · 고르기 · 범위 · 예시)."""
_flow_hooks()
return FLOW_INPUTS(row)
"""옛 흐름 로직(줄에 「흐름」) 입력 — 흐름도를 걷어 늘 못 셈."""
raise FormulaError(FLOW_GONE)
class FormulaError(ValueError):
@@ -564,9 +547,8 @@ def _blank_line(item: dict, why: str) -> dict:
def run(master: Master, ref: str, given: dict, depth: int = 0) -> dict:
"""로직 한 줄 계산 — 돈 로직은 호표 줄 · 비목 합 · 계, 돈 아닌 로직은 결과 수 하나."""
row = master.logic(ref)
if isinstance(row.get("흐름"), dict): # 흐름 로직 — 깔림에 기대지 않고 스스로 깖
_flow_hooks()
return FLOW_RUN(master, ref, row, given)
if isinstance(row.get("흐름"), dict):
raise FormulaError(FLOW_GONE)
env = _inputs(row, given, master)
for step in row.get("중간", []):
try: