mirror of https://github.com/home-assistant/core
![]() The `bisect` module exposes a `bisect_left` function which does basically what the bulk of `_lower_bound` does. From my tests, it is slightly faster (~5%) in the probably common ideal case where `arr` is short. In the worst case scenario, `bisect.bisect_left` is *much* faster. ``` >>> arr = list(range(60)) >>> cmp = 59 >>> %timeit _lower_bound(arr, cmp) 736 ns ± 6.24 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) >>> %timeit bisect_lower_bound(arr, cmp) 290 ns ± 7.77 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) ``` I doubt this is a huge bottleneck or anything, but I think it's a bit more readable, and it's more efficient, so it seems like it's mostly a win. This commit *will* add a new unconditional import for `bisect` when importing `util.dt`, and `bisect` is not currently imported for any of the standard library modules. It is possible to make this conditional by placing `import bisect` in the _lower_bound function, or in the function it's nested in. |
||
---|---|---|
.. | ||
yaml | ||
__init__.py | ||
aiohttp.py | ||
async_.py | ||
color.py | ||
decorator.py | ||
distance.py | ||
dt.py | ||
executor.py | ||
json.py | ||
location.py | ||
logging.py | ||
network.py | ||
package.py | ||
percentage.py | ||
pil.py | ||
pressure.py | ||
process.py | ||
ruamel_yaml.py | ||
ssl.py | ||
temperature.py | ||
thread.py | ||
timeout.py | ||
unit_system.py | ||
uuid.py | ||
volume.py |