Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG]: Time for name property on enum grows with enum size #5031

Open
3 tasks done
niteria opened this issue Feb 20, 2024 · 0 comments
Open
3 tasks done

[BUG]: Time for name property on enum grows with enum size #5031

niteria opened this issue Feb 20, 2024 · 0 comments
Labels
triage New bug, unverified

Comments

@niteria
Copy link

niteria commented Feb 20, 2024

Required prerequisites

What version (or hash if on master) of pybind11 are you using?

>=2.10.0, same as pybind/python_example

Problem description

The Enum.name property implemented in #1345 has an unexpected performance characteristic.
Namely the larger the enum the longer it takes.

I believe this function gets called

inline str enum_name(handle arg) {
and it's on average O(n) in the size of the enum.

The example is synthetic, but I've run into this being a problem in a real code base.

Reproducible example code

I've created a reproducible example here: https://github.com/niteria/python_example/tree/linear-enum-name-repro

It just wraps 3 different sizes of enums and measures the time taken by enum.name.

niteria/python_example@3b06300 is the only change on top of pybind/python_example.

To run:

~/tmp/python_example$ pip install .
~/tmp/python_example$ python test.py

Output on my computer:

$ python test.py 
Small time: 0.009021997451782227 seconds
Medium time: 0.31952929496765137 seconds
Large time: 3.216634511947632 seconds

Is this a regression? Put the last known working version here if it is.

Not a regression

@niteria niteria added the triage New bug, unverified label Feb 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
triage New bug, unverified
Projects
None yet
Development

No branches or pull requests

1 participant