⚡️ Speed up function _handle_sublists by 16%
#130
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.
📄 16% (0.16x) speedup for
_handle_sublistsinsrc/bokeh/plotting/graph.py⏱️ Runtime :
824 microseconds→707 microseconds(best of250runs)📝 Explanation and details
The optimization replaces two separate generator expressions (
any()andall()) with explicitforloops that provide better short-circuiting behavior and avoid multiple iterations over the inputvalues.Key optimizations:
Single-pass detection: Instead of using
any(isinstance(x, (list, tuple)) for x in values)which iterates through all values, the optimized version uses a manual loop that breaks immediately upon finding the first non-scalar element, settinghas_non_scalar = True.Early exit validation: The validation loop that checks for mixed types also exits immediately when finding the first invalid element, rather than checking all elements via
all().Reduced iterations: The original code potentially iterates through
valuesthree times (once forany(), once forall(), once for the list comprehension), while the optimized version only iterates twice maximum.Performance impact:
Context relevance:
The function is called within
from_networkx()which processes NetworkX graph node and edge attributes. This is likely in a hot path when converting large graphs, making the 16% overall speedup meaningful for graph visualization workflows. The optimization particularly benefits scenarios with many scalar attributes (common in graph data) while maintaining identical error handling and output behavior.✅ Correctness verification report:
🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-_handle_sublists-mhwcs44tand push.