Skip to content

feat(visualization): export the charts that draw over a table's columns - #8365

Merged
aglinxinyuan merged 9 commits into
apache:mainfrom
kz930:feat/standalone-viz-a2
Oct 15, 2026
Merged

aglinxinyuan merged 9 commits into
apache:mainfrom
kz930:feat/standalone-viz-a2

Conversation

@kz930

@kz930 kz930 commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

What changes were proposed in this PR?

Sixteen plots whose shape comes from the columns they are pointed at: the
bar, line and pie, the histograms, the scatter family, the box and violin,
the strip and the ECDF, the heat map, the candlestick, the funnel and the
dot plot.

A line's series configuration and an error band's are one type extending
the other, so they travel together.

Any related issues, documentation, discussions?

Part of #8325, 14 of 27; that issue lists the set in order. It needs #8327 for the trait, so it does not compile until that lands, and the rows these operators add to the verification runner follow with the harness rather than as whole new files here.

Closes #8417, the task this change is the whole of.

How was this PR tested?

Each operator asserts the block it emits in its own spec. Once the harness lands, each is also run through the engine and through its generated script, on every configuration its schema offers, and the two answers compared.

Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Opus 5)

Sixteen plots whose shape comes from the columns they are pointed at: the
bar, line and pie, the histograms, the scatter family, the box and violin,
the strip and the ECDF, the heat map, the candlestick, the funnel and the
dot plot.

A line's series configuration and an error band's are one type extending
the other, so they travel together.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Automated Reviewer Suggestions

Based on the git blame history of the changed files, we recommend the following reviewers:

  • Contributors with relevant context: @eugenegujing, @aglinxinyuan
    You can notify them by mentioning @eugenegujing, @aglinxinyuan in a comment.

@github-actions

github-actions Bot commented Sep 2, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Benchmark changes need a look

🟢 2 better · 🔴 7 worse · ⚪ 6 noise (<±5%) · 0 without baseline

Compared against main 6a29c59 benchmarked on this same runner, so the delta is largely free of cross-runner hardware noise. The "7d avg" column still reflects the gh-pages dashboard. Treat <±5% as noise unless repeated.

Dashboard · Run

config throughput MB/s latency max Δ latest / 7d
🔴 bs=10 sw=10 sl=64 374 0.228 25,345/35,572/35,572 us 🔴 +14.8% / 🔴 +126.3%
🔴 bs=100 sw=10 sl=64 768 0.469 124,990/186,406/186,406 us 🔴 -5.5% / 🔴 +77.0%
🟢 bs=1000 sw=10 sl=64 923 0.563 1,080,565/1,130,237/1,130,237 us 🟢 -6.7% / 🔴 -12.9%
Baseline details

Latest main 6a29c59 from same runner

config metric PR latest main 7d avg Δ latest Δ 7d
bs=10 sw=10 sl=64 throughput 374 tuples/sec 414 tuples/sec 790.31 tuples/sec -9.7% -52.7%
bs=10 sw=10 sl=64 MB/s 0.228 MB/s 0.252 MB/s 0.482 MB/s -9.5% -52.7%
bs=10 sw=10 sl=64 p50 25,345 us 22,068 us 12,375 us +14.8% +104.8%
bs=10 sw=10 sl=64 p95 35,572 us 33,613 us 15,719 us +5.8% +126.3%
bs=10 sw=10 sl=64 p99 35,572 us 33,613 us 19,058 us +5.8% +86.6%
bs=100 sw=10 sl=64 throughput 768 tuples/sec 813 tuples/sec 1,025 tuples/sec -5.5% -25.1%
bs=100 sw=10 sl=64 MB/s 0.469 MB/s 0.496 MB/s 0.626 MB/s -5.4% -25.0%
bs=100 sw=10 sl=64 p50 124,990 us 119,760 us 98,759 us +4.4% +26.6%
bs=100 sw=10 sl=64 p95 186,406 us 180,431 us 105,327 us +3.3% +77.0%
bs=100 sw=10 sl=64 p99 186,406 us 180,431 us 120,491 us +3.3% +54.7%
bs=1000 sw=10 sl=64 throughput 923 tuples/sec 913 tuples/sec 1,059 tuples/sec +1.1% -12.9%
bs=1000 sw=10 sl=64 MB/s 0.563 MB/s 0.557 MB/s 0.646 MB/s +1.1% -12.9%
bs=1000 sw=10 sl=64 p50 1,080,565 us 1,090,689 us 965,886 us -0.9% +11.9%
bs=1000 sw=10 sl=64 p95 1,130,237 us 1,211,605 us 1,007,533 us -6.7% +12.2%
bs=1000 sw=10 sl=64 p99 1,130,237 us 1,211,605 us 1,031,622 us -6.7% +9.6%
Raw CSV
config_idx,batch_size,schema_width,string_len,num_batches,total_ms,total_tuples,total_bytes,tuples_per_sec,mb_per_sec,lat_p50_us,lat_p95_us,lat_p99_us
0,10,10,64,20,535.28,200,128000,374,0.228,25344.51,35571.91,35571.91
1,100,10,64,20,2604.88,2000,1280000,768,0.469,124990.02,186405.85,186405.85
2,1000,10,64,20,21668.41,20000,12800000,923,0.563,1080565.15,1130236.52,1130236.52

