Skip to main content

A python library to measure algorithms execution time and compare with its theoretical complexity

Project description

Almetro Library

version number: 1.0.7 author: Arnour Sabino

Overview

A python library to measure algorithms execution time and compare with its theoretical complexity.

Build Status

Installation / Usage

To install use pip:

$ pip install almetro

Or clone the repo:

$ git clone https://github.com/arnour/almetro.git
$ python setup.py install

Information

Almetro uses timeit module from python to time your algorithms.

See more here

Examples

Applying Almetro to a quadratic algorithm:

import almetro
from almetro.algorithms import loop_n_quadratic
from almetro.complexity import cn_quadratic
from almetro.instance import growing

metro = almetro\
            .new()\
            .with_execution(trials=5)\
            .with_instances(instances=20, provider=growing(initial_size=100, growth_size=100))\
            .metro(algorithm=loop_n_quadratic, complexity=cn_quadratic)

chart = metro.chart()

chart.show()

Chart Almetro n quadratic


Applying Almetro to a lg n algorithm:

import almetro
from almetro.algorithms import loop_n_log
from almetro.complexity import clog_n
from almetro.instance import growing

metro = almetro\
            .new()\
            .with_execution(trials=100)\
            .with_instances(instances=20, provider=growing(initial_size=10000, growth_size=10000))\
            .metro(algorithm=loop_n_log, complexity=clog_n)

chart = metro.chart()

chart.show()

Chart Almetro lg n


Customazing execution:

import almetro
from almetro.complexity import Complexity
from almetro.instance import generator

my_custom_complexity = Complexity(
    theoretical=lambda v=1, e=1, c=1: v * v,
    experimental=lambda v=1, e=1, c=1: v + e,
    text='O(v^2)',
    latex=r'$\mathcal{O}(v^2)$'
)

# You need to provide instances as dict: {'name': '', 'size': {}, 'value': {}}
# Size must contains all needed theoretical complexity arguments
# Value must contain all needed algorithms arguments

def my_custom_instances(n):
    g = create_some_graph()
    for _ in range(n):
        yield {
            'name': 'my instance name',
            'size': {'v': len(g.nodes()), 'e': len(g.edges())}, 'c': some_order_value(),
            'value': {
                'graph': g,
                'v': len(g.nodes())
            }
        }

def my_custom_algorithm(graph, v):
    # Do some stuff
    pass

N = 50

instances_generator = my_custom_instances(N)

# Trials determine how many times each instance will be repeated for Almetro to pick the min time.
metro = almetro\
            .new()\
            .with_execution(trials=5)\
            .with_instances(instances=N, provider=generator(instances_generator)\
            .metro(algorithm=my_custom_algorithm, complexity=my_custom_complexity)

metro.chart().show()

Chart Almetro v^2

metro.table().show()

Table Almetro v^2


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

almetro-1.0.7.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

almetro-1.0.7-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file almetro-1.0.7.tar.gz.

File metadata

  • Download URL: almetro-1.0.7.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5

File hashes

Hashes for almetro-1.0.7.tar.gz
Algorithm Hash digest
SHA256 fc36e46bf75d97c4a120ee4645e95f7c088ebefd6a279ce6c7cd9fe09ed1155a
MD5 d1616dcc53a1049ac882c6b6f0f4bcdc
BLAKE2b-256 6e24136c3e64edc3c1d5c3a162a5aae7dfa478d6e1d262fed5cefc1f40f4e6f7

See more details on using hashes here.

File details

Details for the file almetro-1.0.7-py3-none-any.whl.

File metadata

  • Download URL: almetro-1.0.7-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5

File hashes

Hashes for almetro-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 465e4fc324870c58cdd7ee9b037b0172b194334e1fd70b32e75101eb55b4944a
MD5 c750721b06e6be910848db43b9135056
BLAKE2b-256 f42aecf2c10de34a628b232a80397fa23da45ee72c496bf15a7acbd973cfe29c

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