algobench-sdk 2.0.1__tar.gz → 2.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/PKG-INFO +1 -1
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/__init__.py +1 -1
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/parsers/csv_parser.py +3 -83
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench_sdk.egg-info/PKG-INFO +1 -1
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/pyproject.toml +1 -1
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/README.md +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/__main__.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/api.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/cli.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/config/__init__.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/config/analysis_criteria.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/config/business.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/config/metric_keywords.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/config/metrics.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/config/thresholds.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/exceptions.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/models.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/parsers/__init__.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/__init__.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/core.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/diagnosis.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/qvalue.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/sample_processing.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/tests/__init__.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/tests/data_type.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/tests/effect_size.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/tests/nonparametric.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/tests/smart.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/stats/tests/t_tests.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/utils/__init__.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/utils/improvement.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/utils/math_utils.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench/utils/numbers.py +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench_sdk.egg-info/SOURCES.txt +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench_sdk.egg-info/dependency_links.txt +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench_sdk.egg-info/requires.txt +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/algobench_sdk.egg-info/top_level.txt +0 -0
- {algobench_sdk-2.0.1 → algobench_sdk-2.0.3}/setup.cfg +0 -0
|
@@ -12,76 +12,13 @@ from algobench.config.business import (
|
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def parse_metric_inline_config(value: str) -> dict:
|
|
16
|
-
"""解析指标备注行中的内联配置,对应 JS 的 parseMetricRemarkValue。
|
|
17
|
-
|
|
18
|
-
从 ## metric:name 后面的文本中提取 key=value 配置对和纯文本备注。
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
value: ## metric:name 后面的文本,如 "半周长线长 better=higher unit=ms"
|
|
22
|
-
|
|
23
|
-
Returns:
|
|
24
|
-
{"remark": str, "config": dict | None}
|
|
25
|
-
config 存在时包含解析出的配置键值对,否则为 None。
|
|
26
|
-
"""
|
|
27
|
-
trimmed = (value or "").strip()
|
|
28
|
-
if not trimmed:
|
|
29
|
-
return {"remark": "", "config": None}
|
|
30
|
-
|
|
31
|
-
tokens = trimmed.split()
|
|
32
|
-
config: dict = {}
|
|
33
|
-
remark_parts: list[str] = []
|
|
34
|
-
has_config = False
|
|
35
|
-
|
|
36
|
-
for token in tokens:
|
|
37
|
-
eq_index = token.find("=")
|
|
38
|
-
if eq_index <= 0:
|
|
39
|
-
remark_parts.append(token)
|
|
40
|
-
continue
|
|
41
|
-
|
|
42
|
-
key = token[:eq_index].strip()
|
|
43
|
-
raw_value = token[eq_index + 1 :].strip()
|
|
44
|
-
if not key or raw_value == "":
|
|
45
|
-
remark_parts.append(token)
|
|
46
|
-
continue
|
|
47
|
-
|
|
48
|
-
if key == "better":
|
|
49
|
-
config["better"] = raw_value
|
|
50
|
-
has_config = True
|
|
51
|
-
elif key == "unit":
|
|
52
|
-
config["unit"] = raw_value
|
|
53
|
-
has_config = True
|
|
54
|
-
elif key == "impDisplayMode":
|
|
55
|
-
config["impDisplayMode"] = raw_value
|
|
56
|
-
has_config = True
|
|
57
|
-
elif key in ("scale", "valueScale"):
|
|
58
|
-
try:
|
|
59
|
-
parsed = float(raw_value)
|
|
60
|
-
if parsed != float("inf") and parsed != float("-inf") and parsed == parsed: # isfinite check
|
|
61
|
-
config["valueScale"] = parsed
|
|
62
|
-
has_config = True
|
|
63
|
-
else:
|
|
64
|
-
remark_parts.append(token)
|
|
65
|
-
except ValueError:
|
|
66
|
-
remark_parts.append(token)
|
|
67
|
-
elif key == "description":
|
|
68
|
-
config["description"] = raw_value
|
|
69
|
-
has_config = True
|
|
70
|
-
else:
|
|
71
|
-
remark_parts.append(token)
|
|
72
|
-
|
|
73
|
-
remark = " ".join(remark_parts) or config.get("description") or trimmed
|
|
74
|
-
return {"remark": remark, "config": config if has_config else None}
|
|
75
|
-
|
|
76
|
-
|
|
77
15
|
def extract_remarks(text: str) -> dict:
|
|
78
16
|
"""从 CSV 文本中提取语义注释行,对应 JS 的 extractRemarks + splitRemarksAndBody。
|
|
79
17
|
|
|
80
18
|
返回:
|
|
81
19
|
{
|
|
82
20
|
"algoRemarks": {algo_name: remark},
|
|
83
|
-
"metricRemarks": {metric_name: remark
|
|
84
|
-
"metricConfigs": {metric_name: config_dict}, # 仅当存在内联配置时出现
|
|
21
|
+
"metricRemarks": {metric_name: remark},
|
|
85
22
|
"datasetRemark": str,
|
|
86
23
|
}
|
|
87
24
|
"""
|
|
@@ -89,8 +26,6 @@ def extract_remarks(text: str) -> dict:
|
|
|
89
26
|
if not text or not isinstance(text, str):
|
|
90
27
|
return result
|
|
91
28
|
|
|
92
|
-
metric_configs: dict[str, dict] = {}
|
|
93
|
-
|
|
94
29
|
for line in text.splitlines():
|
|
95
30
|
trimmed = line.strip()
|
|
96
31
|
if not trimmed.startswith(REMARK_PREFIX):
|
|
@@ -109,15 +44,8 @@ def extract_remarks(text: str) -> dict:
|
|
|
109
44
|
key = metric_match.group(1)
|
|
110
45
|
value = (metric_match.group(2) or "").strip()
|
|
111
46
|
if key:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
result["metricRemarks"][key] = {
|
|
115
|
-
"remark": parsed["remark"],
|
|
116
|
-
"config": parsed["config"],
|
|
117
|
-
}
|
|
118
|
-
metric_configs[key] = parsed["config"]
|
|
119
|
-
else:
|
|
120
|
-
result["metricRemarks"][key] = parsed["remark"]
|
|
47
|
+
# 仅保留 remark 文本,不再解析 key=value 配置
|
|
48
|
+
result["metricRemarks"][key] = value
|
|
121
49
|
continue
|
|
122
50
|
|
|
123
51
|
note_match = REMARK_NOTE_PATTERN.match(trimmed)
|
|
@@ -125,9 +53,6 @@ def extract_remarks(text: str) -> dict:
|
|
|
125
53
|
result["datasetRemark"] = (note_match.group(1) or "").strip()
|
|
126
54
|
continue
|
|
127
55
|
|
|
128
|
-
if metric_configs:
|
|
129
|
-
result["metricConfigs"] = metric_configs
|
|
130
|
-
|
|
131
56
|
return result
|
|
132
57
|
|
|
133
58
|
|
|
@@ -206,11 +131,6 @@ def parse_csv(csv_string: str, selected_cases: list[str] | None = None) -> dict:
|
|
|
206
131
|
"metricRemarks": {k: v for k, v in remarks["metricRemarks"].items() if k in metrics},
|
|
207
132
|
"datasetRemark": remarks["datasetRemark"],
|
|
208
133
|
}
|
|
209
|
-
# 保留 metricConfigs(仅过滤掉不存在的指标)
|
|
210
|
-
if "metricConfigs" in remarks:
|
|
211
|
-
filtered_remarks["metricConfigs"] = {
|
|
212
|
-
k: v for k, v in remarks["metricConfigs"].items() if k in metrics
|
|
213
|
-
}
|
|
214
134
|
|
|
215
135
|
# 构建标准化数据
|
|
216
136
|
data = []
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|