@codecov-commenter

codecov-commenter commented Sep 2, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 13.29787% with 163 lines in your changes missing coverage. Please review.
✅ Project coverage is 92.32%. Comparing base (6a29c59) to head (4387a63).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...erator/visualization/ecdfPlot/ECDFPlotOpDesc.scala 4.16% 23 Missing ⚠️
...or/visualization/stripChart/StripChartOpDesc.scala 5.55% 17 Missing ⚠️
.../visualization/scatterplot/ScatterplotOpDesc.scala 5.88% 16 Missing ⚠️
...ualization/boxViolinPlot/BoxViolinPlotOpDesc.scala 6.25% 15 Missing ⚠️
...erator/visualization/barChart/BarChartOpDesc.scala 7.14% 13 Missing ⚠️
.../visualization/bubbleChart/BubbleChartOpDesc.scala 7.69% 12 Missing ⚠️
...ator/visualization/lineChart/LineChartOpDesc.scala 9.09% 10 Missing ⚠️
...tinuousErrorBands/ContinuousErrorBandsOpDesc.scala 10.00% 9 Missing ⚠️
...visualization/histogram/HistogramChartOpDesc.scala 10.00% 9 Missing ⚠️
...or/visualization/funnelPlot/FunnelPlotOpDesc.scala 11.11% 8 Missing ⚠️
... and 6 more

❌ Your patch status has failed because the patch coverage (13.29%) is below the target coverage (60.00%). You can increase the patch coverage or adjust the target coverage.

Additional details and impacted files
@@             Coverage Diff              @@
##               main    #8365      +/-   ##
============================================
- Coverage     92.61%   92.32%   -0.30%     
+ Complexity     5059     5058       -1     
============================================
  Files          1258     1258              
  Lines         53780    53949     +169     
  Branches       6707     6731      +24     
============================================
  Hits          49811    49811              
- Misses         2313     2478     +165     
- Partials       1656     1660       +4     
Flag Coverage Δ *Carryforward flag
access-control-service 77.38% <ø> (ø)
agent-service 99.16% <ø> (ø) Carriedforward from 9cf43f2
amber 87.33% <13.29%> (-0.78%) ⬇️
computing-unit-managing-service 60.48% <ø> (ø)
config-service 87.37% <ø> (ø)
file-service 82.00% <ø> (ø)
frontend 96.59% <ø> (+<0.01%) ⬆️ Carriedforward from 9cf43f2
notebook-migration-service 83.73% <ø> (ø)
pyamber 98.52% <ø> (-0.07%) ⬇️ Carriedforward from 9cf43f2
workflow-compiling-service 72.43% <ø> (ø)

*This pull request uses carry forward flags. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bubble Chart and Histogram 2D change in1df with dropna in place. This can change data used by another branch of the exported workflow. Please keep the input unchanged and test a shared upstream DataFrame.

@kz930
kz930 marked this pull request as draft September 4, 2026 17:12
The translator no longer emits plotly into every script; it asks the operators
in the plan what they need beyond pandas. All sixteen charts here draw with
plotly, so all sixteen mix in `PlotlyStandaloneCode`, which the hierarchy and
graph charts introduce.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The input DataFrame mutation issue from my previous review is still present.

…d over

Bubble Chart and Histogram 2D dropped rows in place; Bar Chart and the
Box/Violin plot rebound the name. All four now bind their own frame.

