| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
This makes some minor clarity and performance improvements to the code.
There was a problem hiding this comment.
LGTM, thanks for taking the time to look into this!
Sorry, something went wrong.
| @@ -0,0 +1 @@ | |||
| Fix possible catasrophic performance slowdown on a certain parametrization pattern involving many higher-scoped parameters. | |||
There was a problem hiding this comment.
| Fix possible catasrophic performance slowdown on a certain parametrization pattern involving many higher-scoped parameters. | |
| Fix possible catastrophic performance slowdown on a certain parametrization pattern involving many higher-scoped parameters. |
Sorry, something went wrong.
Fix pytest-dev#12355. In the issue, it was reported that the `reorder_items` has quadratic (or worse...) behavior with certain simple parametrizations. After some debugging I found that the problem happens because the "Fix items_by_argkey order" loop keeps adding the same item to the deque, and it reaches epic sizes which causes the slowdown. I don't claim to understand how the `reorder_items` algorithm works, but if as far as I understand, if an item already exists in the deque, the correct thing to do is to move it to the front. Since a deque doesn't have such an (efficient) operation, this switches to `OrderedDict` which can efficiently append from both sides, deduplicate and move to front.
| other_scoped_items_by_argkey = items_by_argkey[other_scope] | ||
| for argkey in argkeys_by_item[other_scope].get(i, ()): | ||
| other_scoped_items_by_argkey[argkey][i] = None | ||
| other_scoped_items_by_argkey[argkey].move_to_end( |
There was a problem hiding this comment.
@bluetech I've hit some corner case on PyPy where move_to_end() seems to be raising a KeyError and crashing the item collection entirely...
Sorry, something went wrong.
There was a problem hiding this comment.
Oh, nevermind. This is a regression of v8.2.2 and this PR only hit release in v8.3.0.
Nope, it was backported into 8.2.2: #13312
Sorry, something went wrong.
This patch temporarily restricts pytest version below 8.2.2 under PyPy due to a discovered regression that it introduced [[1]]. The regression has been observed on at least `pypy3.9-7.3.16`, `pypy3.10-7.3.19` and `pypy3.11-7.3.19`. It can be triggered by running the following in affected runtimes: pytest --collect-only --no-cov tests/test_abc.py tests/test_copy.py tests/test_incorrect_args.py tests/test_multidict.py tests/test_mypy.py tests/test_pickle.py tests/test_types.py tests/test_update.py tests/test_version.py [1]: pytest-dev/pytest#13312 [2]: pytest-dev/pytest#12414 [3]: pytest-dev/pytest#12409
| Back | FazBrowse Home | New Git URL |
First commit is a cleanup commit (no functional changes intended).
The second commit fixes #12355.
In the issue, it was reported that the reorder_items has quadratic (or worse...) behavior with certain simple parametrizations. After some debugging I found that the problem happens because the "Fix items_by_argkey order" loop keeps adding the same item to the deque, and it reaches epic sizes which causes the slowdown.
I don't claim to understand how the reorder_items algorithm works, but if as far as I understand, if an item already exists in the deque, the correct thing to do is to move it to the front. Since a deque doesn't have such an (efficient) operation, this switches to OrderedDict which can efficiently append from both sides, deduplicate and move to front.