From 49206dc9c5974006eb0fd08987da8e540fe70ad1 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Wed, 12 Mar 2025 14:48:45 +0400 Subject: [PATCH 1/6] Add the `random` benchmark --- pyperformance/data-files/benchmarks/MANIFEST | 1 + .../benchmarks/bm_random/pyproject.toml | 10 ++++ .../benchmarks/bm_random/run_benchmark.py | 55 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 pyperformance/data-files/benchmarks/bm_random/pyproject.toml create mode 100644 pyperformance/data-files/benchmarks/bm_random/run_benchmark.py diff --git a/pyperformance/data-files/benchmarks/MANIFEST b/pyperformance/data-files/benchmarks/MANIFEST index 2d2e5bf5..55ce5408 100644 --- a/pyperformance/data-files/benchmarks/MANIFEST +++ b/pyperformance/data-files/benchmarks/MANIFEST @@ -71,6 +71,7 @@ pprint pyflate python_startup python_startup_no_site +random raytrace regex_compile regex_dna diff --git a/pyperformance/data-files/benchmarks/bm_random/pyproject.toml b/pyperformance/data-files/benchmarks/bm_random/pyproject.toml new file mode 100644 index 00000000..b7aebaee --- /dev/null +++ b/pyperformance/data-files/benchmarks/bm_random/pyproject.toml @@ -0,0 +1,10 @@ +[project] +name = "pyperformance_bm_random" +requires-python = ">=3.8" +dependencies = ["pyperf"] +urls = {repository = "https://github.com/python/pyperformance"} +dynamic = ["version"] + +[tool.pyperformance] +name = "random" +tags = "math" diff --git a/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py b/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py new file mode 100644 index 00000000..c3ff4004 --- /dev/null +++ b/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py @@ -0,0 +1,55 @@ +"""Test the performance of random module. + +This benchmark was available as `python -m random --test` in Python 3.13. + +Authors: Hugo van Kemenade (original), Semyon Moroz (pyperformance port). +""" + +import random + +import pyperf + + +def bench_func(func, args): + def wrapper(loops): + range_it = range(loops) + t0 = pyperf.perf_counter() + + for _ in range_it: + func(*args) + + return pyperf.perf_counter() - t0 + + return wrapper + + +BENCHMARKS = ( + # (func, args) + (random.random, ()), + (random.normalvariate, (0.0, 1.0)), + (random.lognormvariate, (0.0, 1.0)), + (random.vonmisesvariate, (0.0, 1.0)), + (random.binomialvariate, (15, 0.60)), + (random.binomialvariate, (100, 0.75)), + (random.gammavariate, (0.01, 1.0)), + (random.gammavariate, (0.1, 1.0)), + (random.gammavariate, (0.1, 2.0)), + (random.gammavariate, (0.5, 1.0)), + (random.gammavariate, (0.9, 1.0)), + (random.gammavariate, (1.0, 1.0)), + (random.gammavariate, (2.0, 1.0)), + (random.gammavariate, (20.0, 1.0)), + (random.gammavariate, (200.0, 1.0)), + (random.gauss, (0.0, 1.0)), + (random.betavariate, (3.0, 3.0)), + (random.triangular, (0.0, 1.0, 1.0 / 3.0)), +) + + +if __name__ == '__main__': + runner = pyperf.Runner() + runner.metadata['description'] = "random benchmark" + + for func, args in BENCHMARKS: + name = f"random.{func.__name__}{args!r}" + runner.bench_time_func(name, bench_func(func, args)) From 65022f0464457c11abd6722ee334455b3a6167e3 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Thu, 13 Mar 2025 15:49:41 +0400 Subject: [PATCH 2/6] Update run_benchmark.py Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- pyperformance/data-files/benchmarks/bm_random/run_benchmark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py b/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py index c3ff4004..bc04f4a4 100644 --- a/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py +++ b/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py @@ -2,7 +2,7 @@ This benchmark was available as `python -m random --test` in Python 3.13. -Authors: Hugo van Kemenade (original), Semyon Moroz (pyperformance port). +Authors: Guido van Rossum (original), Semyon Moroz (pyperformance port). """ import random From 98bc946f88137a20a389152852a3b122e09ab701 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Date: Wed, 17 Dec 2025 23:41:44 +0000 Subject: [PATCH 3/6] tab --- pyperformance/data-files/benchmarks/MANIFEST | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyperformance/data-files/benchmarks/MANIFEST b/pyperformance/data-files/benchmarks/MANIFEST index 2b9e21ea..a353a462 100644 --- a/pyperformance/data-files/benchmarks/MANIFEST +++ b/pyperformance/data-files/benchmarks/MANIFEST @@ -72,7 +72,7 @@ pprint pyflate python_startup python_startup_no_site -random +random raytrace regex_compile regex_dna From 473080bfbbd1f8fc2c84114d8ef874eabf7815f9 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Date: Wed, 17 Dec 2025 23:52:46 +0000 Subject: [PATCH 4/6] random.binomialvariate() only exists from Python 3.12. --- pyperformance/data-files/benchmarks/bm_random/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyperformance/data-files/benchmarks/bm_random/pyproject.toml b/pyperformance/data-files/benchmarks/bm_random/pyproject.toml index b7aebaee..0689bd57 100644 --- a/pyperformance/data-files/benchmarks/bm_random/pyproject.toml +++ b/pyperformance/data-files/benchmarks/bm_random/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pyperformance_bm_random" -requires-python = ">=3.8" +requires-python = ">=3.12" dependencies = ["pyperf"] urls = {repository = "https://github.com/python/pyperformance"} dynamic = ["version"] From c95074db331ec076fbbd4c4197416cd2de4cbd69 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Date: Wed, 17 Dec 2025 23:57:28 +0000 Subject: [PATCH 5/6] Update pyperformance/data-files/benchmarks/bm_random/run_benchmark.py --- .../data-files/benchmarks/bm_random/run_benchmark.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py b/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py index bc04f4a4..44b8a801 100644 --- a/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py +++ b/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py @@ -48,8 +48,8 @@ def wrapper(loops): if __name__ == '__main__': runner = pyperf.Runner() - runner.metadata['description'] = "random benchmark" + runner.metadata['description'] = 'random benchmark: core random distributions' for func, args in BENCHMARKS: - name = f"random.{func.__name__}{args!r}" + name = f'random.{func.__name__}{args}' runner.bench_time_func(name, bench_func(func, args)) From d9769ec176da576f939bd4782ed9f25cb7948316 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Date: Thu, 18 Dec 2025 00:11:06 +0000 Subject: [PATCH 6/6] Apply suggestions from code review --- .../data-files/benchmarks/bm_random/run_benchmark.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py b/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py index 44b8a801..d3ed7a77 100644 --- a/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py +++ b/pyperformance/data-files/benchmarks/bm_random/run_benchmark.py @@ -1,8 +1,9 @@ """Test the performance of random module. -This benchmark was available as `python -m random --test` in Python 3.13. +This benchmark was available as `python -m random --test` in Python 3.14. -Authors: Guido van Rossum (original), Semyon Moroz (pyperformance port). +Authors: Guido van Rossum (original), + Semyon Moroz & Adam Turner (pyperformance port). """ import random