Skip to main content

A decorator for automatic algorithms optimization via fast matrix exponentiation

https://img.shields.io/travis/borzunov/cpmoptimize/master.svg https://img.shields.io/pypi/v/cpmoptimize.svg https://img.shields.io/pypi/pyversions/cpmoptimize.svg https://img.shields.io/pypi/implementation/cpmoptimize.svg

Installation

You can install the stable version of the library using pip:

sudo pip install cpmoptimize

Or install a previously downloaded and extracted package:

sudo python setup.py install

Basic Example

Suppose we want to calculate the ten millionth Fibonacci number using a program in Python. The function with a trivial algorithm is rather slow:

def fib(n):
    a = 0
    b = 1
    for i in xrange(n):
        a, b = b, a + b
    return a

result = fib(10 ** 7)

# Time: 25 min 31 sec

But if we apply the optimizing decorator, the function will give you the answer much faster:

from cpmoptimize import cpmoptimize

@cpmoptimize()
def fib(n):
    a = 0
    b = 1
    for i in xrange(n):
        a, b = b, a + b
    return a

result = fib(10 ** 7)

# Time: 18 sec (85x faster)

Description

Actually, the decorator disassembles bytecode of a function using pretty byteplay library, analyzes the code, and tries to reduce time complexity of the algorithm used in it using fast matrix exponentiation.

The decorator uses a method implemented by Alexander Skidanov in his simple optimizing interpreter.

A detailed description of the library (including an idea explanation and an interface reference) is available in English and Russian.

Author

Copyright (c) 2014, 2015 Alexander Borzunov

Release files for cpmoptimize 0.3.post2

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

Source distribution (sdist)

Source distribution for cpmoptimize 0.3.post2
File Size Uploaded
cpmoptimize-0.3.post2.tar.gz 23.9 kB Details

Release files / cpmoptimize-0.3.post2.tar.gz

Download URL cpmoptimize-0.3.post2.tar.gz
Size 23.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d65fbe4e9b6d1832931d23b2afd5d56eff0fee6d7ababd08089a4fc12c83a14e
BLAKE2b-256 checksum
How to use checksums
c74eeb2afd1c9927491afac1382625fbe86dc21eaebbb89d53b3573a8ab599e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

0.4

1 release file

This release

0.3.post2 This release

1 release file

0.3

1 release file

0.2

1 release file

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