Fix non-determinism in toposort by using input order as a tie-breaker#998
Merged
copybara-service[bot] merged 1 commit intomainfrom May 9, 2026
Merged
Fix non-determinism in toposort by using input order as a tie-breaker#998copybara-service[bot] merged 1 commit intomainfrom
toposort by using input order as a tie-breaker#998copybara-service[bot] merged 1 commit intomainfrom
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
generate_bindings before passing to toposorttoposort by using input order as a tie-breaker
f0f1dac to
c743b98
Compare
When `toposort` has multiple nodes ready to process (no remaining predecessors), it puts them in a `BinaryHeap` and uses the `preferred_order` closure to sort them. If the closure says two nodes are equal, their order in the heap depended on `HashMap` iteration order, which is non-deterministic. We fix this by recording each node's index in the input iterator. If the closure returns `Equal`, we now fall back to comparing these input indices, preferring nodes that came first. This makes the sort fully deterministic. PiperOrigin-RevId: 912985573
c743b98 to
eabdbe1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix non-determinism in
toposortby using input order as a tie-breakerWhen
toposorthas multiple nodes ready to process (no remainingpredecessors), it puts them in a
BinaryHeapand uses thepreferred_orderclosure to sort them. If the closure says two nodes are equal, their order in
the heap depended on
HashMapiteration order, which is non-deterministic.We fix this by recording each node's index in the input iterator. If the
closure returns
Equal, we now fall back to comparing these input indices,preferring nodes that came first. This makes the sort fully deterministic.