Mercurial > hg > numerics
annotate numerics/data.py @ 48:36e47061187f
stub a transposition function
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Mon, 19 Jan 2015 12:38:51 -0800 |
parents | 87615a38190c |
children | 5caa67643162 |
rev | line source |
---|---|
19 | 1 # -*- coding: utf-8 -*- |
2 | |
3 """ | |
4 data models | |
5 """ | |
6 | |
21 | 7 from collections import OrderedDict |
8 | |
48
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
9 __all__ = ['ColumnNumberException', 'ColumnLengthException', 'Rows', 'Columns'] |
21 | 10 |
11 | |
12 class ColumnNumberException(Exception): | |
13 """ | |
14 wrong number of columns: {given} given; {expected} expected | |
15 """ | |
16 def __init__(self, given, expected): | |
17 self.given = given | |
18 self.expected = expected | |
23 | 19 Exception.__init__(self.__doc__.format(**self.__dict__).strip()) |
20 | |
21 | |
48
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
22 def transpose(array): |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
23 """makes rows into columns or vice versa""" |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
24 |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
25 if not array: |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
26 return array # nothing to do |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
27 |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
28 n_cols = len(array[0]) |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
29 retval = []] * n_cols |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
30 raise NotImplementedError('TODO') # -> record TODO items |
36e47061187f
stub a transposition function
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
31 |
23 | 32 class ColumnLengthException(ColumnNumberException): |
33 """ | |
34 wrong length of column: {given} given; {expected} expected | |
35 """ | |
36 # XXX should share ABC, not inherit from ColumnNumberException | |
21 | 37 |
38 | |
39 class Rows(object): | |
40 """ | |
41 row-based data | |
42 """ | |
43 | |
44 array = OrderedDict | |
19 | 45 |
21 | 46 def __init__(self, columns, *rows): |
47 """ | |
48 columns -- column labels | |
49 """ | |
50 self.column_names = columns | |
51 self.rows = [] | |
52 | |
53 for row in rows: | |
54 self += row | |
55 | |
56 def __iadd__(self, row): | |
57 """add a labeled row""" | |
58 if len(row) != len(self.columns_names): | |
59 raise ColumnNumberException(len(row), len(self.columns_names)) | |
60 self.rows.append(self.array(zip(self.columns_names, row))) | |
61 | |
62 def __len__(self): | |
63 return len(self.rows) | |
64 | |
65 def __getitem__(self, item): | |
66 return self.rows[item] | |
22 | 67 |
68 | |
69 class Columns(object): | |
70 """ | |
71 column-oriented data | |
72 """ | |
73 | |
74 def __init__(self, *columns): | |
75 self.columns = OrderedDict() # this should be ordered | |
23 | 76 for name, values in columns: |
77 self += (name, values) | |
78 | |
79 def __iadd__(self, item): | |
80 column_name, values = item | |
81 assert column_name not in self.columns | |
82 return self |