<filename>Exareme-Docker/src/exareme/exareme-tools/madis/src/functions/aggregate/partialsort.py<gh_stars>0
import functions
import operator


class partialsort:
    """

    .. function:: partialsort(n,col1,col2,col3,....)

    sorts the first n columns of its input

    :Returned multiset schema:
        Columns are automatically named as col1, col2 ...


    Examples:

    >>> table1('''
    ... aa  43
    ... ac  34
    ... ab  21
    ... as  23
    ... ''')
    >>> sql("select partialsort(1,a,b) from table1")
    c1 | c2
    -------
    aa | 43
    ab | 21
    ac | 34
    as | 23

    """
    registered = True

    def __init__(self):
        self.topn = []
        self.lessval = None
        self.stepsnum = 0
        self.sortnum = None

    def step(self, *args):
        if len(args) < 2:
            raise functions.OperatorError("partialsort", "Wrong number of arguments")
        if not self.sortnum:
            self.sortnum = tuple(i for i in xrange(args[0]))
        self.topn.append(args[1:])
        self.stepsnum += 1
        pass

    def final(self):
        yield tuple('c' + str(i) for i in xrange(1, len(self.topn[0]) + 1))
        self.topn.sort(key=operator.itemgetter(*self.sortnum))
        for el in self.topn:
            yield el


if not ('.' in __name__):
    """
    This is needed to be able to test the function, put it at the end of every
    new function you create
    """
    import sys
    from functions import *

    testfunction()
    if __name__ == "__main__":
        reload(sys)
        sys.setdefaultencoding('utf-8')
        import doctest

        doctest.testmod()

<filename>Exareme-Docker/src/exareme/exareme-tools/madis/src/functions/aggregate/partialsort.py<gh_stars>0
import functions
import operator


class partialsort:
    """

    .. function:: partialsort(n,col1,col2,col3,....)

    sorts the first n columns of its input

    :Returned multiset schema:
        Columns are automatically named as col1, col2 ...


    Examples:

    >>> table1('''
    ... aa  43
    ... ac  34
    ... ab  21
    ... as  23
    ... ''')
    >>> sql("select partialsort(1,a,b) from table1")
    c1 | c2
    -------
    aa | 43
    ab | 21
    ac | 34
    as | 23

    """
    registered = True

    def __init__(self):
        self.topn = []
        self.lessval = None
        self.stepsnum = 0
        self.sortnum = None

    def step(self, *args):
        if len(args) < 2:
            raise functions.OperatorError("partialsort", "Wrong number of arguments")
        if not self.sortnum:
            self.sortnum = tuple(i for i in xrange(args[0]))
        self.topn.append(args[1:])
        self.stepsnum += 1
        pass

    def final(self):
        yield tuple('c' + str(i) for i in xrange(1, len(self.topn[0]) + 1))
        self.topn.sort(key=operator.itemgetter(*self.sortnum))
        for el in self.topn:
            yield el


if not ('.' in __name__):
    """
    This is needed to be able to test the function, put it at the end of every
    new function you create
    """
    import sys
    from functions import *

    testfunction()
    if __name__ == "__main__":
        reload(sys)
        sys.setdefaultencoding('utf-8')
        import doctest

        doctest.testmod()

.. function:: partialsort(n,col1,col2,col3,....)      sorts the first n columns of its input      :Returned multiset schema:         Columns are automatically named as col1, col2 ...       Examples:      >>> table1('''     ... aa  43     ... ac  34     ... ab  21     ... as  23     ... ''')     >>> sql("select partialsort(1,a,b) from table1")     c1 | c2     -------     aa | 43     ab | 21     ac | 34     as | 23 This is needed to be able to test the function, put it at the end of every     new function you create