benchmark-reliability 0.2.1__tar.gz → 0.3.1__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.
Files changed (96) hide show
  1. benchmark_reliability-0.3.1/MANIFEST.in +13 -0
  2. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/PKG-INFO +16 -12
  3. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/README.md +8 -8
  4. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/pyproject.toml +23 -4
  5. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/setup.py +4 -3
  6. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/PKG-INFO +16 -12
  7. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/SOURCES.txt +37 -1
  8. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/requires.txt +5 -0
  9. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/__init__.py +3 -1
  10. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/analyzer.py +6 -9
  11. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/cli.py +22 -65
  12. benchmark_reliability-0.3.1/src/brf/registry/manifest.yaml +66 -0
  13. benchmark_reliability-0.3.1/src/brf/registry/prepare_hashes.json +53 -0
  14. benchmark_reliability-0.3.1/src/brf/registry/registry_v2.1.json +1634 -0
  15. benchmark_reliability-0.3.1/src/brf/registry/sources/__init__.py +179 -0
  16. benchmark_reliability-0.3.1/src/brf/registry/sources/abalone.py +44 -0
  17. benchmark_reliability-0.3.1/src/brf/registry/sources/air_quality_uci.py +73 -0
  18. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/assistments.py +3 -8
  19. benchmark_reliability-0.3.1/src/brf/registry/sources/auto_mpg.py +47 -0
  20. benchmark_reliability-0.3.1/src/brf/registry/sources/boston_housing.py +42 -0
  21. benchmark_reliability-0.3.1/src/brf/registry/sources/climate_weather.py +49 -0
  22. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/college_scorecard.py +1 -11
  23. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/colleges_aaup.py +0 -1
  24. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/colleges_usnews.py +9 -16
  25. benchmark_reliability-0.3.1/src/brf/registry/sources/cpu_act.py +41 -0
  26. benchmark_reliability-0.3.1/src/brf/registry/sources/credit_card.py +45 -0
  27. benchmark_reliability-0.3.1/src/brf/registry/sources/cross_domain_batch.py +154 -0
  28. benchmark_reliability-0.3.1/src/brf/registry/sources/customer_churn.py +47 -0
  29. benchmark_reliability-0.3.1/src/brf/registry/sources/electricity.py +44 -0
  30. benchmark_reliability-0.3.1/src/brf/registry/sources/energy_building.py +44 -0
  31. benchmark_reliability-0.3.1/src/brf/registry/sources/energy_efficiency.py +42 -0
  32. benchmark_reliability-0.3.1/src/brf/registry/sources/entrance_exam.py +65 -0
  33. benchmark_reliability-0.3.1/src/brf/registry/sources/external_validation.py +180 -0
  34. benchmark_reliability-0.3.1/src/brf/registry/sources/german_credit.py +46 -0
  35. benchmark_reliability-0.3.1/src/brf/registry/sources/higher_ed.py +62 -0
  36. benchmark_reliability-0.3.1/src/brf/registry/sources/kaggle_students_performance.py +53 -0
  37. benchmark_reliability-0.3.1/src/brf/registry/sources/kdd_cup_2010.py +88 -0
  38. benchmark_reliability-0.3.1/src/brf/registry/sources/law_school.py +51 -0
  39. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/mathe.py +0 -1
  40. benchmark_reliability-0.3.1/src/brf/registry/sources/mm_tba.py +168 -0
  41. benchmark_reliability-0.3.1/src/brf/registry/sources/nursery.py +56 -0
  42. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/oli.py +2 -15
  43. benchmark_reliability-0.3.1/src/brf/registry/sources/olympics.py +55 -0
  44. benchmark_reliability-0.3.1/src/brf/registry/sources/oulad.py +75 -0
  45. benchmark_reliability-0.3.1/src/brf/registry/sources/pisa2015.py +69 -0
  46. benchmark_reliability-0.3.1/src/brf/registry/sources/pollution.py +42 -0
  47. benchmark_reliability-0.3.1/src/brf/registry/sources/real_estate.py +48 -0
  48. benchmark_reliability-0.3.1/src/brf/registry/sources/seoul_bike.py +43 -0
  49. benchmark_reliability-0.3.1/src/brf/registry/sources/student_absences.py +57 -0
  50. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/student_depression.py +6 -17
  51. benchmark_reliability-0.3.1/src/brf/registry/sources/student_dropout.py +55 -0
  52. benchmark_reliability-0.3.1/src/brf/registry/sources/student_health.py +59 -0
  53. benchmark_reliability-0.3.1/src/brf/registry/sources/students_exam_scores.py +62 -0
  54. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/tae.py +0 -1
  55. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/sources/turkiye.py +0 -3
  56. benchmark_reliability-0.3.1/src/brf/registry/sources/uci_student.py +52 -0
  57. benchmark_reliability-0.3.1/src/brf/registry/sources/uci_student_math.py +58 -0
  58. benchmark_reliability-0.3.1/src/brf/registry/sources/wine_quality.py +54 -0
  59. benchmark_reliability-0.3.1/src/brf/registry/sources/xapi_edu.py +77 -0
  60. benchmark_reliability-0.3.1/src/brf/registry/sources/yacht.py +42 -0
  61. benchmark_reliability-0.3.1/src/brf/registry/verify.py +140 -0
  62. benchmark_reliability-0.3.1/verification/README.md +55 -0
  63. benchmark_reliability-0.3.1/verification/prepare_verify_py313.txt +55 -0
  64. benchmark_reliability-0.3.1/verification/prepare_verify_py38.txt +55 -0
  65. benchmark_reliability-0.3.1/verification/prepare_verify_py38_legacy.txt +112 -0
  66. benchmark_reliability-0.2.1/src/brf/registry/manifest.yaml +0 -47
  67. benchmark_reliability-0.2.1/src/brf/registry/sources/__init__.py +0 -216
  68. benchmark_reliability-0.2.1/src/brf/registry/sources/entrance_exam.py +0 -55
  69. benchmark_reliability-0.2.1/src/brf/registry/sources/higher_ed.py +0 -53
  70. benchmark_reliability-0.2.1/src/brf/registry/sources/mm_tba.py +0 -49
  71. benchmark_reliability-0.2.1/src/brf/registry/sources/oulad.py +0 -52
  72. benchmark_reliability-0.2.1/src/brf/registry/sources/student_dropout.py +0 -75
  73. benchmark_reliability-0.2.1/src/brf/registry/sources/uci_student.py +0 -53
  74. benchmark_reliability-0.2.1/src/brf/registry/sources/xapi_edu.py +0 -51
  75. benchmark_reliability-0.2.1/src/brf/registry/verify.py +0 -73
  76. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/setup.cfg +0 -0
  77. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/dependency_links.txt +0 -0
  78. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/entry_points.txt +0 -0
  79. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/top_level.txt +0 -0
  80. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/cli.py +0 -0
  81. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/__init__.py +0 -0
  82. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/baseline_gap.py +0 -0
  83. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/instability.py +0 -0
  84. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/metadata.py +0 -0
  85. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/metrics/null_test.py +0 -0
  86. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/phase/__init__.py +0 -0
  87. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/phase/classifier.py +0 -0
  88. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/phase/embedding.py +0 -0
  89. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/phase/visualization.py +0 -0
  90. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/registry/__init__.py +0 -0
  91. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/report/__init__.py +0 -0
  92. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/report/json_export.py +0 -0
  93. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/src/brf/report/latex_export.py +0 -0
  94. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/tests/test_analyzer.py +0 -0
  95. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/tests/test_metrics.py +0 -0
  96. {benchmark_reliability-0.2.1 → benchmark_reliability-0.3.1}/tests/test_phase.py +0 -0
