perf(python): Much faster Series
construction from subclasses of standard Python types
#20166
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.
Took another look at Series construction following #20157, and found some additional large speedups (though in a more niche context).
Data composed of types that inherit from the standard builtin types (int, float, str, bytes) currently use the generic
new_object
constructor; however, it is actually still valid to use the specialised/fast-path constructors in this case. This PR makes a minor update topy_type_to_constructor
to detect the inheritance chain and assign the faster constructors.Example
Timings
Type comparison
Applying this update shows a different degree of speedup for different base types, but all speedups are significant; the table below shows timings when loading 10,000,000 elements that inherit from the given type: