view numerics/reduce.py @ 126:575c8e44227c

this should work and shit
author Jeff Hammel <k0scist@gmail.com>
date Mon, 16 Mar 2015 19:55:41 -0700
parents d255058333b2
children c9ae21955ca5
line wrap: on
line source

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
reduce a vector to a scalar
"""

# imports
import sys
from .filters import mean
from .manipulate import FloatParser
from .write import CSVWriter

# module globals
__all__ = ['ReduceParser']


class ReduceParser(FloatParser):
    """CLI option parser"""

    # reducing function
    function = lambda x: raise NotImplemented("Abstract base class")

    def __init__(self, **kwargs):
        kwargs.setdefault('description', __doc__)
        argparse.ArgumentParser.__init__(self, **kwargs)
        self.options = None

    def __call__(self, *args):

        # parse command line options
        self.parse_args(args or sys.argv[1:])

        # read data
        columns = self.typed_data()
        if not columns:
            self.error("No data given")

        # calculate scalars
        data = [self.function(column) for column in column]

        # write CSV
        writer = CSVWriter(options.output)
        writer.write([data])