benchmark-reliability 0.3.0__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 (86) hide show
  1. benchmark_reliability-0.3.1/MANIFEST.in +13 -0
  2. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/PKG-INFO +5 -1
  3. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/pyproject.toml +17 -2
  4. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/PKG-INFO +5 -1
  5. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/SOURCES.txt +7 -1
  6. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/requires.txt +5 -0
  7. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/__init__.py +1 -1
  8. benchmark_reliability-0.3.1/src/brf/registry/prepare_hashes.json +53 -0
  9. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/__init__.py +31 -7
  10. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/kaggle_students_performance.py +8 -1
  11. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/kdd_cup_2010.py +3 -0
  12. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/mm_tba.py +8 -1
  13. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/pisa2015.py +8 -1
  14. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/student_absences.py +8 -1
  15. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/student_dropout.py +4 -0
  16. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/student_health.py +8 -1
  17. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/students_exam_scores.py +8 -1
  18. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/xapi_edu.py +8 -1
  19. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/verify.py +30 -4
  20. benchmark_reliability-0.3.1/verification/README.md +55 -0
  21. benchmark_reliability-0.3.1/verification/prepare_verify_py313.txt +55 -0
  22. benchmark_reliability-0.3.1/verification/prepare_verify_py38.txt +55 -0
  23. benchmark_reliability-0.3.1/verification/prepare_verify_py38_legacy.txt +112 -0
  24. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/README.md +0 -0
  25. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/setup.cfg +0 -0
  26. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/setup.py +0 -0
  27. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/dependency_links.txt +0 -0
  28. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/entry_points.txt +0 -0
  29. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/benchmark_reliability.egg-info/top_level.txt +0 -0
  30. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/analyzer.py +0 -0
  31. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/cli.py +0 -0
  32. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/metrics/__init__.py +0 -0
  33. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/metrics/baseline_gap.py +0 -0
  34. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/metrics/instability.py +0 -0
  35. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/metrics/metadata.py +0 -0
  36. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/metrics/null_test.py +0 -0
  37. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/phase/__init__.py +0 -0
  38. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/phase/classifier.py +0 -0
  39. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/phase/embedding.py +0 -0
  40. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/phase/visualization.py +0 -0
  41. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/__init__.py +0 -0
  42. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/cli.py +0 -0
  43. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/manifest.yaml +0 -0
  44. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/registry_v2.1.json +0 -0
  45. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/abalone.py +0 -0
  46. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/air_quality_uci.py +0 -0
  47. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/assistments.py +0 -0
  48. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/auto_mpg.py +0 -0
  49. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/boston_housing.py +0 -0
  50. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/climate_weather.py +0 -0
  51. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/college_scorecard.py +0 -0
  52. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/colleges_aaup.py +0 -0
  53. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/colleges_usnews.py +0 -0
  54. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/cpu_act.py +0 -0
  55. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/credit_card.py +0 -0
  56. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/cross_domain_batch.py +0 -0
  57. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/customer_churn.py +0 -0
  58. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/electricity.py +0 -0
  59. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/energy_building.py +0 -0
  60. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/energy_efficiency.py +0 -0
  61. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/entrance_exam.py +0 -0
  62. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/external_validation.py +0 -0
  63. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/german_credit.py +0 -0
  64. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/higher_ed.py +0 -0
  65. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/law_school.py +0 -0
  66. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/mathe.py +0 -0
  67. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/nursery.py +0 -0
  68. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/oli.py +0 -0
  69. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/olympics.py +0 -0
  70. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/oulad.py +0 -0
  71. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/pollution.py +0 -0
  72. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/real_estate.py +0 -0
  73. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/seoul_bike.py +0 -0
  74. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/student_depression.py +0 -0
  75. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/tae.py +0 -0
  76. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/turkiye.py +0 -0
  77. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/uci_student.py +0 -0
  78. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/uci_student_math.py +0 -0
  79. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/wine_quality.py +0 -0
  80. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/registry/sources/yacht.py +0 -0
  81. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/report/__init__.py +0 -0
  82. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/report/json_export.py +0 -0
  83. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/src/brf/report/latex_export.py +0 -0
  84. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/tests/test_analyzer.py +0 -0
  85. {benchmark_reliability-0.3.0 → benchmark_reliability-0.3.1}/tests/test_metrics.py +0 -0
  86. {benchmark_reliability-0.3.0 → 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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: benchmark-reliability
3
- Version: 0.3.0
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
@@ -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
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "benchmark-reliability"
7
- version = "0.3.0"
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,6 +33,21 @@ 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
 
@@ -48,7 +63,7 @@ where = ["src"]
48
63
  include = ["brf", "brf.metrics", "brf.phase", "brf.registry", "brf.registry.sources", "brf.report"]
49
64
 
50
65
  [tool.setuptools.package-data]
51
- "brf.registry" = ["manifest.yaml", "registry_v2.1.json"]
66
+ "brf.registry" = ["manifest.yaml", "registry_v2.1.json", "prepare_hashes.json"]
52
67
 
53
68
  [tool.setuptools.exclude-package-data]
54
69
  "brf.registry" = ["cache/*", "cache/**/*"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: benchmark-reliability
3
- Version: 0.3.0
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
@@ -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
 
@@ -1,3 +1,4 @@
1
+ MANIFEST.in
1
2
  README.md
2
3
  pyproject.toml
3
4
  setup.py
@@ -22,6 +23,7 @@ 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
25
27
  src/brf/registry/registry_v2.1.json
26
28
  src/brf/registry/verify.py
27
29
  src/brf/registry/sources/__init__.py
@@ -75,4 +77,8 @@ src/brf/report/json_export.py
75
77
  src/brf/report/latex_export.py
76
78
  tests/test_analyzer.py
77
79
  tests/test_metrics.py
78
- 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,6 @@
1
1
  from .analyzer import BRFAnalyzer
2
2
 
3
- __version__ = "0.3.0"
3
+ __version__ = "0.3.1"
4
4
 
5
5
  __all__ = ["BRFAnalyzer", "__version__"]
6
6
 
@@ -0,0 +1,53 @@
1
+ {
2
+ "abalone": "3f7c6c66fdec85a6b3f2793bdad83bb0620ade38c00b9ac384cd7292b91da970",
3
+ "air_quality": "4ee091d7c6cd29c22aca75bd181ba12d4fceaea5ee8882931703727485e5d854",
4
+ "airfoil": "48bcb721e3e8fce370b6ad80ba3ae1735eaee511e1da68e78a48c43b1e9a4701",
5
+ "assistments": "9bd474c2e85e0778c6b7e669d03976ee6d5832307ade272d94767f85f636fb11",
6
+ "auto_mpg": "a8b5a265bf2aada37c94fe3385beed198d875732ede5d4d47c888579ff8b76e7",
7
+ "bike_sharing": "6759530a726ce5bb9712a52317120e273c81a2418adad82723505ecdf20949ec",
8
+ "boston_housing": "1626353c69b1b1bc79bc74a2fff33b644c433b9565c281a528622d8b20ac64c2",
9
+ "breast_cancer": "2b89a1181eb63e05dc149950986a466a98b4fa1814e1bb4b1feaa12b40fad485",
10
+ "california_housing": "e8ab522c9d4aba60bda5eb9ac90291d46725fdbc0368dd5f4d115b807b718e9c",
11
+ "ccpp": "84f5f83018d7030fa0a088c7f3b3fc6c8535be21b9cffb67c7a92ed0c0718ffd",
12
+ "climate_weather": "f14ba7b89eda5fea2871b67485fde7188002b9047d63f17d55e6420beca61a8c",
13
+ "college_scorecard": "2de9c254016f6d939a5bd58fc53f7d31dd4d5dea64dec25d36847bb3ebca5762",
14
+ "colleges_aaup": "a98f7f115c3fc70742c222180f2f92d56735bb42321f4a213b109482dca0422e",
15
+ "colleges_usnews": "cae3862477696e189ac044e36029d464bc4800e1f1686f0d6003573c29dc94c5",
16
+ "concrete": "3c4b71924aa1f5b7f80da0fd170fa741fe9cd671cee93294605988be620f325b",
17
+ "cpu_act": "12e266a8e018e51f119c188eaeb626aa82aa732f83a2a7ba0909faf5df9eea3d",
18
+ "credit_card": "035c55b1ffe395caf589eaea48be15c178e68c39464ccd385c268f41ba00706f",
19
+ "customer_churn": "53e26607e6d3e85f22b1469219cf90cdac066cfcd752f28b832d18a8305a38e5",
20
+ "diabetes": "e471bce7f98d55bc2f8bf13e93f0c924550f0c630bffbd48558e277d3e22c930",
21
+ "electricity": "b344eff67643623a8a9692fb4b764e1912c7a8c947d30105ed7046ce62d422ac",
22
+ "energy_building": "c045e11976d5c01f531afdf3f042b913054661bf5123361cfeaacedb3f709a71",
23
+ "energy_efficiency": "3d75f02739b5e4f360a29bccc2c19ab0206f96979f7dbf05a19f76fd1455e02f",
24
+ "entrance_exam": "43bca05374772861b4cf6eefa46f629c4751ab2374f647ef20177ed3ac3313ff",
25
+ "german_credit": "185e97d0640048b765abc03dbd21c5fba8917a8bb1f295000dbd7ac7e484df26",
26
+ "higher_ed": "59be6940c05cd59bfc651f7af74dee83e11b506a9f7052f88516806f804a1944",
27
+ "kaggle_students_performance": "2076cb97e81c74e97af541879064fadf8eb69de9b5640e0d4abde9e1053d5dfa",
28
+ "kdd_cup_2010": "b7d8e2aef91cbc6a3e7f538c8fa2ab47281ac76c80bbb31c17ec05391557bb9c",
29
+ "law_school": "b1f33959f2f4a3620c983a46de72027307ecdfa2f391c9b0d6dc526f65b8c14b",
30
+ "linnerud": "f00cf92d24f6f7fc1d8acc780c8503c5d6346186f152afcb9bdb6c0611fbe502",
31
+ "mathe": "ac788168060595a034c22849561c28567f54727b713bdcc40c0ed8232440b8e3",
32
+ "mm_tba": "c530bd64a241ee4012a336dad710cc0b3ada4171817a02e5f7efeeb2a20e0df9",
33
+ "nursery": "afd19fc4496c390437c76818f2d4e54d8cb46dd019cdd053f46058c6070e49e2",
34
+ "oli": "a7d2ccf40aaf65ab022c6bfef458461811ee1e66d100a40a3287f01ee9313780",
35
+ "olympics": "4429c726958ccc094104f1caeefa39a259181a3fbb5bd65d7aba49f55dcfa95d",
36
+ "oulad": "9aa535d041c9f39091e7e9f5220b6d51bc1f3a42bc27b0086c66b4cf059f61b3",
37
+ "pisa2015": "1a0e76d0cd8dcf070c41415efc6f0fa6e293539353566182d594ceb4c306e091",
38
+ "pollution": "5768d5b4509b398f17f90d4da5e46b34b22a5b19ab4ab112feb667be46d7dd07",
39
+ "real_estate": "1c67624e20a3948cb76612a4c96755b3b2f48d743c3891881ee2b42ebea25bb6",
40
+ "seoul_bike": "03d8e2b26f08a21aa737c901b5dddef9a11649eb0b596c920b138bfa564a1938",
41
+ "student_absences": "abf4c2a41c532386182ddc2962c03f86b00dfa4eaceb2c0b2e1450526a381084",
42
+ "student_depression": "f6f0f65bebafaea796404e79a90d7c8ff2b81ecfacbf0655fd8cd644e9fecb9d",
43
+ "student_dropout": "c01207db62dc1ac9f098243fda359274447159ebab08ec6dccfda57645fa4ef5",
44
+ "student_health": "0fa081e63bb3f259fb4c0a7cf74a2cf5a9f136ecf9c221421d7bc1e4ed72330b",
45
+ "students_exam_scores": "336969cba9ef0bb7152f49385e27b5cf1d27b88978482faaa305db21e3a3a1ca",
46
+ "tae": "356cb12fda2ff5525ce4967d39a992c1bf2b41d5df98dea056d0a815ebee9a0a",
47
+ "turkiye": "fef1729ce8edf310ba326531a065f2912abea5884087d817ca5c47dea828d0ff",
48
+ "uci_student": "7f5a7696641b35866db2ece4c04524f1090408f519abdd490fc34279a6fc55e6",
49
+ "uci_student_math": "2cbf9c120016bb28c88e2e1ac05da4d40de25490427659e990d0204df2a06354",
50
+ "wine_quality": "e26239cad8e85992ff400ec40f7cd4447d206512bd335caa7900a22cbc51e424",
51
+ "xapi_edu": "6470f36422d4ba1e1a4e431bc7fd0c5d589902586d3043d6ce7b16ce9eacfe4e",
52
+ "yacht": "527653450af99bdbe85ce23f493b2faf9f207bef2b9be26931b0c6bfa8c105ef"
53
+ }
@@ -95,15 +95,39 @@ class DatasetSource(ABC):
95
95
  def prepare(self):
96
96
  """Return (X, y, groups, metadata_card)."""
97
97
 
98
- def _compute_prepare_sha256(self, X, y, groups):
99
- import io
98
+ def _canonical_array_bytes(arr):
99
+ """Return (dtype_tag, payload) for an array in an interpreter-stable form."""
100
+ a = np.asarray(arr)
101
+ if a.dtype.kind in "OUS":
102
+ return "str", "\n".join("" if v is None else str(v) for v in a.ravel()).encode("utf-8")
103
+ kind = {"i": "int64", "u": "uint64", "b": "bool",
104
+ "f": "float64", "c": "complex128"}.get(a.dtype.kind)
105
+ if kind is None:
106
+ raise TypeError(f"unsupported dtype kind {a.dtype.kind!r} for canonical hashing")
107
+ return kind, np.ascontiguousarray(a, dtype=kind).tobytes()
108
+
109
+
110
+ def compute_prepare_sha256(X, y, groups):
111
+ """SHA-256 over a canonical encoding of the prepared data.
112
+
113
+ This hashes the data, not a serialisation of it. Hashing the bytes that
114
+ numpy.save() emits is not equivalent: object-dtype arrays are pickled, and
115
+ that byte stream is not stable across interpreters. Measured on this
116
+ registry, identical data hashed differently on CPython 3.8 and 3.13 for 26
117
+ of 51 datasets, because the pickled form of the object-dtype `groups` array
118
+ differed in length (8663 vs 8646 bytes for abalone) while its values were
119
+ element-for-element equal.
120
+
121
+ Each array is therefore reduced to an explicitly declared dtype, its shape,
122
+ and its raw bytes, so the digest depends only on the values.
123
+ """
100
124
  sha = hashlib.sha256()
101
- for arr in (X, y, groups):
102
- buf = io.BytesIO()
103
- np.save(buf, np.asarray(arr))
104
- sha.update(buf.getvalue())
125
+ for name, arr in (("X", X), ("y", y), ("groups", groups)):
126
+ dtype_tag, payload = _canonical_array_bytes(arr)
127
+ sha.update(f"{name}|{dtype_tag}|{np.asarray(arr).shape}|".encode("utf-8"))
128
+ sha.update(payload)
129
+ sha.update(b"\x00")
105
130
  return sha.hexdigest()
106
-
107
131
  def verify_prepare(self):
108
132
  if not self.prepare_sha256:
109
133
  return True
@@ -19,7 +19,14 @@ class KaggleStudentsPerformanceSource(DatasetSource):
19
19
  grouping_description = "Race/Ethnicity (5 groups: A-E)"
20
20
 
21
21
  def download(self):
22
- import kagglehub
22
+ try:
23
+ import kagglehub
24
+ except ImportError as exc:
25
+ raise ImportError(
26
+ "kagglehub is required for this dataset but is not installed. "
27
+ "Install the optional extra with: "
28
+ "pip install 'benchmark-reliability[full]'"
29
+ ) from exc
23
30
  import shutil
24
31
  dest_dir = self._ensure_cache_dir()
25
32
  csv_path = dest_dir / "StudentsPerformance.csv"
@@ -26,6 +26,9 @@ class KDDCup2010Source(DatasetSource):
26
26
  train_file = dest_dir / "algebra_2005_2006_train.txt"
27
27
  if train_file.exists():
28
28
  return train_file
29
+ # A prior download extracts into a subdir; reuse it offline.
30
+ for cand in dest_dir.rglob("algebra_2005_2006_train.txt"):
31
+ return cand
29
32
 
30
33
  urls = [self.source_url] + self.fallback_urls
31
34
  for url in urls:
@@ -49,7 +49,14 @@ class MMTBASource(DatasetSource):
49
49
  return dest_dir
50
50
 
51
51
  def prepare(self):
52
- import openpyxl
52
+ try:
53
+ import openpyxl
54
+ except ImportError as exc:
55
+ raise ImportError(
56
+ "openpyxl is required for this dataset but is not installed. "
57
+ "Install the optional extra with: "
58
+ "pip install 'benchmark-reliability[full]'"
59
+ ) from exc
53
60
 
54
61
  root = self.download()
55
62
  # Handle figshare zip structure: MM-TBA/MM-TBA/...
@@ -38,7 +38,14 @@ class PISA2015Source(DatasetSource):
38
38
  return sav_path
39
39
 
40
40
  def prepare(self):
41
- import pyreadstat
41
+ try:
42
+ import pyreadstat
43
+ except ImportError as exc:
44
+ raise ImportError(
45
+ "pyreadstat is required for this dataset but is not installed. "
46
+ "Install the optional extra with: "
47
+ "pip install 'benchmark-reliability[full]'"
48
+ ) from exc
42
49
  pvt_cols = [f"PV{i}SCIE" for i in range(1, 6)]
43
50
  usecols = ["CNT", "ESCS", "WEALTH", "HOMEPOS"] + pvt_cols
44
51
  df, _ = pyreadstat.read_sav(str(self.download()), usecols=usecols)
@@ -19,7 +19,14 @@ class StudentAbsencesSource(DatasetSource):
19
19
  grouping_description = "School (2: GP/MS)"
20
20
 
21
21
  def download(self):
22
- import kagglehub
22
+ try:
23
+ import kagglehub
24
+ except ImportError as exc:
25
+ raise ImportError(
26
+ "kagglehub is required for this dataset but is not installed. "
27
+ "Install the optional extra with: "
28
+ "pip install 'benchmark-reliability[full]'"
29
+ ) from exc
23
30
  dest_dir = self._ensure_cache_dir()
24
31
  csv_path = dest_dir / "student-mat.csv"
25
32
  if csv_path.exists():
@@ -24,6 +24,10 @@ class StudentDropoutSource(DatasetSource):
24
24
  csv_path = dest_dir / "student_dropout.csv"
25
25
  if csv_path.exists():
26
26
  return csv_path
27
+ # A prior download keeps the extracted csv under its original name
28
+ # (e.g. data.csv); reuse it offline instead of re-downloading.
29
+ for f in dest_dir.glob("**/*.csv"):
30
+ return f
27
31
  resp = urllib.request.urlopen(self.source_url, timeout=60)
28
32
  with zipfile.ZipFile(io.BytesIO(resp.read())) as z:
29
33
  z.extractall(str(dest_dir))
@@ -19,7 +19,14 @@ class StudentHealthSource(DatasetSource):
19
19
  sha256 = "3fb408fe4b66d4cdb90ad4ec5e3fb6de94ba662d0471a3d46c03da483069f76b"
20
20
 
21
21
  def download(self):
22
- import kagglehub
22
+ try:
23
+ import kagglehub
24
+ except ImportError as exc:
25
+ raise ImportError(
26
+ "kagglehub is required for this dataset but is not installed. "
27
+ "Install the optional extra with: "
28
+ "pip install 'benchmark-reliability[full]'"
29
+ ) from exc
23
30
  dest_dir = self._ensure_cache_dir()
24
31
  csv_path = dest_dir / "student-por.csv"
25
32
  if csv_path.exists():
@@ -25,7 +25,14 @@ class StudentsExamScoresSource(DatasetSource):
25
25
  return csv_path
26
26
 
27
27
 
28
- import kagglehub
28
+ try:
29
+ import kagglehub
30
+ except ImportError as exc:
31
+ raise ImportError(
32
+ "kagglehub is required for this dataset but is not installed. "
33
+ "Install the optional extra with: "
34
+ "pip install 'benchmark-reliability[full]'"
35
+ ) from exc
29
36
  path = Path(kagglehub.dataset_download("desalegngeb/students-exam-scores"))
30
37
  for f in path.glob("*.csv"):
31
38
  if "Original" in f.name:
@@ -26,7 +26,14 @@ class XAPIEduSource(DatasetSource):
26
26
 
27
27
  # Try Kaggle via kagglehub first
28
28
  try:
29
- import kagglehub
29
+ try:
30
+ import kagglehub
31
+ except ImportError as exc:
32
+ raise ImportError(
33
+ "kagglehub is required for this dataset but is not installed. "
34
+ "Install the optional extra with: "
35
+ "pip install 'benchmark-reliability[full]'"
36
+ ) from exc
30
37
  path = kagglehub.dataset_download("aljarah/xAPI-Edu-Data")
31
38
  import os
32
39
  for f in os.listdir(path):
@@ -12,12 +12,38 @@ from .sources import REGISTRY_SOURCES, list_sources
12
12
  _PREPARE_HASHES_PATH = Path(__file__).resolve().parent / "prepare_hashes.json"
13
13
 
14
14
 
15
+ def _canonical_array_bytes(arr):
16
+ """Return (dtype_tag, payload) for an array in an interpreter-stable form."""
17
+ a = np.asarray(arr)
18
+ if a.dtype.kind in "OUS":
19
+ return "str", "\n".join("" if v is None else str(v) for v in a.ravel()).encode("utf-8")
20
+ kind = {"i": "int64", "u": "uint64", "b": "bool",
21
+ "f": "float64", "c": "complex128"}.get(a.dtype.kind)
22
+ if kind is None:
23
+ raise TypeError(f"unsupported dtype kind {a.dtype.kind!r} for canonical hashing")
24
+ return kind, np.ascontiguousarray(a, dtype=kind).tobytes()
25
+
26
+
15
27
  def compute_prepare_sha256(X, y, groups):
28
+ """SHA-256 over a canonical encoding of the prepared data.
29
+
30
+ This hashes the data, not a serialisation of it. Hashing the bytes that
31
+ numpy.save() emits is not equivalent: object-dtype arrays are pickled, and
32
+ that byte stream is not stable across interpreters. Measured on this
33
+ registry, identical data hashed differently on CPython 3.8 and 3.13 for 26
34
+ of 51 datasets, because the pickled form of the object-dtype `groups` array
35
+ differed in length (8663 vs 8646 bytes for abalone) while its values were
36
+ element-for-element equal.
37
+
38
+ Each array is therefore reduced to an explicitly declared dtype, its shape,
39
+ and its raw bytes, so the digest depends only on the values.
40
+ """
16
41
  sha = hashlib.sha256()
17
- for arr in (X, y, groups):
18
- buf = io.BytesIO()
19
- np.save(buf, np.asarray(arr))
20
- sha.update(buf.getvalue())
42
+ for name, arr in (("X", X), ("y", y), ("groups", groups)):
43
+ dtype_tag, payload = _canonical_array_bytes(arr)
44
+ sha.update(f"{name}|{dtype_tag}|{np.asarray(arr).shape}|".encode("utf-8"))
45
+ sha.update(payload)
46
+ sha.update(b"\x00")
21
47
  return sha.hexdigest()
22
48
 
23
49
 
@@ -0,0 +1,55 @@
1
+ # Archived prepare-verification logs
2
+
3
+ Raw output of
4
+
5
+ ```
6
+ python scripts/compute_prepare_hashes.py --verify
7
+ ```
8
+
9
+ ## Current state (canonical content hash)
10
+
11
+ | log | interpreter | OK | MISMATCH | ERROR |
12
+ |---|---|---|---|---|
13
+ | `prepare_verify_py313.txt` | CPython 3.13.11 (numpy 2.4.4, pandas 2.3.3) | 51 | 0 | 0 |
14
+ | `prepare_verify_py38.txt` | CPython 3.8.20 (numpy 1.24.3, pandas 2.0.3) | 36 | 0 | 15 |
15
+
16
+ `MISMATCH` is 0 on both. The 15 errors on 3.8 are missing optional readers in
17
+ that deliberately minimal environment (9 `sklearn`, 3 `kagglehub`, and one each
18
+ of `scipy`, `pyreadstat`, `openpyxl`); 36 + 15 = 51. They are installation
19
+ state, not hash disagreement.
20
+
21
+ ## Why the legacy log exists
22
+
23
+ `prepare_verify_py38_legacy.txt` is the same command under the previous
24
+ implementation and shows `10 OK / 27 MISMATCH / 15 ERROR`. It is kept because it
25
+ is the evidence for the change that produced the current scheme.
26
+
27
+ `compute_prepare_sha256` used to hash the bytes `numpy.save()` emits. That is a
28
+ hash of a serialisation, not of the data. `groups` is an `object`-dtype array,
29
+ so `numpy.save` pickles it, and the pickled byte stream is not stable across
30
+ interpreters. For `abalone`, `X` and `y` were element-for-element equal across
31
+ 3.8 and 3.13 (`np.array_equal` `True`, max absolute difference `0.0`, same shape,
32
+ same `float64` dtype), yet the digests differed because the serialised `groups`
33
+ array was 8663 bytes on 3.8 and 8646 on 3.13 (`ec91fc24...` vs `98b59954...`).
34
+ The dtype and element type (`str`) matched on both sides and
35
+ `pickle.DEFAULT_PROTOCOL` was 4 on both, so the difference was in the encoding
36
+ rather than in protocol selection.
37
+
38
+ The function now reduces each array to an explicitly declared dtype, its shape,
39
+ and its raw bytes, so the digest depends on the values only.
40
+
41
+ ## Reproducing the 3.8 run
42
+
43
+ Python 3.8 is not in the base environment:
44
+
45
+ ```
46
+ conda create -n py38chk python=3.8 -y
47
+ conda activate py38chk
48
+ pip install --no-deps dist/benchmark_reliability-0.3.1-py3-none-any.whl
49
+ conda install numpy # 1.24.3, last numpy supporting 3.8
50
+ pip install pandas==2.0.3 # last pandas supporting 3.8
51
+ ```
52
+
53
+ scikit-learn, scipy, matplotlib, openml, kagglehub, pyreadstat and openpyxl
54
+ were left uninstalled, which accounts for all 15 errors and affects none of the
55
+ 36 verifications.
@@ -0,0 +1,55 @@
1
+ # brf registry prepare verification — canonical content hash — Python 3.13.11
2
+ # generated 2026-10-01 07:25:34 CST
3
+ # command: python scripts/compute_prepare_hashes.py --verify
4
+ #
5
+ abalone... OK (3f7c6c66fdec85a6...)
6
+ air_quality... OK (4ee091d7c6cd29c2...)
7
+ airfoil... OK (48bcb721e3e8fce3...)
8
+ assistments... OK (9bd474c2e85e0778...)
9
+ auto_mpg... OK (a8b5a265bf2aada3...)
10
+ bike_sharing... OK (6759530a726ce5bb...)
11
+ boston_housing... OK (1626353c69b1b1bc...)
12
+ breast_cancer... OK (2b89a1181eb63e05...)
13
+ california_housing... OK (e8ab522c9d4aba60...)
14
+ ccpp... OK (84f5f83018d7030f...)
15
+ climate_weather... OK (f14ba7b89eda5fea...)
16
+ college_scorecard... OK (2de9c254016f6d93...)
17
+ colleges_aaup... OK (a98f7f115c3fc707...)
18
+ colleges_usnews... OK (cae3862477696e18...)
19
+ concrete... OK (3c4b71924aa1f5b7...)
20
+ cpu_act... OK (12e266a8e018e51f...)
21
+ credit_card... OK (035c55b1ffe395ca...)
22
+ customer_churn... OK (53e26607e6d3e85f...)
23
+ diabetes... OK (e471bce7f98d55bc...)
24
+ electricity... OK (b344eff67643623a...)
25
+ energy_building... OK (c045e11976d5c01f...)
26
+ energy_efficiency... OK (3d75f02739b5e4f3...)
27
+ entrance_exam... OK (43bca05374772861...)
28
+ german_credit... OK (185e97d0640048b7...)
29
+ higher_ed... OK (59be6940c05cd59b...)
30
+ kaggle_students_performance... OK (2076cb97e81c74e9...)
31
+ kdd_cup_2010... OK (b7d8e2aef91cbc6a...)
32
+ law_school... OK (b1f33959f2f4a362...)
33
+ linnerud... OK (f00cf92d24f6f7fc...)
34
+ mathe... OK (ac788168060595a0...)
35
+ mm_tba... OK (c530bd64a241ee40...)
36
+ nursery... OK (afd19fc4496c3904...)
37
+ oli... OK (a7d2ccf40aaf65ab...)
38
+ olympics... OK (4429c726958ccc09...)
39
+ oulad... OK (9aa535d041c9f390...)
40
+ pisa2015... OK (1a0e76d0cd8dcf07...)
41
+ pollution... OK (5768d5b4509b398f...)
42
+ real_estate... OK (1c67624e20a3948c...)
43
+ seoul_bike... OK (03d8e2b26f08a21a...)
44
+ student_absences... OK (abf4c2a41c532386...)
45
+ student_depression... OK (f6f0f65bebafaea7...)
46
+ student_dropout... OK (c01207db62dc1ac9...)
47
+ student_health... OK (0fa081e63bb3f259...)
48
+ students_exam_scores... OK (336969cba9ef0bb7...)
49
+ tae... OK (356cb12fda2ff552...)
50
+ turkiye... OK (fef1729ce8edf310...)
51
+ uci_student... OK (7f5a7696641b3586...)
52
+ uci_student_math... OK (2cbf9c120016bb28...)
53
+ wine_quality... OK (e26239cad8e85992...)
54
+ xapi_edu... OK (6470f36422d4ba1e...)
55
+ yacht... OK (527653450af99bdb...)
@@ -0,0 +1,55 @@
1
+ # brf registry prepare verification — canonical content hash — Python 3.8.20
2
+ # generated 2026-10-01 07:25:34 CST
3
+ # command: python scripts/compute_prepare_hashes.py --verify
4
+ #
5
+ abalone... OK (3f7c6c66fdec85a6...)
6
+ air_quality... OK (4ee091d7c6cd29c2...)
7
+ airfoil... OK (48bcb721e3e8fce3...)
8
+ assistments... OK (9bd474c2e85e0778...)
9
+ auto_mpg... OK (a8b5a265bf2aada3...)
10
+ bike_sharing... OK (6759530a726ce5bb...)
11
+ boston_housing... OK (1626353c69b1b1bc...)
12
+ breast_cancer... ERROR: No module named 'sklearn'
13
+ california_housing... ERROR: No module named 'sklearn'
14
+ ccpp... OK (84f5f83018d7030f...)
15
+ climate_weather... ERROR: No module named 'sklearn'
16
+ college_scorecard... OK (2de9c254016f6d93...)
17
+ colleges_aaup... OK (a98f7f115c3fc707...)
18
+ colleges_usnews... ERROR: No module named 'scipy'
19
+ concrete... OK (3c4b71924aa1f5b7...)
20
+ cpu_act... OK (12e266a8e018e51f...)
21
+ credit_card... ERROR: No module named 'sklearn'
22
+ customer_churn... ERROR: No module named 'sklearn'
23
+ diabetes... ERROR: No module named 'sklearn'
24
+ electricity... ERROR: No module named 'sklearn'
25
+ energy_building... OK (c045e11976d5c01f...)
26
+ energy_efficiency... OK (3d75f02739b5e4f3...)
27
+ entrance_exam... OK (43bca05374772861...)
28
+ german_credit... ERROR: No module named 'sklearn'
29
+ higher_ed... OK (59be6940c05cd59b...)
30
+ kaggle_students_performance... ERROR: No module named 'kagglehub'
31
+ kdd_cup_2010... OK (b7d8e2aef91cbc6a...)
32
+ law_school... OK (b1f33959f2f4a362...)
33
+ linnerud... ERROR: No module named 'sklearn'
34
+ mathe... OK (ac788168060595a0...)
35
+ mm_tba... ERROR: No module named 'openpyxl'
36
+ nursery... OK (afd19fc4496c3904...)
37
+ oli... OK (a7d2ccf40aaf65ab...)
38
+ olympics... OK (4429c726958ccc09...)
39
+ oulad... OK (9aa535d041c9f390...)
40
+ pisa2015... ERROR: No module named 'pyreadstat'
41
+ pollution... OK (5768d5b4509b398f...)
42
+ real_estate... OK (1c67624e20a3948c...)
43
+ seoul_bike... OK (03d8e2b26f08a21a...)
44
+ student_absences... ERROR: No module named 'kagglehub'
45
+ student_depression... OK (f6f0f65bebafaea7...)
46
+ student_dropout... OK (c01207db62dc1ac9...)
47
+ student_health... ERROR: No module named 'kagglehub'
48
+ students_exam_scores... OK (336969cba9ef0bb7...)
49
+ tae... OK (356cb12fda2ff552...)
50
+ turkiye... OK (fef1729ce8edf310...)
51
+ uci_student... OK (7f5a7696641b3586...)
52
+ uci_student_math... OK (2cbf9c120016bb28...)
53
+ wine_quality... OK (e26239cad8e85992...)
54
+ xapi_edu... OK (6470f36422d4ba1e...)
55
+ yacht... OK (527653450af99bdb...)
@@ -0,0 +1,112 @@
1
+ # brf registry prepare verification — canonical content hash — Python 3.8.20
2
+ # generated 2026-10-01 07:25:34 CST
3
+ # command: python scripts/compute_prepare_hashes.py --verify
4
+ #
5
+ # SUPERSEDED. Produced before compute_prepare_sha256 was changed to hash
6
+ # canonical bytes. Under the old np.save() byte-stream scheme this run reported 26
7
+ # false MISMATCHes against data that was element-for-element identical to the
8
+ # 3.13 run. Retained as the evidence that motivated the canonical encoding.
9
+
10
+ abalone... MISMATCH
11
+ expected: 5b6b32a69477bea5675cb302e1d6a945...
12
+ actual: 32041fecd1f68c3c7c1f37716a1546c2...
13
+ air_quality... OK (e78a0ea54f9dc86d...)
14
+ airfoil... OK (be1cb863965a847b...)
15
+ assistments... MISMATCH
16
+ expected: fb0d83a83cd4eecf4eafa52f7c6100ee...
17
+ actual: 0890b8928350b4a946f931a3b2e258fd...
18
+ auto_mpg... MISMATCH
19
+ expected: 41551b5d3f9a5feb37fc3a6532991dfd...
20
+ actual: b4907d473fe1733c5f987cebfce72a0a...
21
+ bike_sharing... MISMATCH
22
+ expected: 5a55a9c0ef9a1ab85fa02e167d6254ea...
23
+ actual: 76c62f8826fe0e841e4d7a1b8f672b5e...
24
+ boston_housing... OK (ff3c536970b60eec...)
25
+ breast_cancer... ERROR: No module named 'sklearn'
26
+ california_housing... ERROR: No module named 'sklearn'
27
+ ccpp... OK (50d712fc6096d18b...)
28
+ climate_weather... ERROR: No module named 'sklearn'
29
+ college_scorecard... MISMATCH
30
+ expected: ae9a804d4def1a5aee8ef39f6a96693e...
31
+ actual: ad66a2c2fed247d753dc7e0f051956f0...
32
+ colleges_aaup... MISMATCH
33
+ expected: 71e1b7db1f017580fdc8ecbae641e47f...
34
+ actual: 089661e485c416b01bd82f7a04c1e164...
35
+ colleges_usnews... ERROR: No module named 'scipy'
36
+ concrete... OK (d827c72762e42f6a...)
37
+ cpu_act... MISMATCH
38
+ expected: 8507aed1b25e7f879780e7a60f59cb06...
39
+ actual: 329e1ff0462193a08089ac584dd70f00...
40
+ credit_card... ERROR: No module named 'sklearn'
41
+ customer_churn... ERROR: No module named 'sklearn'
42
+ diabetes... ERROR: No module named 'sklearn'
43
+ electricity... ERROR: No module named 'sklearn'
44
+ energy_building... MISMATCH
45
+ expected: a587b2900e50f0493714966c16e6af6d...
46
+ actual: 0f14736ee89295f4279c9d30d4ae84ca...
47
+ energy_efficiency... OK (56a8509c2811ad32...)
48
+ entrance_exam... MISMATCH
49
+ expected: 73daf60a69b19a9ac2ff9a2d610e1af0...
50
+ actual: 066807ff742bc4f8b0e7f18e34f6b3c5...
51
+ german_credit... ERROR: No module named 'sklearn'
52
+ higher_ed... MISMATCH
53
+ expected: 71b480e5744f32b139fca955a86af930...
54
+ actual: d1ef86ac2d396ed20f8fcc701049bcb5...
55
+ kaggle_students_performance... ERROR: No module named 'kagglehub'
56
+ kdd_cup_2010... MISMATCH
57
+ expected: f5379171e250daf624767701640e6243...
58
+ actual: 1a18aff48cad57cc155cd8928ceb96d5...
59
+ law_school... MISMATCH
60
+ expected: d99966e6e23e8774b53634c292df0877...
61
+ actual: 12945ab4890ddd8803fafd3af08cf2ef...
62
+ linnerud... ERROR: No module named 'sklearn'
63
+ mathe... MISMATCH
64
+ expected: 39ef0dae8f556e1ca526bb9551c3b7a6...
65
+ actual: 11d772e492f9b6caa11ed30cb64ee1cb...
66
+ mm_tba... ERROR: No module named 'openpyxl'
67
+ nursery... MISMATCH
68
+ expected: 3ba69383b901493d654b4e38cce34beb...
69
+ actual: 866a472bfbe942924097e848238487cb...
70
+ oli... MISMATCH
71
+ expected: 584b1624cf141fac677fb6d81d43eb9f...
72
+ actual: 4e0bd241e17c139603ad18a752f796fc...
73
+ olympics... MISMATCH
74
+ expected: 2f499125556a7f4221b0a9029d82a6ec...
75
+ actual: 337b4dc3f214fe0aaf73f83e7ed6873e...
76
+ oulad... MISMATCH
77
+ expected: 160907b3b6f20ee6ec6960c15559f080...
78
+ actual: f1b56a2e4f40cff7e34663eae01c0552...
79
+ pisa2015... ERROR: No module named 'pyreadstat'
80
+ pollution... OK (02b01fb8648921c0...)
81
+ real_estate... OK (33b6e420f4961959...)
82
+ seoul_bike... MISMATCH
83
+ expected: 3e349da8a18d80a4462c34627e04ccbb...
84
+ actual: 36673a5b15a5a29c47d0eee19f816024...
85
+ student_absences... ERROR: No module named 'kagglehub'
86
+ student_depression... MISMATCH
87
+ expected: 959f6b8a2ff303fe598525f322b5aa14...
88
+ actual: 8a6e5bf75ce598602461b28dd2e1f49e...
89
+ student_dropout... MISMATCH
90
+ expected: 44f0577f5da770ade95934c476243714...
91
+ actual: dbbfb63f5818677e00ac26bb1435641c...
92
+ student_health... ERROR: No module named 'kagglehub'
93
+ students_exam_scores... MISMATCH
94
+ expected: 209266b41fbda02c661e7c350deec769...
95
+ actual: 7be836a4e719f04e6db4df617a877b65...
96
+ tae... OK (d05565e68408f503...)
97
+ turkiye... MISMATCH
98
+ expected: 54dc857070e80e8217d7e14c92653b56...
99
+ actual: 29466167772a3dabb964fa689ea20579...
100
+ uci_student... MISMATCH
101
+ expected: fca0d5cb95050125554cd5ca841c2b0e...
102
+ actual: 3056d3cb28d419c249ad14984c388fec...
103
+ uci_student_math... MISMATCH
104
+ expected: 121c895f712f8492be1a932a5810d6ab...
105
+ actual: d91e9ed9827d3bcf42c676662204a486...
106
+ wine_quality... MISMATCH
107
+ expected: fab3c99e6cae7f91afc9a5ceee877955...
108
+ actual: f32af70bccc532bd553c35a671982896...
109
+ xapi_edu... MISMATCH
110
+ expected: 2b6bae74d0261408955484b4f4790c04...
111
+ actual: d7329eb246a08a980061fbccd7d701dc...
112
+ yacht... OK (3c571dcc684e1a38...)