Repository navigation
feat(workflow-operator): volcano plot hover column - #9042
eugenegujing wants to merge 6 commits into
Conversation
Add an optional Hover column property, as on Scatter Plot, used as the hover label of each point. An empty or blank field keeps the first input column as before; a set column missing from the input yields the operator's error page.
Automated Reviewer SuggestionsBased on the
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9042 +/- ##
============================================
- Coverage 91.85% 91.72% -0.14%
- Complexity 5020 5033 +13
============================================
Files 1279 1269 -10
Lines 56192 55778 -414
Branches 7320 7202 -118
============================================
- Hits 51615 51161 -454
- Misses 2741 2778 +37
- Partials 1836 1839 +3
*This pull request uses carry forward flags. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
| config | throughput | MB/s | latency | max Δ latest / 7d | |
|---|---|---|---|---|---|
| 🔴 | bs=10 sw=10 sl=64 | 428 | 0.261 | 22,456/32,344/32,344 us | 🔴 +29.9% / 🔴 +122.7% |
| 🔴 | bs=100 sw=10 sl=64 | 964 | 0.588 | 100,071/128,656/128,656 us | 🔴 +11.4% / 🔴 +33.7% |
| 🔴 | bs=1000 sw=10 sl=64 | 1,125 | 0.687 | 877,562/1,085,247/1,085,247 us | 🔴 +16.7% / 🔴 +19.9% |
Baseline details
Latest main d6c9050 from same runner
| config | metric | PR | latest main | 7d avg | Δ latest | Δ 7d |
|---|---|---|---|---|---|---|
| bs=10 sw=10 sl=64 | throughput | 428 tuples/sec | 512 tuples/sec | 901.09 tuples/sec | -16.4% | -52.5% |
| bs=10 sw=10 sl=64 | MB/s | 0.261 MB/s | 0.313 MB/s | 0.55 MB/s | -16.6% | -52.5% |
| bs=10 sw=10 sl=64 | p50 | 22,456 us | 20,175 us | 11,350 us | +11.3% | +97.9% |
| bs=10 sw=10 sl=64 | p95 | 32,344 us | 24,897 us | 14,525 us | +29.9% | +122.7% |
| bs=10 sw=10 sl=64 | p99 | 32,344 us | 24,897 us | 17,637 us | +29.9% | +83.4% |
| bs=100 sw=10 sl=64 | throughput | 964 tuples/sec | 1,005 tuples/sec | 1,205 tuples/sec | -4.1% | -20.0% |
| bs=100 sw=10 sl=64 | MB/s | 0.588 MB/s | 0.613 MB/s | 0.735 MB/s | -4.1% | -20.0% |
| bs=100 sw=10 sl=64 | p50 | 100,071 us | 98,408 us | 88,882 us | +1.7% | +12.6% |
| bs=100 sw=10 sl=64 | p95 | 128,656 us | 115,516 us | 96,205 us | +11.4% | +33.7% |
| bs=100 sw=10 sl=64 | p99 | 128,656 us | 115,516 us | 120,754 us | +11.4% | +6.5% |
| bs=1000 sw=10 sl=64 | throughput | 1,125 tuples/sec | 1,144 tuples/sec | 1,245 tuples/sec | -1.7% | -9.6% |
| bs=1000 sw=10 sl=64 | MB/s | 0.687 MB/s | 0.698 MB/s | 0.76 MB/s | -1.6% | -9.6% |
| bs=1000 sw=10 sl=64 | p50 | 877,562 us | 869,864 us | 862,870 us | +0.9% | +1.7% |
| bs=1000 sw=10 sl=64 | p95 | 1,085,247 us | 929,807 us | 905,485 us | +16.7% | +19.9% |
| bs=1000 sw=10 sl=64 | p99 | 1,085,247 us | 929,807 us | 948,588 us | +16.7% | +14.4% |
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,467.79,200,128000,428,0.261,22456.09,32344.09,32344.09
1,100,10,64,20,2075.08,2000,1280000,964,0.588,100070.91,128656.03,128656.03
2,1000,10,64,20,17781.30,20000,12800000,1125,0.687,877561.99,1085247.22,1085247.22
kz930
left a comment
There was a problem hiding this comment.
LGTM. The empty default keeps saved workflows unchanged, and the missing-column error page is nicer than Scatter Plot's ValueError.
…over-column # Conflicts: # common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/volcanoPlot/VolcanoPlotOpDesc.scala
Remove the export saved-workflow test, compare the engine whitespace and saved-workflow tests against the default operator, and file the two required-field tests back under generatePythonCode.
What changes were proposed in this PR?
The Volcano Plot uses
hover_name=table.columns[0], so the tooltip label is whatever column comes first in the input. That is fine for a DESeq2 table starting withgeneand useless for one starting with a composite id or a number, and there is no way to change it. This PR copies Scatter Plot'sHover columnproperty over, one column only.hover_name=table.columns[0], unchanged for saved workflowshover_name=<that column>Missing hover column in table., like the existing check for the two required columns (Scatter Plot lets plotly raise aValueErrorhere)Since #8504 merged, the operator also exports a standalone script through
generateStandaloneCode(), which hadhover_name=table.columns[0]hard-coded. This PR mirrors the property there: the hover column goes in as an escaped Python literal, and a set column that the input lacks adds one moreelifto the script's column checks, writing the same error page. Whether the field counts as empty is decided by one helper for both paths, so the exported figure and the engine's cannot disagree.Independent of the PRs for the label fix (#9037) and the significance thresholds (#9039); all three touch neighbouring lines of
VolcanoPlotOpDesc.scala, so whichever lands second needs a small rebase.Figures below are the operator's generated Python from
mainand from this branch (Hover column =gene), run on the 430-gene example workflow from the issue whose first column istranscript|gene|chr|strand; the same point is hovered in both.Any related issues, documentation, discussions?
Closes #9038
PR #8504 (merged) added the
generateStandaloneCode()export path with the samehover_name=table.columns[0]; the mirroring described above is the follow-up it needed.How was this PR tested?
New tests in
VolcanoPlotOpDescSpec, written before the source change:hover_name=table.columns[0]and emits no hover checkhover_nameplus the presence check, and notable.columns[0]generateStandaloneCode: an empty field keepshover_name=table.columns[0]and adds no check; a set field is emitted as a literal plus an exact five-lineelifbranch between the required-column check and the drawing branch; a name with quotes, non-ASCII text or a backslash comes out escaped rather than decoded; whitespace-only equals emptySmoke run outside Texera (pytexera stubbed, pandas + plotly 5.24.1) on the 430-gene mock table: defaults hover-label the first point as
ENST00000000000|GENE_0000|chr2|+; Hover column =genegivesGENE_0000; Hover column =no_such_columnyields<h1>Volcano Plot failed</h1><p>Missing hover column in table.</p>. The exported script for the default and thegeneconfiguration parses withast.parse.Was this PR authored or co-authored using generative AI tooling?
Yes. Generated-by: Claude Code (claude-fable-5-1). Co-authored with Claude; the author reviewed the change before submission.