From 52c90bfdd8f228f5a96c1412501f1f4af446f57c Mon Sep 17 00:00:00 2001 From: tobjend Date: Sun, 12 Jul 2026 03:54:35 +0200 Subject: [PATCH] =?UTF-8?q?tune:=20min=5Fmethods=205=E2=86=923,=20fix=20DE?= =?UTF-8?q?FAULT=5FCOVERAGE=20help=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit min_methods=3 gains 9 extra FastAPI grammars (3-4 method groups with clear sequential structure) without quality loss. No change for Flask or RAGSAK (their small groups fail other gates anyway). Multi-codebase validation (Round 13): tested Flask, FastAPI, httpx, Pydantic, SQLAlchemy. Key finding: CRX works on codebases with small focused sequential modules (FastAPI docs_src=22 grammars) but not on large utility libraries (Flask=0, Pydantic=0, SQLAlchemy=1). --- bex/tag_preprocessor/analyze.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bex/tag_preprocessor/analyze.py b/bex/tag_preprocessor/analyze.py index a8be5cc..8180039 100644 --- a/bex/tag_preprocessor/analyze.py +++ b/bex/tag_preprocessor/analyze.py @@ -246,7 +246,7 @@ def _preprocess_files(file_paths): return sequences, seq_files -def analyze_clusters(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, include_kore=False, method='langsize', min_methods=5): +def analyze_clusters(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, include_kore=False, method='langsize', min_methods=3): """Run full pipeline: preprocess → frequency filter → ensemble infer. Returns: @@ -283,7 +283,7 @@ def analyze_clusters(file_paths, extension, project_root="", min_coverage=DEFAUL return [("(all methods)", result, len(sequences), meta)] -def _infer_group(label, group_seqs, group_files, project_root, min_coverage, prefer, kmax, N, include_kore=False, include_idregex=False, method='langsize', min_methods=5, crx_method='standard', min_structure=0.0): +def _infer_group(label, group_seqs, group_files, project_root, min_coverage, prefer, kmax, N, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0): """Infer grammar for one package group. Module-level for ProcessPoolExecutor.""" filtered = frequency_filter(group_seqs, min_coverage=min_coverage) imports = _extract_imports(group_files) @@ -329,7 +329,7 @@ def _infer_group(label, group_seqs, group_files, project_root, min_coverage, pre return (label, result, len(filtered), meta) -def analyze_by_package(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, min_pkg_size=3, include_kore=False, include_idregex=False, method='langsize', min_methods=5, crx_method='standard', min_structure=0.0): +def analyze_by_package(file_paths, extension, project_root="", min_coverage=DEFAULT_COVERAGE, prefer=None, kmax=2, N=3, min_pkg_size=3, include_kore=False, include_idregex=False, method='langsize', min_methods=3, crx_method='standard', min_structure=0.0): """Preprocess and group by package directory, infer per group. Groups methods by their file's relative directory path, merging @@ -475,7 +475,7 @@ def analyze_directory( include_kore=False, include_idregex=False, method='langsize', - min_methods=5, + min_methods=3, crx_method='standard', min_structure=0.0, ): @@ -679,8 +679,8 @@ def _parse_args(argv=None): help="Scoring method: langsize (default, Bex et al.) or mdl (fallback)", ) parser.add_argument( - "--min-methods", type=int, default=5, - help="Minimum methods per group to infer grammar (default: 5). Groups with fewer are skipped.", + "--min-methods", type=int, default=3, + help="Minimum methods per group to infer grammar (default: 3). Groups with fewer are skipped.", ) parser.add_argument( "--crx-method", choices=["standard", "refined"], default="standard",