Optimize vector-number math by avoiding RealNumber_Check #3454
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.
Take the code
pygame.Vector2((10,20)) * 30. This operation is handled in the functionvector_generic_math.Before this PR, the code checks if
PyFloat_AsDoublewill work using theRealNumber_Checkfunction, then it callsPyFloat_AsDouble. After this PR, it checks ifPyFloat_AsDoublewill work by callingPyFloat_AsDoubleand handling the error if it fails. This avoids a call by us intoRealNumber_Check(PyNumber_Checkand!PyComplex_Check). I checked the Python source code, the code inPyNumber_Checkis checking the same thingsPyFloat_AsDoubledoes, and PyComplex doesn't provide the right internal functions to be converted to a float/double.Test results:
Results are quite noisy, especially since this is a relatively small optimization. I still it's worth checking in though!
Basic testing script