@@ -0,0 +1,13 @@
1
+ # verification/ holds the archived output of
2
+ # python scripts/compute_prepare_hashes.py --verify
3
+ # under two interpreters, plus the superseded 3.8 run that motivated the
4
+ # canonical content hash. It is evidence for the prepare-level digests rather
5
+ # than package code, so it lives outside src/brf and is included here rather
6
+ # than via package-data.
7
+ include verification/*.txt
8
+ include verification/*.md
9
+
10
+ # The alternate reference style stays available for reuse of the class file
11
+ # even though the manuscript selects sn-nature.
12
+ include sn-nature.bst
13
+ include sn-mathphys-num.bst
@@ -1,11 +1,11 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: benchmark-reliability
3
- Version: 0.2.1
3
+ Version: 0.3.1
4
4
  Summary: Benchmark Reliability Framework (BRF) - dataset-level reliability auditing with built-in benchmark registry
5
5
  Author-email: zhanglizhuo <zhanglizhuo@gmail.com>
6
6
  License: MIT
7
- Project-URL: Homepage, https://github.com/zhanglizhuo/BenchmarkReliability
8
- Project-URL: Repository, https://github.com/zhanglizhuo/BenchmarkReliability
7
+ Project-URL: Homepage, https://github.com/zhanglizhuo/BRFPackage
8
+ Project-URL: Repository, https://github.com/zhanglizhuo/BRFPackage
9
9
  Keywords: benchmark reliability,dataset auditing,educational AI,machine learning,registry
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: License :: OSI Approved :: MIT License
@@ -24,6 +24,10 @@ Requires-Dist: matplotlib>=3.5
24
24
  Requires-Dist: pandas>=1.1
25
25
  Requires-Dist: scipy>=1.5
26
26
  Requires-Dist: openml>=0.12
27
+ Provides-Extra: full
28
+ Requires-Dist: kagglehub>=0.1; extra == "full"
29
+ Requires-Dist: openpyxl>=3.1; extra == "full"
30
+ Requires-Dist: pyreadstat>=1.2; extra == "full"
27
31
 
28
32
  # benchmark-reliability
29
33
 
@@ -65,9 +69,9 @@ print(analyzer.diagnose()["summary"])
65
69
  for dim, issue in analyzer.diagnose()["details"].items():
66
70
  print(f" {dim}: {issue}")
67
71
 
68
- # Percentile rank against 25 audited benchmarks
72
+ # Percentile rank against the 51 benchmarks in the BRF Registry (v2.1 reference)
69
73
  print(analyzer.rank())
70
- # {'S_percentile': 16.0, 'E_percentile': 36.0, ...}
74
+ # {'S_percentile': 17.6, 'E_percentile': 27.5, 'reference': 'BRF Registry v2.1 (51 benchmarks)'}
71
75
 
72
76
  # One-paragraph recommendation
73
77
  print(analyzer.recommend())
@@ -77,7 +81,7 @@ print(analyzer.recommend())
77
81
 
78
82
  ```bash
79
83
  $ brf registry list
80
- BRF Registry -- 16 datasets
84
+ BRF Registry
81
85
 
82
86
  assistments ASSISTments 2009-2010 N= 3729 G= 124
83
87
  college_scorecard US College Scorecard N= 7804 G= 59
@@ -95,7 +99,7 @@ BRF Audit: Teaching Assistant Evaluation (tae)
95
99
  ### Download and verify all datasets
96
100
 
97
101
  ```bash
98
- $ brf registry sync # download + SHA-256 verify all 16 datasets
102
+ $ brf registry sync # download + SHA-256 verify all
99
103
  $ brf registry info oulad
100
104
  name: oulad
101
105
  display_name: Open University Learning Analytics Dataset
@@ -122,7 +126,7 @@ communication shorthand only --- **the signal is in the continuous values**.
122
126
 
123
127
  Use `analyzer.diagnose()` for per-dimension explanations and actionable
124
128
  recommendations, or `analyzer.rank()` to see percentile scores against
125
- the 25 benchmarks in the BRF Registry.
129
+ the 51 benchmarks in the BRF Registry (v2.1 reference).
126
130
 
127
131
  ## CLI Reference
128
132
 
@@ -152,8 +156,8 @@ To cite the BRF framework and package (JOSS paper forthcoming):
152
156
  @software{zhang2026brf,
153
157
  author = {Lizhuo Zhang},
154
158
  title = {benchmark-reliability: Benchmark Reliability Framework},
155
- url = {https://github.com/zhanglizhuo/BenchmarkReliability},
156
- version = {0.1.5},
159
+ url = {https://github.com/zhanglizhuo/BRFPackage},
160
+ version = {0.3.0},
157
161
  year = {2026},
158
162
  }
159
163
  ```
@@ -162,7 +166,7 @@ The behavior audit protocol is described in:
162
166
 
163
167
  > Zhang, L. *BehaviorAudit: a four-dimension protocol for auditing
164
168
  > benchmark reliability under group-aware evaluation.*
165
- > Scientific Reports (under review).
169
+ > Scientific Reports (2026). https://doi.org/10.1038/s41598-026-69629-6
166
170
 
167
171
  ## Related Work
168
172
 
@@ -38,9 +38,9 @@ print(analyzer.diagnose()["summary"])
38
38
  for dim, issue in analyzer.diagnose()["details"].items():
39
39
  print(f" {dim}: {issue}")
40
40
 
41
- # Percentile rank against 25 audited benchmarks
41
+ # Percentile rank against the 51 benchmarks in the BRF Registry (v2.1 reference)
42
42
  print(analyzer.rank())
43
- # {'S_percentile': 16.0, 'E_percentile': 36.0, ...}
43
+ # {'S_percentile': 17.6, 'E_percentile': 27.5, 'reference': 'BRF Registry v2.1 (51 benchmarks)'}
44
44
 
45
45
  # One-paragraph recommendation
46
46
  print(analyzer.recommend())
@@ -50,7 +50,7 @@ print(analyzer.recommend())
50
50
 
51
51
  ```bash
52
52
  $ brf registry list
53
- BRF Registry -- 16 datasets
53
+ BRF Registry
54
54
 
55
55
  assistments ASSISTments 2009-2010 N= 3729 G= 124
56
56
  college_scorecard US College Scorecard N= 7804 G= 59
@@ -68,7 +68,7 @@ BRF Audit: Teaching Assistant Evaluation (tae)
68
68
  ### Download and verify all datasets
69
69
 
70
70
  ```bash
71
- $ brf registry sync # download + SHA-256 verify all 16 datasets
71
+ $ brf registry sync # download + SHA-256 verify all
72
72
  $ brf registry info oulad
73
73
  name: oulad
74
74
  display_name: Open University Learning Analytics Dataset
@@ -95,7 +95,7 @@ communication shorthand only --- **the signal is in the continuous values**.
95
95
 
96
96
  Use `analyzer.diagnose()` for per-dimension explanations and actionable
97
97
  recommendations, or `analyzer.rank()` to see percentile scores against
98
- the 25 benchmarks in the BRF Registry.
98
+ the 51 benchmarks in the BRF Registry (v2.1 reference).
99
99
 
100
100
  ## CLI Reference
101
101
 
@@ -125,8 +125,8 @@ To cite the BRF framework and package (JOSS paper forthcoming):
125
125
  @software{zhang2026brf,
126
126
  author = {Lizhuo Zhang},
127
127
  title = {benchmark-reliability: Benchmark Reliability Framework},
128
- url = {https://github.com/zhanglizhuo/BenchmarkReliability},
129
- version = {0.1.5},
128
+ url = {https://github.com/zhanglizhuo/BRFPackage},
129
+ version = {0.3.0},
130
130
  year = {2026},
131
131
  }
132
132
  ```
@@ -135,7 +135,7 @@ The behavior audit protocol is described in:
135
135
 
136
136
  > Zhang, L. *BehaviorAudit: a four-dimension protocol for auditing
137
137
  > benchmark reliability under group-aware evaluation.*
138
- > Scientific Reports (under review).
138
+ > Scientific Reports (2026). https://doi.org/10.1038/s41598-026-69629-6
139
139
 
140
140
  ## Related Work
141
141
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "benchmark-reliability"
7
- version = "0.2.1"
7
+ version = "0.3.1"
8
8
  description = "Benchmark Reliability Framework (BRF) - dataset-level reliability auditing with built-in benchmark registry"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -33,18 +33,37 @@ dependencies = [
33
33
  "openml>=0.12",
34
34
  ]
35
35
 
36
+ # Seven of the 51 datasets need a reader that is not part of the core stack:
37
+ # kagglehub for 5 Kaggle-hosted sources, pyreadstat for the PISA 2015 .sav
38
+ # files, openpyxl for the Taiwan .xlsx files. They are optional rather than
39
+ # required because pyreadstat needs the system-level libreadstat, which would
40
+ # otherwise be imposed on every install for the sake of 44 datasets.
41
+ # pyreadstat also needs libreadstat present on the system, e.g.
42
+ # Debian/Ubuntu: apt-get install libreadstat-dev
43
+ # macOS: brew install readstat
44
+ [project.optional-dependencies]
45
+ full = [
46
+ "kagglehub>=0.1",
47
+ "openpyxl>=3.1",
48
+ "pyreadstat>=1.2",
49
+ ]
50
+
36
51
  [project.scripts]
37
52
  brf = "brf.cli:main"
38
53
 
39
54
  [project.urls]
40
- Homepage = "https://github.com/zhanglizhuo/BenchmarkReliability"
41
- Repository = "https://github.com/zhanglizhuo/BenchmarkReliability"
55
+ Homepage = "https://github.com/zhanglizhuo/BRFPackage"
56
+ Repository = "https://github.com/zhanglizhuo/BRFPackage"
42
57
 
43
58
  [tool.setuptools]
44
59
  license-files = []
45
60
 
46
61
  [tool.setuptools.packages.find]
47
62
  where = ["src"]
63
+ include = ["brf", "brf.metrics", "brf.phase", "brf.registry", "brf.registry.sources", "brf.report"]
48
64
 
49
65
  [tool.setuptools.package-data]
50
- "brf.registry" = ["manifest.yaml"]
66
+ "brf.registry" = ["manifest.yaml", "registry_v2.1.json", "prepare_hashes.json"]
67
+
68
+ [tool.setuptools.exclude-package-data]
69
+ "brf.registry" = ["cache/*", "cache/**/*"]
@@ -2,15 +2,16 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="benchmark-reliability",
5
- version="0.2.1",
5
+ version="0.3.0",
6
6
  packages=find_packages(where="src"),
