Skip to main content

A simple and easy-to-use Python benchmarking library

Project description

EasyBench

Tests Docs PyPI version License: MIT Python 3.10+ Checked with mypy Black Ruff

Docs

A simple and easy-to-use Python benchmarking library.

Features

  • Three flexible benchmarking styles (decorator, class-based, and command-line)
  • Measure both execution time and estimated memory usage (see limitations)
  • Visualization of benchmark results as boxplots for analyzing distribution and outliers
  • Parametrized benchmarks to compare the same function with different input sizes
  • A pytest-like fixture system for easy test data setup
  • Complete lifecycle hooks (setup/teardown) for fine-grained benchmark control
  • Switch between normal function execution and benchmarked execution on demand
  • Customizable benchmark configuration with sorting and formatting options
  • Command-line tool to run multiple benchmarks at once
  • Multiple output formats (text tables, CSV, JSON, pandas.DataFrame)
  • Extensible reporting system for custom output destinations

Installation

pip install easybench

Optional Dependencies

EasyBench supports optional dependencies for additional features:

# Install with visualization support
pip install easybench[all]

The all option includes:

  • matplotlib: For visualization and plotting benchmark results
  • seaborn: For enhanced statistical visualizations
  • pandas: For outputting benchmark results as DataFrames
  • tqdm: For progress tracking during benchmark execution

Quick Start

Open In Colab

There are 3 ways to benchmark with easybench:

  1. @bench decorator

    from easybench import bench
    
    # Add @bench with function parameters
    @bench(item=123, big_list=lambda: list(range(1_000_000)))
    def insert_first(item, big_list):
        big_list.insert(0, item)
    
    • When you need fresh data for each trial, use a function or lambda to generate new data on demand.
      (like lambda: list(range(1_000_000)) in the above)
  2. EasyBench class

    from easybench import EasyBench, BenchConfig
    
    class BenchListOperation(EasyBench):
        # Benchmark configuration
        bench_config = BenchConfig(
            trials=10,
            memory=True,
            sort_by="avg"
        )
    
        # Setup for each trial
        def setup_trial(self):
            self.big_list = list(range(1_000_000))
    
        # Benchmark methods (must start with bench_)
        def bench_insert_first(self):
            self.big_list.insert(0, 123)
    
        # You can define multiple benchmark methods
        def bench_pop_first(self):
            self.big_list.pop(0)
    
    if __name__ == "__main__":
        # Run benchmark
        BenchListOperation().bench()
    
  3. easybench command

    1. Create a benchmarks directory

    2. Put bench_*.py scripts in the directory:

      from easybench import fixture
      
      # Fixture for each trial
      @fixture(scope="trial")
      def big_list():
          return list(range(1_000_000))
      
      # Benchmark functions (must start with bench_)
      def bench_insert_first(big_list):
          big_list.insert(0, 123)
      
      # You can define multiple benchmark functions
      def bench_pop_first(big_list):
          big_list.pop(0)
      
    3. Run easybench command

      easybench --trials 10 --memory --sort-by avg
      

Example of benchmark results:

  • Single benchmark

    Benchmark Results (5 trials):
    
    Function        Avg Time (s)  Min Time (s)  Max Time (s)
    --------------------------------------------------------
    insert_first        0.001568      0.001071      0.003265
    
  • Multiple benchmarks

    EasyBench Benchmark Result

  • Boxplot Visualization

    Boxplot Visualization

  • Violinplot Visualization

    Violinplot Visualization

  • Lineplot Visualization

    Lineplot Visualization

Usage

For detailed usage instructions, please refer to the documentation.

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

easybench-0.1.27.tar.gz (390.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

easybench-0.1.27-py3-none-any.whl (38.8 kB view details)

Uploaded Python 3

File details

Details for the file easybench-0.1.27.tar.gz.

File metadata

  • Download URL: easybench-0.1.27.tar.gz
  • Upload date:
  • Size: 390.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for easybench-0.1.27.tar.gz
Algorithm Hash digest
SHA256 2c72fe20490ffe4813d556935facef027646b9e71db4bb94c3cf9a28a58ff9d1
MD5 93d6db66bdae91cec37af8d47dcdeb20
BLAKE2b-256 832dd8285be1a191b4e87c7253907d02e5f05e1bb913e7f015947a7649398ffe

See more details on using hashes here.

File details

Details for the file easybench-0.1.27-py3-none-any.whl.

File metadata

  • Download URL: easybench-0.1.27-py3-none-any.whl
  • Upload date:
  • Size: 38.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for easybench-0.1.27-py3-none-any.whl
Algorithm Hash digest
SHA256 149444f4c7b253e8cf9ce2846cc1e91ed531baca611fb2be37ac3515b89a8463
MD5 e0f021a51f2ffca02214687c1a3a37a4
BLAKE2b-256 917285b4595cfde09a38d50aca05eb3f0a6c594bba44f89fa7170810da3dfccc

See more details on using hashes here.

Supported by

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