# -*- coding: utf-8 -*- """ 验证: 用模板对【已有型号】重新渲染, 必须与库中编码完全一致。 凡不一致 → 模板有误, 绝不能用它生成新编码 (会造出不存在的零件号)。 """ import json, io, os, csv, sys, importlib.util HERE = os.path.dirname(os.path.abspath(__file__)) spec = importlib.util.spec_from_file_location('gmc', os.path.join(HERE, 'gen-missing-combos.py')) gmc = importlib.util.module_from_spec(spec) sys.argv = ['x'] # 防止执行 main spec.loader.exec_module(gmc) CAT = gmc.CAT print(f'{"系列":7s} {"变体":>6s} {"模板一致":>9s} {"失败":>6s} 反例') print('-' * 74) allok = True for code in sorted(gmc.SAFE): if code not in gmc.TEMPLATES: continue tpl, _ = gmc.TEMPLATES[code] rows = list(csv.DictReader(io.open(os.path.join(CAT, 'csv', code + '.csv'), encoding='utf-8-sig'))) ok = fail = 0 bad = [] for r in rows: prm = {k: v for k, v in r.items() if k not in ('model_code', 'step_file')} got = gmc.render(tpl, prm) if got == r['model_code']: ok += 1 else: fail += 1 if len(bad) < 3: bad.append(f'{r["model_code"]} -> 渲染"{got}"') flag = '' if fail == 0 else ' <-- 模板有误!' if fail: allok = False print(f'{code:7s} {len(rows):6d} {ok:9d} {fail:6d} {bad[0] if bad else ""}{flag}') print() print('结论:', '所有模板对已有型号 100% 复现 ✅' if allok else '存在模板错误, 不可用于生成新编码 ❌')