The GitHub Actions job "Benchmarks" on texera.git/main has succeeded.
Run started by GitHub user github-merge-queue[bot] (triggered by 
github-merge-queue[bot]).

Head commit for run:
004a524c27f7b30a2ed02154e203b6b9cda4fe7c / Kary Zheng 
<[email protected]>
feat(visualization): export the hierarchy and graph charts as Python (#8344)

### What changes were proposed in this PR?

Seven visualizations implement `StandaloneCodeGenerator`: the ones that
draw a structure rather than a coordinate system — tree plot, network
graph, sankey, hierarchy chart, icicle chart, dendrogram — and the word
cloud.

A visualization emits a figure rather than a frame, so it is compared as
one: number by number after both paths have drawn, which catches a
difference in the data behind the picture without failing over a layout
detail that carries no meaning. The word cloud renders an image instead,
so it is compared as the HTML that carries it.

Network Graph and Word Cloud are verified here rather than withheld.
Both had been flagged for drawing a different picture on every run,
which stopped being true once their placement was seeded, and lifting
those two rows showed three things the reason had been hiding.

Network Graph never called `manipulateTable`, the method it already had
for dropping the rows that name no edge, so a null reached `add_node`,
which refuses one outright. Word Cloud counted its words out of whatever
column it was given, and the filter that finds them uses pandas' `.str`,
which refuses anything but text, so the operator now states that. And
the Tree Plot lays itself out without igraph, which is GPL v2 and
Category X under the ASF third-party licence policy.

Stating it is not enough on its own. An attribute type rule only warns:
the property editor prints the warning and lets the workflow run, so a
user still reaches the word cloud with a column of numbers, and `.str`
ends the run on a pandas error naming an accessor nobody wrote. Both
generators now answer that the way they already answer an empty table
and a column holding no words, with the operator's own error page. This
changes what the engine does with such a workflow: it used to fail, and
now it draws the reason. Both sides ask the same question in the same
words, so the two paths still agree on what they produce.


### Any related issues, documentation, discussions?

Part of #8325, 13 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 #7969, the Tree Plot's Category X dependency.

Closes #8416, 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
verification lands it is also run through the engine and through its
generated script, on every configuration its schema offers, and the two
answers compared; this branch is cut from main and does not carry that
machinery, so those runs are not on this diff's CI. The word cloud's
guard is compared on a table its column knob points at a numeric column,
so the two paths are held to the same answer for input the type rule
only warned about; that row arrives with the verification harness, like
the others.

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

Generated-by: Claude Code (Opus 5)

---------

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>

Report URL: https://github.com/apache/texera/actions/runs/36488063082

With regards,
GitHub Actions via GitBox

Reply via email to