Metadata-Version: 1.1
Name: opyum
Version: 0.2
Summary: Optimizing Python applications without mutilation code
Home-page: https://github.com/Amper/opyum
Author: Alexander Marshalov
Author-email: _@marshalov.org
License: BSD 3-Clause License
Description: # opyum
        
        [![version](https://img.shields.io/pypi/v/opyum.svg)](http://pypi.python.org/pypi/opyum)
        [![downloads](https://img.shields.io/pypi/dw/opyum.svg)](http://pypi.python.org/pypi/opyum)
        [![license](https://img.shields.io/pypi/l/opyum.svg)](http://pypi.python.org/pypi/opyum)
        [![status](https://img.shields.io/pypi/status/opyum.svg)](http://pypi.python.org/pypi/opyum)
        [![pyversions](https://img.shields.io/pypi/pyversions/opyum.svg)](http://pypi.python.org/pypi/opyum)
        
        
        ## 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**:
        
        ```python
        from opyum import optimize
        
        @optimize
        def function_for_optimize():
            ...
        ```
        
        **Import-hook**:
        
        ```python
        import opyum
        opyum.activate()
        
        # other imports
        ```
        
        **"With" syntax:**
        
        ```python
        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](https://raw.githubusercontent.com/Amper/opyum/master/example/screen1.png)
        
        Custom app diff (with "--app" option):
        
        ![app diff example](https://raw.githubusercontent.com/Amper/opyum/master/example/screen2.png)
        
        By default, html diff (without options):
        
        ![app diff example](https://raw.githubusercontent.com/Amper/opyum/master/example/screen3.png)
        
        
        ## List of optimizations
        
        ####Constant folding
        
        Before:
        
        ```python
        x = 7 * 24 * 60 * 60
        y = [i ** 2 for i in range(10) if i % 2 == 0]
        z = sum(range(1000))
        ```
        
        After:
        
        ```python
        x = 604800
        y = [0, 4, 16, 36, 64]
        z = 499500
        ```
        
        ####"'Power' to 'multiplication'" optimization
        
        Before:
        
        ```python
        x1 = a ** (-2)
        x2 = a ** (-1)
        x3 = a ** ( 0)
        x4 = a ** ( 1)
        x5 = a ** ( 2)
        ```
        
        After:
        
        ```python
        x1 = 1 / (a * a)
        x2 = 1 / a
        x3 = 1
        x4 = a
        x5 = a * a
        ```
        
        ####"'Yield' to 'yield from'" optimization
        
        Before:
        
        ```python
        for x in some_expression:
            yield x
        ```
        
        After
        
        ```python
        yield from some_expression
        ```
        
        ####Builtin constant propagation
        
        Before:
        
        ```python
        from math import pi
        def circumference(r):
            return 2 * pi * r
        ```
        
        After:
        
        ```python
        from math import pi
        def circumference(r):
            return 2 * 3.141592653589793 * r
        ```
        
        ####Custom constant propagation
        
        Before:
        
        ```python
        C_PI = 3.141592653589793
        
        def circumference(r):
            return 2 * C_PI * r
        ```
        
        After:
        
        ```python
        C_PI = 3.141592653589793
        
        def circumference(r):
            return 2 * 3.141592653589793 * r
        ```
        
        ####Dead code elimination
        
        Before:
        
        ```python
        def do_something():
            return 1
            print('returning 1')
        
        if condition1:
            pass
        elif condition2:
            do_something()
        else:
            pass
        ```
        
        After:
        
        ```python
        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](http://opyum.readthedocs.org/)
        
         [opyum.rtfd.org](http://opyum.rtfd.org/)
        
        
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: License :: OSI Approved :: BSD License
