annotate numerics/data.py @ 22:61ef3985ec5b

stub columns; do we need it
author Jeff Hammel <k0scist@gmail.com>
date Fri, 03 Oct 2014 17:48:39 -0700
parents fef3f407113f
children 87615a38190c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
2
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
3 """
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
4 data models
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
5 """
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
6
21
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
7 from collections import OrderedDict
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
8
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
9 __all__ = ['Rows', 'Columns']
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
10
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
11
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
12 class ColumnNumberException(Exception):
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
13 """
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
14 wrong number of columns: {given} given; {expected} expected
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
15 """
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
16 def __init__(self, given, expected):
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
17 self.given = given
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
18 self.expected = expected
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
19 Exception.__init__(self.__doc__.format(**self.__dict__))
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
20
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
21
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
22 class Rows(object):
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
23 """
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
24 row-based data
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
25 """
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
26
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
27 array = OrderedDict
19
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
28
21
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
29 def __init__(self, columns, *rows):
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
30 """
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
31 columns -- column labels
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
32 """
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
33 self.column_names = columns
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
34 self.rows = []
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
35
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
36 for row in rows:
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
37 self += row
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
38
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
39 def __iadd__(self, row):
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
40 """add a labeled row"""
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
41 if len(row) != len(self.columns_names):
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
42 raise ColumnNumberException(len(row), len(self.columns_names))
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
43 self.rows.append(self.array(zip(self.columns_names, row)))
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
44
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
45 def __len__(self):
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
46 return len(self.rows)
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
47
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
48 def __getitem__(self, item):
fef3f407113f spec rows
Jeff Hammel <k0scist@gmail.com>
parents: 19
diff changeset
49 return self.rows[item]
22
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
50
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
51
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
52 class Columns(object):
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
53 """
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
54 column-oriented data
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
55 """
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
56
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
57 def __init__(self, *columns):
61ef3985ec5b stub columns; do we need it
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
58 self.columns = OrderedDict() # this should be ordered