# HG changeset patch # User Jeff Hammel # Date 1412382582 25200 # Node ID fef3f407113f752fcb9d8b8e5f3584b137429d47 # Parent 178dc9a943872edc39d8ed1b8855b19a1a394ce9 spec rows diff -r 178dc9a94387 -r fef3f407113f numerics/data.py --- a/numerics/data.py Mon Sep 29 16:19:35 2014 -0700 +++ b/numerics/data.py Fri Oct 03 17:29:42 2014 -0700 @@ -4,10 +4,46 @@ data models """ -__all__ = ['Dataset'] -string = (str, unicode) +from collections import OrderedDict + +__all__ = ['Rows', 'Columns'] + + +class ColumnNumberException(Exception): + """ + wrong number of columns: {given} given; {expected} expected + """ + def __init__(self, given, expected): + self.given = given + self.expected = expected + Exception.__init__(self.__doc__.format(**self.__dict__)) + + +class Rows(object): + """ + row-based data + """ + + array = OrderedDict -class Dataset(object): - """ - rows of data - """ + def __init__(self, columns, *rows): + """ + columns -- column labels + """ + self.column_names = columns + self.rows = [] + + for row in rows: + self += row + + def __iadd__(self, row): + """add a labeled row""" + if len(row) != len(self.columns_names): + raise ColumnNumberException(len(row), len(self.columns_names)) + self.rows.append(self.array(zip(self.columns_names, row))) + + def __len__(self): + return len(self.rows) + + def __getitem__(self, item): + return self.rows[item]