Metadata-Version: 1.1
Name: decorated_options
Version: 0.1.0
Summary: Function decorator to make argument passing saner.
Home-page: https://github.com/musically-ut/decorated_options
Author: Utkarsh Upadhyay
Author-email: mail@musicallyut.in
License: BSD
Description: ========
        Overview
        ========
        
        
        
        Function decorator to make argument passing saner.
        
        I often have to write a function which runs a simulation/learning task which I
        need to run for several different parameters. This initially is manageable, but
        then slowly configuration creep starts to happen: I keep adding more and more
        parameters to the functions which run the simulations and keep making my old
        code more and more fragile.
        
        I wrote ``decorated_options`` to decouple the arguments for different set of experiments.
        
        In brief,  ``decorated_options`` converts this:
        
        ::
        
            def run(max_num_followers, num_segments, is_hawkes):
                # ...
                # ...
        
            # tmp = run_multiple_followers(max_num_followers=10, num_segments=10, is_hawkes=True)
            # tmp = run_multiple_followers(max_num_followers=100, num_segments=10, is_hawkes=False)
            # tmp = run_multiple_followers(max_num_followers=10, num_segments=50, is_hawkes=True)
            tmp = run_multiple_followers(max_num_followers=1000, num_segments=100, is_hawkes=False)
        
        
        to:
        
        ::
        
            from decorated_options import Options, optioned
        
            @optioned('opts')
            def run(max_num_followers, num_segments, is_hawkes):
                # ...
                # ...
        
        
            opts = Options(max_num_followers=10, num_segments=10, is_hawkes=True)
            # tmp = run_multiple_followers(opts=opts)
            # tmp = run_multiple_followers(max_num_followers=100, is_hawkes=False, opts=opts)
            # tmp = run_multiple_followers(num_segments=50, is_hawkes=False, opts=opts)
            tmp = run_multiple_followers(max_num_followers=1000, num_segments=100, is_hawkes=False)
        
        
        
        * Benefits over ``**kwargs`` in receiving function:
        
          1. Early reporting of errors at call-time.
          2. No need to unpack the values.
          3. Default values do not have to be hard-coded.
          4. Allows progressive improvement, no need to change old code which uses positional arguments.
        
        * Benefits over ``**dict`` while calling:
        
          1. Easier updating/overriding of values
          2. Positional arguments also work
          3. Guaranteed immutability (throws Exceptions on attempted violations.)
        
        * Benefits over default values in receiving function:
        
          1. ``Options`` objects can save defaults for multiple settings.
          2. De-couples default values from the functions themselves.
        
        
        
        Installation
        ============
        
        ::
        
            pip install git+https://github.com/musically-ut/decorated_options.git@master#egg=decorated_options
        
        Development
        ===========
        
        To run the all tests run::
        
            tox
        
        Note, to combine the coverage data from all the tox environments run:
        
        .. list-table::
            :widths: 10 90
            :stub-columns: 1
        
            - - Windows
              - ::
        
                    set PYTEST_ADDOPTS=--cov-append
                    tox
        
            - - Other
              - ::
        
                    PYTEST_ADDOPTS=--cov-append tox
        
        
        Changelog
        =========
        
        0.1.0 (2016-07-24)
        -----------------------------------------
        
        * First release on PyPI.
        
Keywords: decorators,data-science,configuration,arguments
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: Unix
Classifier: Operating System :: POSIX
Classifier: Operating System :: Microsoft :: Windows
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Topic :: Utilities