7
7
  package_dir={"": "src"},
8
8
  package_data={
9
9
  "brf.registry": ["manifest.yaml"],
10
10
  },
11
11
  install_requires=[
12
- "numpy>=1.18",
13
- "scikit-learn>=0.24",
12
+ "numpy>=1.21",
13
+ "scikit-learn>=1.0",
14
+ "matplotlib>=3.5",
14
15
  "pandas>=1.1",
15
16
  "scipy>=1.5",
16
17
  "openml>=0.12",
@@ -1,11 +1,11 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: benchmark-reliability
3
- Version: 0.2.1
3
+ Version: 0.3.1
4
4
  Summary: Benchmark Reliability Framework (BRF) - dataset-level reliability auditing with built-in benchmark registry
5
5
  Author-email: zhanglizhuo <zhanglizhuo@gmail.com>
6
6
  License: MIT
7
- Project-URL: Homepage, https://github.com/zhanglizhuo/BenchmarkReliability
8
- Project-URL: Repository, https://github.com/zhanglizhuo/BenchmarkReliability
7
+ Project-URL: Homepage, https://github.com/zhanglizhuo/BRFPackage
8
+ Project-URL: Repository, https://github.com/zhanglizhuo/BRFPackage
9
9
  Keywords: benchmark reliability,dataset auditing,educational AI,machine learning,registry
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: License :: OSI Approved :: MIT License
@@ -24,6 +24,10 @@ Requires-Dist: matplotlib>=3.5
24
24
  Requires-Dist: pandas>=1.1
25
25
  Requires-Dist: scipy>=1.5
26
26
  Requires-Dist: openml>=0.12
27
+ Provides-Extra: full
28
+ Requires-Dist: kagglehub>=0.1; extra == "full"
29
+ Requires-Dist: openpyxl>=3.1; extra == "full"
30
+ Requires-Dist: pyreadstat>=1.2; extra == "full"
27
31
 
28
32
  # benchmark-reliability
29
33
 
@@ -65,9 +69,9 @@ print(analyzer.diagnose()["summary"])
65
69
  for dim, issue in analyzer.diagnose()["details"].items():
66
70
  print(f" {dim}: {issue}")
67
71
 
68
- # Percentile rank against 25 audited benchmarks
72
+ # Percentile rank against the 51 benchmarks in the BRF Registry (v2.1 reference)
69
73
  print(analyzer.rank())
70
- # {'S_percentile': 16.0, 'E_percentile': 36.0, ...}
74
+ # {'S_percentile': 17.6, 'E_percentile': 27.5, 'reference': 'BRF Registry v2.1 (51 benchmarks)'}
71
75
 
72
76
  # One-paragraph recommendation
73
77
  print(analyzer.recommend())
@@ -77,7 +81,7 @@ print(analyzer.recommend())
77
81
 
78
82
  ```bash
79
83
  $ brf registry list
80
- BRF Registry -- 16 datasets
84
+ BRF Registry
81
85
 
82
86
  assistments ASSISTments 2009-2010 N= 3729 G= 124
83
87
  college_scorecard US College Scorecard N= 7804 G= 59
@@ -95,7 +99,7 @@ BRF Audit: Teaching Assistant Evaluation (tae)
95
99
  ### Download and verify all datasets
96
100
 
97
101
  ```bash
98
- $ brf registry sync # download + SHA-256 verify all 16 datasets
102
+ $ brf registry sync # download + SHA-256 verify all
99
103
  $ brf registry info oulad
100
104
  name: oulad
101
105
  display_name: Open University Learning Analytics Dataset
@@ -122,7 +126,7 @@ communication shorthand only --- **the signal is in the continuous values**.
122
126
 
123
127
  Use `analyzer.diagnose()` for per-dimension explanations and actionable
124
128
  recommendations, or `analyzer.rank()` to see percentile scores against
125
- the 25 benchmarks in the BRF Registry.
129
+ the 51 benchmarks in the BRF Registry (v2.1 reference).
126
130
 
127
131
  ## CLI Reference
128
132
 
@@ -152,8 +156,8 @@ To cite the BRF framework and package (JOSS paper forthcoming):
152
156
  @software{zhang2026brf,
153
157
  author = {Lizhuo Zhang},
154
158
  title = {benchmark-reliability: Benchmark Reliability Framework},
155
- url = {https://github.com/zhanglizhuo/BenchmarkReliability},
156
- version = {0.1.5},
159
+ url = {https://github.com/zhanglizhuo/BRFPackage},
160
+ version = {0.3.0},
157
161
  year = {2026},
158
162
  }
159
163
  ```
@@ -162,7 +166,7 @@ The behavior audit protocol is described in:
162
166
 
163
167
  > Zhang, L. *BehaviorAudit: a four-dimension protocol for auditing
164
168
  > benchmark reliability under group-aware evaluation.*
165
- > Scientific Reports (under review).
169
+ > Scientific Reports (2026). https://doi.org/10.1038/s41598-026-69629-6
166
170
 
167
171
  ## Related Work
168
172
 
@@ -1,3 +1,4 @@
1
+ MANIFEST.in
1
2
  README.md
2
3
  pyproject.toml
3
4
  setup.py
@@ -22,27 +23,62 @@ src/brf/phase/visualization.py
22
23
  src/brf/registry/__init__.py
23
24
  src/brf/registry/cli.py
24
25
  src/brf/registry/manifest.yaml
26
+ src/brf/registry/prepare_hashes.json
27
+ src/brf/registry/registry_v2.1.json
25
28
  src/brf/registry/verify.py
26
29
  src/brf/registry/sources/__init__.py
30
+ src/brf/registry/sources/abalone.py
31
+ src/brf/registry/sources/air_quality_uci.py
27
32
  src/brf/registry/sources/assistments.py
33
+ src/brf/registry/sources/auto_mpg.py
34
+ src/brf/registry/sources/boston_housing.py
35
+ src/brf/registry/sources/climate_weather.py
28
36
  src/brf/registry/sources/college_scorecard.py
29
37
  src/brf/registry/sources/colleges_aaup.py
30
38
  src/brf/registry/sources/colleges_usnews.py
39
+ src/brf/registry/sources/cpu_act.py
40
+ src/brf/registry/sources/credit_card.py
41
+ src/brf/registry/sources/cross_domain_batch.py
42
+ src/brf/registry/sources/customer_churn.py
43
+ src/brf/registry/sources/electricity.py
44
+ src/brf/registry/sources/energy_building.py
45
+ src/brf/registry/sources/energy_efficiency.py
31
46
  src/brf/registry/sources/entrance_exam.py
47
+ src/brf/registry/sources/external_validation.py
48
+ src/brf/registry/sources/german_credit.py
32
49
  src/brf/registry/sources/higher_ed.py
50
+ src/brf/registry/sources/kaggle_students_performance.py
51
+ src/brf/registry/sources/kdd_cup_2010.py
52
+ src/brf/registry/sources/law_school.py
33
53
  src/brf/registry/sources/mathe.py
34
54
  src/brf/registry/sources/mm_tba.py
55
+ src/brf/registry/sources/nursery.py
35
56
  src/brf/registry/sources/oli.py
57
+ src/brf/registry/sources/olympics.py
36
58
  src/brf/registry/sources/oulad.py
59
+ src/brf/registry/sources/pisa2015.py
60
+ src/brf/registry/sources/pollution.py
61
+ src/brf/registry/sources/real_estate.py
62
+ src/brf/registry/sources/seoul_bike.py
63
+ src/brf/registry/sources/student_absences.py
37
64
  src/brf/registry/sources/student_depression.py
38
65
  src/brf/registry/sources/student_dropout.py
66
+ src/brf/registry/sources/student_health.py
67
+ src/brf/registry/sources/students_exam_scores.py
39
68
  src/brf/registry/sources/tae.py
40
69
  src/brf/registry/sources/turkiye.py
41
70
  src/brf/registry/sources/uci_student.py
71
+ src/brf/registry/sources/uci_student_math.py
72
+ src/brf/registry/sources/wine_quality.py
42
73
  src/brf/registry/sources/xapi_edu.py
74
+ src/brf/registry/sources/yacht.py
43
75
  src/brf/report/__init__.py
44
76
  src/brf/report/json_export.py
45
77
  src/brf/report/latex_export.py
46
78
  tests/test_analyzer.py
47
79
  tests/test_metrics.py
48
- tests/test_phase.py
80
+ tests/test_phase.py
81
+ verification/README.md
82
+ verification/prepare_verify_py313.txt
83
+ verification/prepare_verify_py38.txt
84
+ verification/prepare_verify_py38_legacy.txt
@@ -4,3 +4,8 @@ matplotlib>=3.5
4
4
  pandas>=1.1
5
5
  scipy>=1.5
6
6
  openml>=0.12
7
+
8
+ [full]
9
+ kagglehub>=0.1
10
+ openpyxl>=3.1
11
+ pyreadstat>=1.2
@@ -1,6 +1,8 @@
1
1
  from .analyzer import BRFAnalyzer
2
2
 
3
- __all__ = ["BRFAnalyzer"]
3
+ __version__ = "0.3.1"
4
+
5
+ __all__ = ["BRFAnalyzer", "__version__"]
4
6
 
5
7
  # Registry is lazily imported to avoid circular dependencies
6
8
  # Use: from brf.registry import REGISTRY_SOURCES, list_sources
@@ -27,7 +27,7 @@ class BRFAnalyzer:
27
27
  raise ValueError("n_splits must be >= 2")
28
28
  self.n_splits = n_splits
29
29
  self.n_permutations = n_permutations
30
- self.model = model or Ridge(alpha=1.0)
30
+ self.model = model if model is not None else Ridge(alpha=1.0)
31
31
  self.seed = seed
32
32
  self.scale = scale
33
33
 
@@ -251,10 +251,10 @@ class BRFAnalyzer:
251
251
  }
252
252
 
253
253
  def rank(self) -> Dict[str, float]:
254
- """Percentile rank of S and E against the BRF Registry v1.5 benchmarks.
254
+ """Percentile rank of S and E against the BRF Registry v2.1 benchmarks.
255
255
 
256
256
  Returns percentiles (0-100) indicating where this dataset's S and E
257
- fall relative to the 25 audited benchmarks. Requires the registry
257
+ fall relative to the audited benchmarks in the bundled Registry reference (v2.1). Requires
258
258
  data to be accessible.
259
259
  """
260
260
  if not self._fitted:
@@ -273,7 +273,7 @@ class BRFAnalyzer:
273
273
  return {
274
274
  "S_percentile": round(pctile(s_vals, self.S), 1),
275
275
  "E_percentile": round(pctile(e_vals, self.E), 1),
276
- "reference": f"BRF Registry v1.5 ({len(s_vals)} benchmarks)",
276
+ "reference": f"BRF Registry v2.1 ({len(s_vals)} benchmarks)",
277
277
  }
278
278
 
279
279
  def recommend(self, n_samples: Optional[int] = None,
@@ -316,12 +316,9 @@ class BRFAnalyzer:
316
316
  """Load Registry reference data for percentile ranking."""
317
317
  if self._registry_ref is not None:
318
318
  return self._registry_ref
319
- # Search for registry_v1.5.json in known locations
319
+ # Bundled registry reference (ships with the package at brf/registry/)
320
320
  candidates = [
321
- Path(__file__).parent.parent.parent.parent
322
- / "BRFRegistry" / "results" / "registry_v1.5.json",
323
- Path(__file__).parent.parent.parent
324
- / "BRFRegistry" / "results" / "registry_v1.5.json",
321
+ Path(__file__).parent / "registry" / "registry_v2.1.json",
325
322
  ]
326
323
  for p in candidates:
327
324
  if p.exists():
@@ -1,38 +1,11 @@
1
- """BRF Registry CLI -- download, verify, and prepare datasets.
2
-
3
- Usage::
4
-
5
- # List all datasets
6
- python -m registry.cli list
7
-
8
- # Download a dataset (with verification)
9
- python -m registry.cli download tae
10
- python -m registry.cli download --all
11
-
12
- # Verify checksums
13
- python -m registry.cli verify tae
14
- python -m registry.cli verify --all
15
-
16
- # Sync (download + verify all)
17
- python -m registry.cli sync
18
-
19
- # Show metadata
20
- python -m registry.cli info tae
21
- """
22
-
23
- from __future__ import annotations
24
-
25
1
  import argparse
26
2
  from pathlib import Path
27
3
 
28
- import sys
29
-
30
4
  from .sources import REGISTRY_SOURCES, list_sources
31
5
  from .verify import verify_dataset, verify_all
32
6
 
33
7
 
34
8
  def cmd_list():
35
- """List all registered datasets."""
36
9
  print(f"BRF Registry -- {len(list_sources())} datasets\n")
37
10
  for key in list_sources():
38
11
  source = REGISTRY_SOURCES[key]
@@ -40,16 +13,11 @@ def cmd_list():
40
13
  f"N={source.n_samples:>5d} G={source.n_groups:>4d}")
41
14
 
42
15
 
43
- def cmd_download(key: str = None, all_: bool = False):
44
- """Download dataset(s)."""
45
- if all_:
46
- keys = list_sources()
47
- elif key:
48
- keys = [key]
49
- else:
16
+ def cmd_download(key=None, all_=False):
17
+ keys = list_sources() if all_ else ([key] if key else [])
18
+ if not keys:
50
19
  print("Usage: download <key> or download --all")
51
20
  return
52
-
53
21
  for k in keys:
54
22
  source = REGISTRY_SOURCES.get(k)
55
23
  if source is None:
@@ -59,17 +27,14 @@ def cmd_download(key: str = None, all_: bool = False):
59
27
  try:
60
28
  path = source.download()
61
29
  print(f" -> {path}")
62
- # Verify after download
63
- if source.sha256:
64
- ok = source._check_sha256(path) if isinstance(path, Path) else True
65
- if not ok:
30
+ if source.sha256 and isinstance(path, Path):
31
+ if not source._check_sha256(path):
66
32
  print(f" WARNING: SHA-256 mismatch!")
67
33
  except Exception as e:
68
34
  print(f" FAILED: {e}")
69
35
 
70
36
 
71
- def cmd_verify(key: str = None, all_: bool = False):
72
- """Verify dataset checksums."""
37
+ def cmd_verify(key=None, all_=False):
73
38
  if all_:
74
39
  verify_all()
75
40
  elif key:
@@ -79,7 +44,6 @@ def cmd_verify(key: str = None, all_: bool = False):
79
44
 
80
45
 
81
46
  def cmd_sync():
82
- """Download + verify all datasets."""
83
47
  print("Syncing all datasets...")
84
48
  for key in list_sources():
85
49
  source = REGISTRY_SOURCES[key]
@@ -87,45 +51,38 @@ def cmd_sync():
87
51
  try:
88
52
  path = source.download()
89
53
  print(f" Downloaded to {path}")
90
- if source.sha256:
91
- ok = source._check_sha256(path) if isinstance(path, Path) else True
54
+ if source.sha256 and isinstance(path, Path):
55
+ ok = source._check_sha256(path)
92
56
  print(f" Checksum: {'OK' if ok else 'FAIL'}")
93
57
  except Exception as e:
94
58
  print(f" FAILED: {e}")
95
59
 
96
60
 
97
- def cmd_info(key: str):
98
- """Show dataset metadata."""
61
+ def cmd_info(key):
99
62
  source = REGISTRY_SOURCES.get(key)
100
63
  if source is None:
101
64
  print(f"Unknown dataset: {key}")
102
65
  return
103
- meta = source.metadata()
104
- for k, v in meta.items():
66
+ for k, v in source.metadata().items():
105
67
  print(f" {k}: {v}")
106
68
 
107
69
 
108
70
  def main():
109
71
  parser = argparse.ArgumentParser(description="BRF Registry CLI")
110
- sub = parser.add_subparsers(dest="command", help="Command")
111
-
112
- sub.add_parser("list", help="List all datasets")
113
-
114
- dl = sub.add_parser("download", help="Download dataset(s)")
115
- dl.add_argument("key", nargs="?", help="Dataset key")
116
- dl.add_argument("--all", action="store_true", help="Download all")
117
-
118
- vf = sub.add_parser("verify", help="Verify checksums")
119
- vf.add_argument("key", nargs="?", help="Dataset key")
120
- vf.add_argument("--all", action="store_true", help="Verify all")
121
-
122
- sub.add_parser("sync", help="Download + verify all datasets")
123
-
124
- info = sub.add_parser("info", help="Show dataset metadata")
125
- info.add_argument("key", help="Dataset key")
72
+ sub = parser.add_subparsers(dest="command")
73
+
74
+ sub.add_parser("list")
75
+ dl = sub.add_parser("download")
76
+ dl.add_argument("key", nargs="?")
77
+ dl.add_argument("--all", action="store_true")
78
+ vf = sub.add_parser("verify")
79
+ vf.add_argument("key", nargs="?")
80
+ vf.add_argument("--all", action="store_true")
81
+ sub.add_parser("sync")
82
+ info = sub.add_parser("info")
83
+ info.add_argument("key")
126
84
 
127
85
  args = parser.parse_args()
128
-
129
86
  if args.command == "list":
130
87
  cmd_list()
131
88
  elif args.command == "download":
@@ -0,0 +1,66 @@
1
+ brf_results:
2
+ fragile: 0
3
+ reliable: 42
4
+ void: 9
5
+ datasets:
6
+ - abalone
7
+ - air_quality
8
+ - airfoil
9
+ - assistments
10
+ - auto_mpg
11
+ - bike_sharing
12
+ - boston_housing
13
+ - breast_cancer
14
+ - california_housing
15
+ - ccpp
16
+ - college_scorecard
17
+ - colleges_aaup
18
+ - colleges_usnews
19
+ - concrete
20
+ - cpu_act
21
+ - credit_card
22
+ - customer_churn
23
+ - diabetes
24
+ - energy_building
25
+ - energy_efficiency
26
+ - entrance_exam
27
+ - german_credit
28
+ - higher_ed
29
+ - kaggle_students_performance
30
+ - kdd_cup_2010
31
+ - law_school
32
+ - linnerud
33
+ - mathe
34
+ - mm_tba
35
+ - nursery
36
+ - oli
37
+ - oulad
38
+ - pisa2015
39
+ - pollution
40
+ - real_estate
41
+ - climate_weather
42
+ - seoul_bike
43
+ - olympics
44
+ - student_absences
45
+ - student_depression
46
+ - student_dropout
47
+ - student_health
48
+ - students_exam_scores
49
+ - electricity
50
+ - tae
51
+ - turkiye
52
+ - uci_student
53
+ - uci_student_math
54
+ - wine_quality
55
+ - xapi_edu
56
+ - yacht
57
+ description: 'Curated collection of group-aware benchmark datasets across education,
58
+ engineering, transportation, energy, healthcare, finance, environmental, business,
59
+ sports, and fitness domains with standardized metadata, reproducibility scripts,
60
+ and BRF (Benchmark Reliability Framework) audit results. v2.1 expands from 35 to
61
+ 51 datasets. All source modules are self-contained.
62
+
63
+ '
64
+ release_date: '2026-09-10'
65
+ total_datasets: 51
66
+ version: '2.1'