⚡️ Speed up function unique_to_symmetric by 128,030%
#14
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.
📄 128,030% (1,280.30x) speedup for
unique_to_symmetricinsrc/condor/backends/casadi/__init__.py⏱️ Runtime :
2.90 seconds→2.26 milliseconds(best of5runs)📝 Explanation and details
Here’s an optimized version of your code, focused on replacing the very slow Python for-loop and double-loop assignment with vectorized NumPy indexing, minimizing creation of lists, and refactoring the symbolic-path list-comprehensions. Comments are preserved unless code was modified.
Optimizations:
Result:
This should drastically improve speed, as most of the time was in the explicit for-loop and per-element assignment, now replaced by a few fast-indexed vectorized assignments.
Note:
If
uniquecan ever have more than 2 dimensions, adjust the indexing as needed (but in common use, the above should work). If symbolic matrices are always scalar, this is fully correct. For batch symbolic, adjustments may be needed.✅ Correctness verification report:
🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-unique_to_symmetric-mct239i5and push.