The translator names a variable per output PORT, not per reader, so two charts
drawn from one upstream are handed the same name. A chart that drops its own
nulls through that name leaves the chart beside it drawing a table it never
received, and a single-branch workflow never notices.

Both spellings did it. `inplace=True` mutates the frame outright, and
`in1df = in1df.dropna(...)` reads like a local rebinding but renames the shared
variable, since the operator bodies are concatenated at module scope.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@kz930

kz930 commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Fixed. Bubble Chart, Histogram 2D, Bar Chart and the Box/Violin plot now bind their own frame instead of writing to the input. Covered by the same check over every operator, which comes with the verification runner.

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The charts now use a separate frame. This fixes the branch data issue.

kz930 and others added 2 commits September 8, 2026 22:00
The shared table renames the columns whose names hold the characters that end a
Python literal. These annotations name one, and are test-only: they steer which
column a parity run fills the field with, and have no effect in production.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every chart wrote output.html and output.json, and the whole plan runs as
one program in one directory, so a workflow ending in two charts kept a
single picture. The name is a placeholder now, outputHtml and outputJson,
and the translator hands each operator a stem of its own.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@kz930

kz930 commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor Author

@carloea2 this moved after your approval: each chart now names its own output files instead of sharing one. Would you take another look when you have a moment?

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The charts use input copies and separate output files. Looks good.

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The successful 2D histogram export writes the JSON file but not the HTML file. The native operator returns HTML, and the error paths also write HTML. Please write outputHtml on success and test both files.

kz930 and others added 2 commits September 18, 2026 15:53
Every other chart here writes the figure and the page beside it, and this
operator's own empty-input and all-null branches write the page too. The one
branch that draws a chart wrote only the figure, so a run that succeeded left
no page where the engine answers with one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@kz930

kz930 commented Sep 18, 2026

Copy link
Copy Markdown
Contributor Author

Fixed in 34753c0: the branch that draws the chart now writes the page beside the figure, which is what the other fifteen charts here do and what this operator's own empty-input and all-null branches already did. Two tests cover it, one on the generated code and one running it to check both files land.

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Histogram2D now writes the HTML output as well as the figure data. The earlier blocker is fixed. Looks good.

…-integration

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No new finding in the current test-tagging change. All 129 focused tests and scalafmtCheckAll pass with PlotlyStandaloneCode from merged #8344 supplied locally. Six probes also confirm Bubble and Histogram2D preserve shared inputs on valid, all-null and empty paths. The HTML and JSON output regression passes.

Command: sbt -batch "scalafmtCheckAll" "WorkflowOperator/testOnly *BarChartOpDescSpec *LineChartOpDescSpec *ContinuousErrorBandsOpDescSpec *HistogramChartOpDescSpec *Histogram2DOpDescSpec *ScatterPlotOpDescSpec *ScatterMatrixChartOpDescSpec *PieChartOpDescSpec *BubbleChartOpDescSpec *BoxViolinPlotOpDescSpec *StripChartOpDescSpec *ECDFPlotOpDescSpec *HeatMapOpDescSpec *CandlestickChartOpDescSpec *FunnelPlotOpDescSpec *DotPlotOpDescSpec *ChartSharedInputReviewSpec -- -oDF".

Please refresh the branch from main and rerun CI. Its current checks are still red, so this is not a merge-ready confirmation.

@kz930

kz930 commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

Merged main into the branch, so PlotlyStandaloneCode from #8344 now resolves and CI is green on 4387a63. Thanks for the extra probes.

@kz930
kz930 marked this pull request as ready for review October 13, 2026 06:45

@carloea2 carloea2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The refreshed branch passes all 129 focused tests across 17 suites, including the generated-script checks for shared inputs, empty tables and nulls. Formatting passes without supplying dependency fixtures. Current CI is green. Looks good.

@carloea2

Copy link
Copy Markdown
Contributor

@aglinxinyuan, the refreshed branch passes all 129 focused tests and CI. I have approved it. Could you review it when you have time?

@aglinxinyuan aglinxinyuan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@aglinxinyuan
aglinxinyuan added this pull request to the merge queue Oct 15, 2026
Merged via the queue into apache:main with commit 6a101ad Oct 15, 2026
34 checks passed
@kz930
kz930 deleted the feat/standalone-viz-a2 branch October 19, 2026 08:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Export the charts that draw over a table's columns

4 participants