Skip to main content

your_description_here

Project description

pybench:

PyPI version PyPI - Downloads License: MIT Tests pre-commit Code style: black Imports: isort

What is it?

pybench is a simple benchmarking framework that mimics pytest syntax. Simply write create files beginning with "bench_" and pybench will discover those files and benchmark all functions starting with "bench_". Internally, pybench relies on Python's standard timeit library to produce benchmark statistics. These statistics, along with metadata such as your platform, available CPUs, RAM, project version, commit id, and more, are stored in a parquet file for further analysis. That way, you have access to the raw data necessary to track performance over time and commits, identify regressions, and any other analysis you may want to do.

Usage:

Dependencies

  • polars
  • toml
  • tqdm

Installing

The easiest way is to install cli-pybench is from PyPI using pip:

pip install cli-pybench

Quickstart

Installing the library will expose a pybench command in your terminal. Although the benchmark directory is configurable, by convention, create a folder called "benchmarks" in your project root. Then, create a file prefixed with "bench_". In that file, write a function starting with "bench_".

def bench_my_sum():
    return 1 + 1

Then, simply run pybench from your terminal! It should look something like this:

starting benchmark session ...
default config: Config(benchpath='benchmarks', repeat=30, number=1, warmups=0, garbage_collection=False)
running on Linux-5.15.123.1-microsoft-standard-WSL2-x86_64-with-glibc2.35 with x86_64, available cpus: 16, RAM: 10.05GB

/home/cangyuanli/Documents/Projects/cli-pybench/benchmarks/bench_pybench.py
100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:00<00:00, 184.31it/s]

Then, a "results.parquet" file will appear in your "benchmarks/" folder. If you want to change your configuration, you can do it globally through your "pyproject.toml" file like so:

[tool.pybench]
repeat = 100
number = 10
warmups = 1

To learn more about the repeat and number parameters, see the documentation for timeit.repeat here: https://docs.python.org/3/library/timeit.html.

You can also change your configuration for a specific function through the pybench.config decorator. Here's an example:

import pybench

@pybench.config(repeat=1_000, number=100)
def bench_my_sum():
    return 1 + 1

pybench provides two other decorators. One is the pybench.skipif decorator. It simply skips the function if the input evaluates to True. This is useful for a variety of reasons, for example, if you have a long-running benchmark that you do not want to run frequently. of course, all decorators can be combined.

import pybench

@pybench.config(repeat=1_000, number=100)
@pybench.skipif(True)
def bench_my_sum():
    1 + 1

The final decorator is the pybench.parametrize decorator. This benchmarks your function for each input in a given list of inputs. There are two syntaxes for this. The first is the dictionary syntax.

import pybench

@pybench.parametrize({"a": [1, 2], "b": [5, 8, 9]})
def bench_my_sum(a, b):
    a + b

This will benchmark bench_my_sum for the product of "a" and "b". Users of pytest may be more familiar with the second syntax.

import pybench

@pybench.parametrize(("a", "b"), [(1, 2), (3, 4)])
def bench_my_sum(a, b):
    a + b

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cli_pybench-0.0.9.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

cli_pybench-0.0.9-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file cli_pybench-0.0.9.tar.gz.

File metadata

  • Download URL: cli_pybench-0.0.9.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for cli_pybench-0.0.9.tar.gz
Algorithm Hash digest
SHA256 505dfd7c06e95ad033104f5e64b9998518e718f3d0397da800b6bfbade4ccee7
MD5 680f09705efdd4f287de99c8f2e9fa79
BLAKE2b-256 a9217e73b52ad5782fb6f39f0ec3148741598911580a9f7a9378aa8c47125b82

See more details on using hashes here.

File details

Details for the file cli_pybench-0.0.9-py3-none-any.whl.

File metadata

  • Download URL: cli_pybench-0.0.9-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for cli_pybench-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 227365ebef6aa5380a8721d7f217153d5e0f3be82861f2cdc235c6b14585fde9
MD5 b2d7679cacf81fef3f724a319be688fd
BLAKE2b-256 0cdec01106765226e807c9143f194ae75265774a38aab649af05b133835cc20b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page