Skip to content
Optimizing Python applications without mutilation code
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
docs
example
opyum
tests
.coveragerc
.gitignore
AUTHORS
CHANGELOG
INSTALL
LICENSE
MANIFEST.in
README.md
REQUIREMENTS.txt
setup.py
tox.ini

README.md

opyum

version downloads license status pyversions

Description

Optimizing Python applications without mutilation code.

Use the automatic modification of AST for code optimization, which is transparent to the user and requires the addition of only a few lines.

Usage

Decorator:

from opyum import optimize

@optimize
def function_for_optimize():
    ...

Import-hook:

import opyum
opyum.activate()

# other imports

"With" syntax:

import opyum

with opyum.activate:
    # other imports

Command-line mode:

Show optimized source:

$ opyum show myfile.py

Diff between original source and optimized source:

$ opyum diff myfile.py

Console diff (with "-c" or "--console" option):

console diff example

Custom app diff (with "--app" option):

app diff example

By default, html diff (without options):

app diff example

List of optimizations

####Constant folding

Before:

x = 7 * 24 * 60 * 60
y = [i ** 2 for i in range(10) if i % 2 == 0]
z = sum(range(1000))

After:

x = 604800
y = [0, 4, 16, 36, 64]
z = 499500

####"'Power' to 'multiplication'" optimization

Before:

x1 = a ** (-2)
x2 = a ** (-1)
x3 = a ** ( 0)
x4 = a ** ( 1)
x5 = a ** ( 2)

After:

x1 = 1 / (a * a)
x2 = 1 / a
x3 = 1
x4 = a
x5 = a * a

####"'Yield' to 'yield from'" optimization

Before:

for x in some_expression:
    yield x

After

yield from some_expression

####Builtin constant propagation

Before:

from math import pi
def circumference(r):
    return 2 * pi * r

After:

from math import pi
def circumference(r):
    return 2 * 3.141592653589793 * r

####Custom constant propagation

Before:

C_PI = 3.141592653589793

def circumference(r):
    return 2 * C_PI * r

After:

C_PI = 3.141592653589793

def circumference(r):
    return 2 * 3.141592653589793 * r

####Dead code elimination

Before:

def do_something():
    return 1
    print('returning 1')

if condition1:
    pass
elif condition2:
    do_something()
else:
    pass

After:

def do_something():
    return 1

if not condition1 and condition2:
    do_something()

Installation

Installation is simple with pip:

$ pip install opyum

or with setuptools:

$ easy_install opyum

Documentation

opyum.readthedocs.org

opyum.rtfd.org

You can’t perform that action at this time.