Skip to main content

Algorithm Timer

Overview

An easy-to-use algorithm timer.

Mechanism

We use a context-manager and with in Python to give an convinent way to test a specific block of code. Just see the following examples.

Note that we design this plot function here to test some algorithms' runing time and you can use it to test(and plot) the time of any block of code with minor change in source code(the TimerPloter class, specifically)

Eaxmples

Fibnacci

from algotimer import Timer, TimerPloter


def fib(n):
    if n <= 2:
        return 1
    return fib(n - 1) + fib(n - 2)

def fibMemo(n):
    cache = {1: 1, 2: 1}

    def rec(n):
        if n not in cache:
            cache[n] = rec(n - 1) + rec(n - 2)
        return cache[n]
    return rec(n)


if __name__ == '__main__':
    with Timer('fib, 30') as t:
        print('fib(30) = ', fib(30))

    with Timer('fib, 35') as t:
        print('fib(35) = ', fib(35))

    with Timer('fibMemo, 30') as t:
        print('fibMemo(30) = ', fibMemo(30))

    with Timer('fibMemo, 35') as t:
        print('fibMemo(35) = ', fibMemo(35))

    ploter = TimerPloter()
    ploter.plot()

The output:

fib(30) =  832040
fib, 30 Spends 0.217 s
fib(35) =  9227465
fib, 35 Spends 2.434 s
fibMemo(30) =  832040
fibMemo, 30 Spends 0.0 s
fibMemo(35) =  9227465
fibMemo, 35 Spends 0.0 s

And we get two files: logging,csv is the time data.

fib, 30, 0.217
fib, 35, 2.434
fibMemo, 30, 0.0
fibMemo, 35, 0.0

And Timer.png, a plot of the data.

Classification

from algotimer import Timer, TimerPloter
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier

iris = datasets.load_iris()

with Timer('GaussianNB, Train'):
    gnb = GaussianNB()
    clf = gnb.fit(iris.data, iris.target)

with Timer('GaussianNB, Test'):
    y_pred = clf.predict(iris.data)
    print("Number of mislabeled points out of a total %d points : %d"
        % (iris.data.shape[0], (iris.target != y_pred).sum()))

with Timer('KNN(K=3), Train'):
    neigh = KNeighborsClassifier(n_neighbors=3)
    clf = neigh.fit(iris.data, iris.target) 

with Timer('KNN(K=3), Test'):
    y_pred = clf.predict(iris.data)
    print("Number of mislabeled points out of a total %d points : %d"
        % (iris.data.shape[0], (iris.target != y_pred).sum()))

with Timer('KNN(K=5), Train'):
    neigh = KNeighborsClassifier(n_neighbors=5)
    clf = neigh.fit(iris.data, iris.target) 

with Timer('KNN(K=5), Test'):
    y_pred = clf.predict(iris.data)
    print("Number of mislabeled points out of a total %d points : %d"
        % (iris.data.shape[0], (iris.target != y_pred).sum()))

# plot it
ploter = TimerPloter()
ploter.plot()

The output:

GaussianNB, Train Spends 0.001 s
Number of mislabeled points out of a total 150 points : 6
GaussianNB, Test Spends 0.001 s
KNN(K=3), Train Spends 0.019 s
Number of mislabeled points out of a total 150 points : 6
KNN(K=3), Test Spends 0.019 s
KNN(K=5), Train Spends 0.001 s
Number of mislabeled points out of a total 150 points : 5
KNN(K=5), Test Spends 0.01 

File logging.csv:

GaussianNB, Train, 0.001
GaussianNB, Test, 0.001
KNN(K=3), Train, 0.019
KNN(K=3), Test, 0.019
KNN(K=5), Train, 0.001
KNN(K=5), Test, 0.01

File Timer.png

Metadata

Release files for algo-timer 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for algo-timer 0.0.3
File Size Uploaded
algo-timer-0.0.3.tar.gz 3.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for algo-timer 0.0.3
File Interpreter ABI Platform
algo_timer-0.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 7.3 kB

Release files / algo-timer-0.0.3.tar.gz

Download URL algo-timer-0.0.3.tar.gz
Size 3.2 kB
Tags Source
SHA-256 checksum
How to use checksums
3da0488fe6af84adf4501863ec5bcee5a5a3fdbcfa2d649abcda071313e7a635
BLAKE2b-256 checksum
How to use checksums
a7a0ae9c10b4ff923b78372f56bd82191a63a9712bc0288a953d59b369f174b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.8

Release files / algo_timer-0.0.3-py3-none-any.whl

Download URL algo_timer-0.0.3-py3-none-any.whl
Size 4.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cc1e3cb0fae1d21351e6199a7cd293b3a89cee92a5eed1dd4b5b06a264eb4348
BLAKE2b-256 checksum
How to use checksums
bd3582e9ae6124b21493a23aab6245a41c764d8e73a27990d9c9071dcb10a485
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.6.8

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page