Skip to content

gh-117634: Remove _get_[both]sep[s]() calls in os.path - #117635

Closed
nineteendo wants to merge 5 commits into
python:mainfrom
nineteendo:remove-get_bothseps
Closed

gh-117634: Remove _get_[both]sep[s]() calls in os.path#117635
nineteendo wants to merge 5 commits into
python:mainfrom
nineteendo:remove-get_bothseps

Conversation

@nineteendo

@nineteendonineteendo commented Apr 8, 2024

Copy link
Copy Markdown
Contributor

Benchmark

ntpath.py

::test.bat@echooffecho split() && python -m timeit -s "import before.ntpath""before.ntpath.split('foo')"&& python -m timeit -s "import after.ntpath""after.ntpath.split('foo')"echo ismount() && python -m timeit -s "import before.ntpath""before.ntpath.ismount('//')"&& python -m timeit -s "import after.ntpath""after.ntpath.ismount('//')"echo expanduser() && python -m timeit -s "import before.ntpath""before.ntpath.expanduser('~')"&& python -m timeit -s "import after.ntpath""after.ntpath.expanduser('~')"echo expanduser('~' + 'a' * 100) && python -m timeit -s "import before.ntpath""before.ntpath.expanduser('~' + 'a' * 100)"&& python -m timeit -s "import after.ntpath""after.ntpath.expanduser('~' + 'a' * 100)"
split()
500000 loops, best of 5: 867 nsec per loop # before
500000 loops, best of 5: 801 nsec per loop # after
# -> 1.08x faster
ismount()
200000 loops, best of 5: 1.21 usec per loop # before
200000 loops, best of 5: 1.16 usec per loop # after
# -> 1.04x faster
expanduser()
500000 loops, best of 5: 977 nsec per loop # before
500000 loops, best of 5: 965 nsec per loop # after
# -> no difference
expanduser('~' + 'a' * 100)
20000 loops, best of 5: 18 usec per loop # before
20000 loops, best of 5: 11.3 usec per loop # after
# -> 1.59x faster (for long usernames)

posixpath.py

# test.shecho"isabs()"&& python -m timeit -s "import before.posixpath""before.posixpath.isabs('/')"&& python -m timeit -s "import after.posixpath""after.posixpath.isabs('/')"echo"join()"&& python -m timeit -s "import before.posixpath""before.posixpath.join('foo')"&& python -m timeit -s "import after.posixpath""after.posixpath.join('foo')"echo"split()"&& python -m timeit -s "import before.posixpath""before.posixpath.split('foo')"&& python -m timeit -s "import after.posixpath""after.posixpath.split('foo')"echo"basename()"&& python -m timeit -s "import before.posixpath""before.posixpath.basename('foo')"&& python -m timeit -s "import after.posixpath""after.posixpath.basename('foo')"echo"dirname()"&& python -m timeit -s "import before.posixpath""before.posixpath.dirname('foo')"&& python -m timeit -s "import after.posixpath""after.posixpath.dirname('foo')"echo"expanduser()"&& python -m timeit -s "import before.posixpath""before.posixpath.expanduser('~')"&& python -m timeit -s "import after.posixpath""after.posixpath.expanduser('~')"
isabs()
1000000 loops, best of 5: 235 nsec per loop # before
1000000 loops, best of 5: 204 nsec per loop # after
# -> 1.15x faster
join()
1000000 loops, best of 5: 322 nsec per loop # before
1000000 loops, best of 5: 303 nsec per loop # after
# -> 1.06x faster
split()
1000000 loops, best of 5: 351 nsec per loop # before
1000000 loops, best of 5: 339 nsec per loop # after
# -> 1.04x faster
basename()
1000000 loops, best of 5: 284 nsec per loop # before
1000000 loops, best of 5: 257 nsec per loop # after
# -> 1.11x faster
dirname()
1000000 loops, best of 5: 286 nsec per loop # before
1000000 loops, best of 5: 262 nsec per loop # after
# -> 1.09x faster
expanduser()
200000 loops, best of 5: 1.38 usec per loop # before
200000 loops, best of 5: 1.26 usec per loop # after
# -> 1.10 faster

@nineteendo
nineteendo marked this pull request as ready for review April 8, 2024 13:27
@nineteendo
nineteendo deleted the remove-get_bothseps branch April 9, 2024 20:50
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nineteendo@erlend-aasland