Skip to content

Commit 9f61260

Browse files
author
miranov25
committed
Phase 13.48.DF v1.0: Tier-1 automated visual testing (10 V-checks).
VisualCheck (collect-all-then-assert) + standalone primitives + 11 tests (V.1-V.10 + V.2 ragged-padding-safety lock) in TestPhase1348VisualPrimitive. New visual_primitive layer; +6 VISUAL.* features. Cell iteration via fig.axes (dispatcher-agnostic); visible_cell_axes excludes hidden padding; counts via ax.containers; cell->value via zip-sorted (dtype-safe); distinct-RGBA distinctness. visual_primitive shows Smoke-only (dedicated status = deferred matrix task). Test-only; no source change. Spec: PHASE_13_48_DF_v1_4_VisualTesting_Proposal.md. Predecessor: PHASE_13_46_DF_FIX1_END @ ad91e25 (gate 1023). Gate: 1023 -> 1034.
1 parent df3057a commit 9f61260

4 files changed

Lines changed: 426 additions & 5 deletions

File tree

UTILS/dfextensions/dfdraw/docs/CAPABILITY_MATRIX.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Capability Matrix — dfdraw
22

3-
**Generated:** 2026-05-28 13:04 UTC
3+
**Generated:** 2026-05-28 17:45 UTC
44
**Phase:** 13.15.DF
55
**Generator:** `scripts/generate_capability_matrix.py`
66
**Sources:** `tests/feature_taxonomy.py` + `tests/test_layer_classification.py`
@@ -9,12 +9,12 @@
99

1010
| Status | Count | % |
1111
|--------|------:|--:|
12-
| ✅ Verified | 56 | 49% |
13-
| ☑️ Smoke-only | 57 | 50% |
12+
| ✅ Verified | 56 | 47% |
13+
| ☑️ Smoke-only | 63 | 52% |
1414
| 🧨 Broken | 0 | 0% |
1515
| 📋 Planned | 1 | 1% |
16-
| **Total features** | **114** | |
17-
| **Total proof tests** | **578** | |
16+
| **Total features** | **120** | |
17+
| **Total proof tests** | **589** | |
1818
| **Invariance tests** | **349** | |
1919

2020
**Status key:**
@@ -182,6 +182,13 @@
182182
|| **RANGE.scatter_filter** — range= on scatter removes out-of-range points (FIX1 semantic) | 1 | 0 |
183183
| | **TITLE** | | |
184184
|| **TITLE.get_suptitle**_get_suptitle public-API helper (mpl >= 3.8 + fallback) | 1 | 0 |
185+
| | **VISUAL** | | |
186+
| ☑️ | **VISUAL.data_bounds** — plotted points lie within axes limits (C-9 regression lock) | 1 | 0 |
187+
| ☑️ | **VISUAL.cell_population** — every visible facet cell drew data; ragged-grid padding excluded | 2 | 0 |
188+
| ☑️ | **VISUAL.artist_count** — per-cell data-series / legend count matches per-cell filtered groups | 2 | 0 |
189+
| ☑️ | **VISUAL.color_distinct** — per-group colors distinct — color-cycle not reset (AD-37 class) | 2 | 0 |
190+
| ☑️ | **VISUAL.facet_grid** — facet grid shape + shared-axis consistency (figure-derived) | 2 | 0 |
191+
| ☑️ | **VISUAL.title** — suptitle populated, not duplicated per-cell (C-3); content (I-4) | 2 | 0 |
185192

186193
---
187194

UTILS/dfextensions/dfdraw/tests/feature_taxonomy.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,4 +1517,58 @@
15171517
"test_phase_13_46_df_audit_fixes.py::TestPhase1346AuditFixes::test_f70_get_suptitle_live_path",
15181518
],
15191519
},
1520+
# ── Phase 13.48.DF — Tier-1 automated visual checks (visual_primitive) ──
1521+
{
1522+
"id": "VISUAL.data_bounds",
1523+
"name": "plotted points lie within axes limits (C-9 regression lock)",
1524+
"category": "VISUAL",
1525+
"tests": [
1526+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v1_scatter_points_in_bounds",
1527+
],
1528+
},
1529+
{
1530+
"id": "VISUAL.cell_population",
1531+
"name": "every visible facet cell drew data; ragged-grid padding excluded",
1532+
"category": "VISUAL",
1533+
"tests": [
1534+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v2_every_visible_cell_nonempty",
1535+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v2_padding_safe_on_ragged_grid",
1536+
],
1537+
},
1538+
{
1539+
"id": "VISUAL.artist_count",
1540+
"name": "per-cell data-series / legend count matches per-cell filtered groups",
1541+
"category": "VISUAL",
1542+
"tests": [
1543+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v3_artist_count_matches_groups",
1544+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v7_legend_entries_match_groups",
1545+
],
1546+
},
1547+
{
1548+
"id": "VISUAL.color_distinct",
1549+
"name": "per-group colors distinct — color-cycle not reset (AD-37 class)",
1550+
"category": "VISUAL",
1551+
"tests": [
1552+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v4_per_group_colors_distinct",
1553+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v8_color_cycle_distinct",
1554+
],
1555+
},
1556+
{
1557+
"id": "VISUAL.facet_grid",
1558+
"name": "facet grid shape + shared-axis consistency (figure-derived)",
1559+
"category": "VISUAL",
1560+
"tests": [
1561+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v5_facet_grid_shape",
1562+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v6_shared_axis_consistency",
1563+
],
1564+
},
1565+
{
1566+
"id": "VISUAL.title",
1567+
"name": "suptitle populated, not duplicated per-cell (C-3); content (I-4)",
1568+
"category": "VISUAL",
1569+
"tests": [
1570+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v9_auto_title_not_duplicated",
1571+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v10_title_content",
1572+
],
1573+
},
15201574
]

UTILS/dfextensions/dfdraw/tests/test_layer_classification.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,5 +443,23 @@
443443
"test_phase_13_46_df_audit_fixes.py::TestPhase1346AuditFixes::test_f70_get_suptitle_live_path": "invariance",
444444
"test_phase_13_46_df_audit_fixes.py::TestPhase1346AuditFixes::test_f71_scatter_range_removes_out_of_range_points": "invariance",
445445

446+
# ── Phase 13.48.DF — visual_primitive layer (renderer-free figure checks) ──
447+
# A distinct layer from invariance/smoke: these assert structural properties
448+
# of the rendered figure (points in bounds, per-cell artist counts, color
449+
# distinctness, grid shape, title de-duplication) against figure-derived /
450+
# filtered-df oracles. The matrix currently displays these as Smoke-only;
451+
# a dedicated "visually checked" status is the deferred §3 schema task.
452+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v1_scatter_points_in_bounds": "visual_primitive",
453+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v2_every_visible_cell_nonempty": "visual_primitive",
454+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v2_padding_safe_on_ragged_grid": "visual_primitive",
455+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v3_artist_count_matches_groups": "visual_primitive",
456+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v4_per_group_colors_distinct": "visual_primitive",
457+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v5_facet_grid_shape": "visual_primitive",
458+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v6_shared_axis_consistency": "visual_primitive",
459+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v7_legend_entries_match_groups": "visual_primitive",
460+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v8_color_cycle_distinct": "visual_primitive",
461+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v9_auto_title_not_duplicated": "visual_primitive",
462+
"test_phase_13_48_df_visual_testing.py::TestPhase1348VisualPrimitive::test_v10_title_content": "visual_primitive",
463+
446464
# Everything else defaults to "smoke"
447465
}

0 commit comments

Comments
 (0)