added powersort in sorts/power_sort.py - #13219
Conversation
…ing links to the Wikipedia page and the original paper by Munro and Wild.
for more information, see https://pre-commit.ci
…ted import statements, removed unnecessary whitespace, and enhanced comments for better readability. Adjusted key function handling for reverse sorting and ensured proper handling of numeric and non-numeric types.
|
ruff issues fixed |
There was a problem hiding this comment.
Click here to look at the relevant links ⬇️
🔗 Relevant Links
Repository:
Python:
Automated review generated by algorithms-keeper. If there's any problem regarding this review, please open an issue about it.
algorithms-keeper commands and options
algorithms-keeper actions can be triggered by commenting on this PR:
@algorithms-keeper reviewto trigger the checks for only added pull request files@algorithms-keeper review-allto trigger the checks for all the pull request files, including the modified files. As we cannot post review comments on lines not part of the diff, this command will post all the messages in one comment.NOTE: Commands are in beta and so this feature is restricted only to a member or owner of the organization.
| return start + 1 | ||
|
|
||
|
|
||
| key_func = key if key else lambda x: x |
There was a problem hiding this comment.
Please provide descriptive name for the parameter: x
| return run_end | ||
|
|
||
|
|
||
| def _node_power(n: int, b1: int, n1: int, b2: int, n2: int) -> int: |
There was a problem hiding this comment.
Please provide descriptive name for the parameter: n
| >>> arr | ||
| [1, 2, 3, 5, 6, 7] | ||
| """ | ||
| key_func = key if key else lambda x: x |
There was a problem hiding this comment.
Please provide descriptive name for the parameter: x
| if key: | ||
| original_key = key | ||
|
|
||
| def reverse_key(x): |
There was a problem hiding this comment.
As there is no test file in this pull request nor any test function or class in the file sorts/power_sort.py, please provide doctest for the function reverse_key
Please provide return type hint for the function: reverse_key. If the function does not return a value, please provide the type hint as: def function() -> None:
Please provide descriptive name for the parameter: x
Please provide type hint for the parameter: x
| needs_final_reverse = True | ||
| else: | ||
|
|
||
| def reverse_cmp(x): |
There was a problem hiding this comment.
As there is no test file in this pull request nor any test function or class in the file sorts/power_sort.py, please provide doctest for the function reverse_cmp
Please provide return type hint for the function: reverse_cmp. If the function does not return a value, please provide the type hint as: def function() -> None:
Please provide descriptive name for the parameter: x
Please provide type hint for the parameter: x
for more information, see https://pre-commit.ci
…rameter names for better understanding, improved comments for key functions, and ensured consistent handling of total length in calculations. This improves readability and maintainability of the code.
for more information, see https://pre-commit.ci
…ility. Adjusted whitespace and line breaks in function definitions and comments to enhance clarity without altering functionality.
|
mhmm?? |
|
@cclauss hello? |
There was a problem hiding this comment.
🟡 Changes recommended
Reverse sorting has correctness/stability issues (especially with key) and should be fixed before approval.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds a new power_sort implementation to the sorts/ module, providing an adaptive merge sort variant based on the PowerSort merging strategy.
Changes:
- Introduces run detection (
_find_run), node-power calculation (_node_power), and merging (_merge) helpers. - Implements
power_sort()with optionalkeyandreverseparameters and extensive doctest examples. - Adds a
__main__entrypoint for doctest and interactive manual testing.
File summaries
| File | Description |
|---|---|
| sorts/power_sort.py | New PowerSort-based sorting implementation with helper functions, doctests, and a manual test harness. |
Review details
Suppressed comments (1)
sorts/power_sort.py:302
reverse_cmp()is a nested function, so its docstring doctests won’t be discovered bydoctest.testmod(). Removing the docstring (or moving the helper to module scope) avoids implying there is doctest coverage here.
def reverse_cmp(element: Any) -> Any:
"""
Reverse comparison function for numeric values.
Args:
- Files reviewed: 1/1 changed files
- Comments generated: 4
- Review effort level: Lite
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| # Handle reverse sorting for non-numeric types | ||
| if ( | ||
| reverse | ||
| and needs_final_reverse | ||
| and key | ||
| and len(arr) > 0 | ||
| and not isinstance(arr[0], int | float) | ||
| ): | ||
| # For non-numeric types, we need to reverse the final result | ||
| # Check if we used numeric negation or not | ||
| arr.reverse() | ||
|
|
| # Adjust key function for reverse sorting | ||
| needs_final_reverse = False | ||
| if reverse: | ||
| if key: | ||
| original_key = key |
|
|
||
| Returns: | ||
| The same collection ordered according to the parameters |
| def reverse_key(element: Any) -> Any: | ||
| """ | ||
| Reverse key function for numeric values. | ||
|
|
||
| Args: | ||
| element: The element to process | ||
|
|
||
| Returns: | ||
| Negated value for numeric types, original value otherwise | ||
|
|
||
| >>> reverse_key(5) | ||
| -5 | ||
| >>> reverse_key('hello') | ||
| 'hello' | ||
| """ | ||
| val = original_key(element) | ||
| if isinstance(val, int | float): | ||
| return -val | ||
| return val | ||
|
|
Describe your change:
Checklist: