|
1 | 1 | # Capability Matrix — AliasDataFrame |
2 | 2 |
|
3 | | -**Generated:** 2026-04-12 11:11 UTC |
| 3 | +**Generated:** 2026-04-26 07:48 UTC |
4 | 4 | **Phase:** 13.11.B |
5 | | -**Taxonomy:** 41 features (PHASE_13_11_B approved) |
| 5 | +**Taxonomy:** 44 features (PHASE_13_11_B approved) |
6 | 6 | **Generator:** `scripts/generate_capability_matrix.py` v2 (taxonomy-based) |
7 | 7 |
|
8 | 8 | ## Summary |
9 | 9 |
|
10 | 10 | | Status | Count | % | |
11 | 11 | |--------|------:|--:| |
12 | | -| ✅ Verified | 23 | 56% | |
13 | | -| ☑️ Smoke-only | 14 | 34% | |
14 | | -| 🧨 Broken | 3 | 7% | |
| 12 | +| ✅ Verified | 26 | 59% | |
| 13 | +| ☑️ Smoke-only | 14 | 31% | |
| 14 | +| 🧨 Broken | 3 | 6% | |
15 | 15 | | 📋 Planned | 1 | 2% | |
16 | | -| **Total features** | **41** | | |
17 | | -| **Matched tests** | **1525** | | |
18 | | -| **Invariance tests** | **114** | | |
| 16 | +| **Total features** | **44** | | |
| 17 | +| **Matched tests** | **1536** | | |
| 18 | +| **Invariance tests** | **125** | | |
19 | 19 |
|
20 | | -**Unmatched tests:** 42 (not mapped to any feature) |
| 20 | +**Unmatched tests:** 88 (not mapped to any feature) |
21 | 21 |
|
22 | 22 | ## CORE |
23 | 23 |
|
|
60 | 60 | | ✅ | **FUNC.polynomial** — PolynomialSpec & register_polynomial_from_subframe | 20 | 20 | 0 | 3 | |
61 | 61 | | ✅ | **FUNC.evaluator** — register_evaluator | 24 | 24 | 0 | 3 | |
62 | 62 | | ✅ | **FUNC.persistence** — Function persistence through schema | 9 | 9 | 0 | 2 | |
| 63 | +| ✅ | **FUNC.regression_metadata** — Regression metadata registration & update | 4 | 4 | 0 | 4 | |
| 64 | +| ✅ | **FUNC.evaluator_from_metadata** — Bridge: metadata → evaluator binding | 6 | 6 | 0 | 6 | |
| 65 | +| ✅ | **FUNC.regression_persistence** — Regression metadata schema roundtrip | 1 | 1 | 0 | 1 | |
63 | 66 |
|
64 | 67 | ## DRAWING |
65 | 68 |
|
|
118 | 121 | ## 🧨 Broken Features — Details |
119 | 122 |
|
120 | 123 | ### COMP.roundtrip |
121 | | -- ❌ `test_invariance_compression.py::TestInvarianceCompression::test_I4_3_asinh_compression_roundtrip` |
122 | 124 | - ❌ `test_invariance_compression.py::TestInvarianceCompression::test_I4_2_scaled_linear_compression_roundtrip` |
| 125 | +- ❌ `test_invariance_compression.py::TestInvarianceCompression::test_I4_3_asinh_compression_roundtrip` |
123 | 126 |
|
124 | 127 | ### BACK.invariance |
125 | 128 | - ❌ `test_invariance_backend.py::TestInvarianceBackend::test_I2_6_chained_subframe_expressions_numba_vs_numpy` |
126 | 129 |
|
127 | 130 | ### RDF.export |
128 | | -- ❌ `test_AliasDataFrameRDF.py::TestTMemFileBranch::test_missing_keys_in_friend` |
129 | | -- ❌ `test_AliasDataFrameRDF.py::TestRDataFrameFriendAccess::test_composite_index_friend` |
130 | 131 | - ❌ `test_AliasDataFrameRDF.py::TestAddDefinesCollision::test_collision_from_friend_tree` |
| 132 | +- ❌ `test_AliasDataFrameRDF.py::TestRDataFrameFriendAccess::test_composite_index_friend` |
| 133 | +- ❌ `test_AliasDataFrameRDF.py::TestTMemFileBranch::test_missing_keys_in_friend` |
131 | 134 |
|
132 | 135 | ## Unmatched Tests |
133 | 136 |
|
134 | | -42 tests not mapped to any feature. |
135 | | - |
136 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_aliases_preserved` |
137 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_backward_compatibility_no_metadata` |
138 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_basic_read` |
139 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_entry_range_start_stop` |
140 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_entry_range_stop` |
141 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_invalid_tree_raises_error` |
142 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_subframe_loaded` |
143 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_subframe_warning_with_entry_range` |
144 | | -- `test_alias_dataframe.py::TestReadTreeOptimized::test_threaded_vs_unthreaded_equivalence` |
145 | | -- `test_alias_dataframe.py::TestReadTreeWithCompression::test_compressed_columns_dtype_restored` |
146 | | -- `test_alias_dataframe.py::TestReadTreeWithCompression::test_compression_info_preserved` |
147 | | -- `test_alias_dataframe.py::TestReadTreeWithCompression::test_decompression_alias_works` |
148 | | -- `test_alias_dataframe.py::TestReadTreeWithCompression::test_entry_range_with_compression` |
149 | | -- `test_alias_dataframe.py::TestSchemaV2Ordering::test_schema_v2_groups_roundtrip` |
150 | | -- `test_alias_dataframe.py::TestSchemaV2Ordering::test_schema_v2_groups_simple_lists` |
151 | | -- `test_alias_dataframe.py::TestSchemaV2Ordering::test_schema_v2_order_agnostic_load` |
152 | | -- `test_alias_dataframe.py::TestSchemaV2Ordering::test_schema_v2_order_canonical` |
153 | | -- `test_alias_dataframe.py::TestSchemaV2Ordering::test_schema_v2_order_full` |
154 | | -- `test_alias_dataframe.py::TestSchemaV2Ordering::test_schema_v2_order_strict_positions` |
155 | | -- `test_alias_dataframe.py::TestSchemaV2Ordering::test_schema_v2_without_groups` |
156 | | -- `test_fill_handling.py::TestModeComparison::test_direct_and_safe_give_same_values_when_no_missing` |
157 | | -- `test_fill_handling.py::TestMultipleSubframes::test_different_fill_per_subframe` |
158 | | -- `test_fill_handling.py::TestSubframeFillConfig::test_clear_subframe_fill` |
159 | | -- `test_fill_handling.py::TestSubframeFillConfig::test_clear_subframe_fill_validates_subframe` |
160 | | -- `test_fill_handling.py::TestSubframeFillConfig::test_set_subframe_fill_partial_override` |
161 | | -- `test_fill_handling.py::TestSubframeFillConfig::test_set_subframe_fill_rejects_unknown_fill_mode` |
162 | | -- `test_fill_handling.py::TestSubframeFillConfig::test_set_subframe_fill_stores_config` |
163 | | -- `test_fill_handling.py::TestSubframeFillConfig::test_set_subframe_fill_unknown_subframe_raises` |
164 | | -- `test_fill_handling.py::TestSubframeFillConfig::test_subframe_config_overrides_global` |
165 | | -- `test_fill_handling.py::TestSubframeFillConfig::test_subframe_fill_mode_overrides_global` |
166 | | -- ... +12 more |
| 137 | +88 tests not mapped to any feature. |
| 138 | + |
| 139 | +- `test_D1_dtype_subframe_join.py::TestDtypeLossSubframeJoin::test_D1_int8_dtype_preserved_through_join` |
| 140 | +- `test_D1_dtype_subframe_join.py::TestDtypeLossSubframeJoin::test_D2_bool_dtype_preserved_through_join` |
| 141 | +- `test_D1_dtype_subframe_join.py::TestDtypeLossSubframeJoin::test_D3_float_dtype_unaffected` |
| 142 | +- `test_D1_dtype_subframe_join.py::TestDtypeLossSubframeJoin::test_D4_no_missing_keys_no_warning` |
| 143 | +- `test_D1_dtype_subframe_join.py::TestDtypeLossSubframeJoin::test_D5_boolean_and_operator_works` |
| 144 | +- `test_E1_export_tree_roundtrip.py::TestExportTreeMetadataRoundtrip::test_E1_1_basic_roundtrip_no_subframes` |
| 145 | +- `test_E1_export_tree_roundtrip.py::TestExportTreeMetadataRoundtrip::test_E1_2_roundtrip_3_subframes` |
| 146 | +- `test_E1_export_tree_roundtrip.py::TestExportTreeMetadataRoundtrip::test_E1_3_roundtrip_production_scale_subframes` |
| 147 | +- `test_E1_export_tree_roundtrip.py::TestExportTreeMetadataRoundtrip::test_E1_4_roundtrip_timing_report` |
| 148 | +- `test_E2_export_tree_fix_a.py::TestE2ExportTreeFixA::test_E2_1_single_tfile_open_per_export` |
| 149 | +- `test_E2_export_tree_fix_a.py::TestE2ExportTreeFixA::test_E2_2_nested_subframe_roundtrip` |
| 150 | +- `test_E2_export_tree_fix_a.py::TestE2ExportTreeFixA::test_E2_3_read_tree_backward_compatibility` |
| 151 | +- `test_E2_export_tree_fix_a.py::TestE2ExportTreeFixA::test_E2_4_standalone_write_metadata_to_root` |
| 152 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_10_dematerialize_drop_keep_mutual_exclusion` |
| 153 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_1_cached_equals_uncached` |
| 154 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_2_cache_survives_materialize_aliases` |
| 155 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_3_cache_invalidates_on_register_subframe` |
| 156 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_4_cache_invalidates_on_subframe_data_change` |
| 157 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_5_multi_subframe_pipeline` |
| 158 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_6_dematerialize_drop_and_recover` |
| 159 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_7_dematerialize_keep` |
| 160 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_8_dematerialize_all` |
| 161 | +- `test_J1_join_cache.py::TestJ1JoinCacheCorrectness::test_J1_9_dematerialize_ignores_raw_columns` |
| 162 | +- `test_J1_join_cache.py::TestJ2JoinCachePerformance::test_J2_1_cache_hit_count_across_materialize_calls` |
| 163 | +- `test_K1_vector_draw_kwarg_diagnostic.py::TestK1VectorDrawKwargDiagnostic::test_K1_1_draw_accepts_all_documented_kwargs` |
| 164 | +- `test_K1_vector_draw_kwarg_diagnostic.py::TestK1VectorDrawKwargDiagnostic::test_K1_2_draw_forwards_kwargs_to_dfdraw` |
| 165 | +- `test_K1_vector_draw_kwarg_diagnostic.py::TestK1VectorDrawKwargDiagnostic::test_K1_3_draw_batch_forwards_batch_kwargs` |
| 166 | +- `test_K1_vector_draw_kwarg_diagnostic.py::TestK1VectorDrawKwargDiagnostic::test_K1_4_draw_figures_forwards_figure_kwargs` |
| 167 | +- `test_K1_vector_draw_kwarg_diagnostic.py::TestK1VectorDrawKwargDiagnostic::test_K1_5_vector_expression_each_call_gets_full_kwargs` |
| 168 | +- `test_K2_vector_draw_end_to_end.py::TestK2VectorDrawEndToEnd::test_K2_1_scalar_groupby_baseline` |
| 169 | +- ... +58 more |
167 | 170 |
|
168 | 171 | --- |
169 | 172 | *Generated from pytest JSON + feature_taxonomy.py (v2 taxonomy-based).* |
0 commit comments