You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[bug]: Per-item If over a collected sibling-iterator zip is rejected as UnsupportedIfFramesError #9820
Take an If whose condition is computed per item of an Iterate (left), and whose branch is a Collect of a zipped pair of left and an unrelated right Iterate. With #9789 it fails up front with UnsupportedIfFramesError: If node if combines a condition iterated by left with a branch that may carry frames of the unrelated right.
The graph is well-defined. The zipped Collect closes right's frame, so the branch value is per left item, the same frame as the condition.
What you expected to happen
For left = [1, 2] and the condition left - 1 (true for 2 only), the result should be ["fallback", [12, 22]].
_IfActivationController._is_branch_framed uses _ExecutionNodeBuilder._is_iterator_frame_open_at. After a Collect over sibling zipped iterators, that check deliberately counts both sibling frames as still open, because it cannot tell which one the Collect closes. So right looks like an open branch iterator unrelated to the condition's left.
#9789 already computes structural frame depths in _get_frame_depths. Comparing depths, rather than iterator identity, would likely accept this graph and still reject truly unrelated frames.
Resolved in PR #9843. The reported per-item If over a Collect of sibling Iterate axes now preserves condition-aligned grouped results, including [fallback, [12, 22]]. Regression coverage also checks reordered nodes and empty sibling streams; unsupported divergent axes are rejected explicitly before invocation.
Activity
JPPhoto commentedon Oct 18, 2026
Resolved in PR #9843. The reported per-item If over a Collect of sibling Iterate axes now preserves condition-aligned grouped results, including [fallback, [12, 22]]. Regression coverage also checks reordered nodes and empty sibling streams; unsupported divergent axes are rejected explicitly before invocation.