def test_values(): """Test the values function.""" table = (('foo', 'bar', 'baz'), ('a', 1, True), ('b', 2), ('b', 7, False)) actual = values(table, 'foo') expect = ('a', 'b', 'b') ieq(expect, actual) ieq(expect, actual) actual = values(table, 'bar') expect = (1, 2, 7) ieq(expect, actual) ieq(expect, actual) # old style signature for multiple fields, still supported actual = values(table, ('foo', 'bar')) expect = (('a', 1), ('b', 2), ('b', 7)) ieq(expect, actual) ieq(expect, actual) # as of 0.24 new style signature for multiple fields actual = values(table, 'foo', 'bar') expect = (('a', 1), ('b', 2), ('b', 7)) ieq(expect, actual) ieq(expect, actual) actual = values(table, 'baz') expect = (True, None, False) ieq(expect, actual) ieq(expect, actual)
def __init__(self, *args, **kwargs): if len(args) == 2: self.input = args[0] self.period = args[1] elif len(args) == 3: self.input = values(args[0], args[1]) self.period = args[2] else: assert False, 'invalid arguments' self.missing = kwargs.get('missing', None)
def facet(table, field): """ Return a dictionary mapping field values to tables. E.g.:: >>> from petl import facet, look >>> look(table1) +-------+-------+-------+ | 'foo' | 'bar' | 'baz' | +=======+=======+=======+ | 'a' | 4 | 9.3 | +-------+-------+-------+ | 'a' | 2 | 88.2 | +-------+-------+-------+ | 'b' | 1 | 23.3 | +-------+-------+-------+ | 'c' | 8 | 42.0 | +-------+-------+-------+ | 'd' | 7 | 100.9 | +-------+-------+-------+ | 'c' | 2 | | +-------+-------+-------+ >>> foo = facet(table1, 'foo') >>> foo.keys() ['a', 'c', 'b', 'd'] >>> look(foo['a']) +-------+-------+-------+ | 'foo' | 'bar' | 'baz' | +=======+=======+=======+ | 'a' | 4 | 9.3 | +-------+-------+-------+ | 'a' | 2 | 88.2 | +-------+-------+-------+ >>> look(foo['c']) +-------+-------+-------+ | 'foo' | 'bar' | 'baz' | +=======+=======+=======+ | 'c' | 8 | 42.0 | +-------+-------+-------+ | 'c' | 2 | | +-------+-------+-------+ See also :func:`facetcolumns`. """ fct = dict() for v in set(values(table, field)): fct[v] = selecteq(table, field, v) return fct
def collapsedintervals(tbl, start='start', stop='stop', facet=None): """ Utility function to collapse intervals in a table. If no facet key is given, returns an iterator over `(start, stop)` tuples. If facet key is given, returns an iterator over `(key, start, stop)` tuples. .. versionadded:: 0.5.5 """ if facet is None: tbl = sort(tbl, key=start) for iv in _collapse(values(tbl, (start, stop))): yield iv else: tbl = sort(tbl, key=(facet, start)) for k, g in rowgroupby(tbl, key=facet, value=(start, stop)): for iv in _collapse(g): yield (k,) + iv
def collapsedintervals(tbl, start='start', stop='stop', facet=None): """ Utility function to collapse intervals in a table. If no facet key is given, returns an iterator over `(start, stop)` tuples. If facet key is given, returns an iterator over `(key, start, stop)` tuples. .. versionadded:: 0.5.5 """ if facet is None: tbl = sort(tbl, key=start) for iv in _collapse(values(tbl, (start, stop))): yield iv else: tbl = sort(tbl, key=(facet, start)) for k, g in rowgroupby(tbl, key=facet, value=(start, stop)): for iv in _collapse(g): yield (k, ) + iv