From dfaeddefa240831cd7e24b44a6738a7bb454ca75 Mon Sep 17 00:00:00 2001 From: Jim Paris Date: Mon, 23 Jan 2012 00:40:48 +0000 Subject: [PATCH] Mics git-svn-id: https://bucket.mit.edu/svn/nilm/nilmdb-new@10326 ddd99763-3ecb-0310-9145-efcb8ce7c51f --- Makefile | 5 +++++ README.txt | 4 ++++ nilmdb/__init__.py | 3 +++ nilmdb/layout.py | 34 ++++++++++++++++++++++++++++++++ nilmdb/nilmdb.py | 33 +++++++++++++++++++++++++++++++ setup.cfg | 9 +++++++++ tests/test.db | Bin 0 -> 8288 bytes tests/test_nilmdb.py | 45 +++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 133 insertions(+) create mode 100644 Makefile create mode 100644 README.txt create mode 100644 nilmdb/__init__.py create mode 100644 nilmdb/layout.py create mode 100644 nilmdb/nilmdb.py create mode 100644 setup.cfg create mode 100644 tests/test.db create mode 100644 tests/test_nilmdb.py diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..17a1ed8 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +all: + nosetests + +clean: + find . -name '*pyc' | xargs rm \ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..8cb7243 --- /dev/null +++ b/README.txt @@ -0,0 +1,4 @@ +To install, + + python setup.py install + diff --git a/nilmdb/__init__.py b/nilmdb/__init__.py new file mode 100644 index 0000000..4a701d3 --- /dev/null +++ b/nilmdb/__init__.py @@ -0,0 +1,3 @@ +# empty +from nilmdb import NilmDB +from layout import * diff --git a/nilmdb/layout.py b/nilmdb/layout.py new file mode 100644 index 0000000..a6eab87 --- /dev/null +++ b/nilmdb/layout.py @@ -0,0 +1,34 @@ +import tables + +# Table description for typical prep output +PrepData = { + 'timestamp': tables.Int64Col(), + 'p1': tables.Float32Col(), + 'q1': tables.Float32Col(), + 'p3': tables.Float32Col(), + 'q3': tables.Float32Col(), + 'p5': tables.Float32Col(), + 'q5': tables.Float32Col(), + 'p7': tables.Float32Col(), + 'q7': tables.Float32Col(), + } + +# Table description for raw data +RawData = { + 'timestamp': tables.Int64Col(), + 'va': tables.Int16Col(), + 'vb': tables.Int16Col(), + 'vc': tables.Int16Col(), + 'ia': tables.Int16Col(), + 'ib': tables.Int16Col(), + 'ic': tables.Int16Col(), + } + +# Table description for raw data plus 60 Hz notched current +RawNotchedData = dict(RawData) +RawNotchedData.update({ + 'notch_ia': tables.Int16Col(), + 'notch_ib': tables.Int16Col(), + 'notch_ic': tables.Int16Col(), + }) + diff --git a/nilmdb/nilmdb.py b/nilmdb/nilmdb.py new file mode 100644 index 0000000..0723fc6 --- /dev/null +++ b/nilmdb/nilmdb.py @@ -0,0 +1,33 @@ +"""NilmDB + +Object that represents a NILM database file""" + +import tables +import time + +class NilmDB(object): + def __init__(self, filename): + # Open or create the file + self.h5file = tables.openFile(filename, "a", "NILM Database") + + def close(self): + self.h5file.close() + + def stream_list(self): + """Return list of paths to all Tables in the database""" + iterator = self.h5file.walkNodes('/', 'Table') + paths = [ x._v_pathname for x in iterator ] + return sorted(paths) + + def stream_create(self, path, cls): + """Create a table at the given path, with the contents matching the + given class description (e.g. nilmdb.PrepData)""" + [ group, table ] = path.rsplit("/", 1) + try: + self.h5file.getNode(group) + except tables.NoSuchNodeError as e: + self.h5file.createGroup("/", group.lstrip('/')) + + self.h5file.createTable(group, table, cls) +# group = h5file.createGroup("/", "newton", "Newton school") +# table = h5file.createTable(group, "prep", PrepData, "Prep Data") diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..abfe423 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,9 @@ +[nosetests] +nocapture=1 +with-coverage=1 +cover-inclusive=1 +cover-package=nilmdb +cover-erase=1 +stop=1 +verbosity=2 + diff --git a/tests/test.db b/tests/test.db new file mode 100644 index 0000000000000000000000000000000000000000..1373149793ad901f1b899e76a9a0ef8f18471e89 GIT binary patch literal 8288 zcmeHMPg4^y6o1>IRxD0M2N(v&9yvJ$1nSKyMLJVjr>*}^r7$>h5KuelO^V{q_8 zc=X`GqaVX>pn1uAn`AfXmYq5}NSJQ2FZsRXCGTIBj~i?26XUbvfF+lMF(}9;KYmf! zDk=)UbN?1K0;)eyeVkE^0L}yU%@Dmn{EJyd_(}9mt6BvylKFE@-SGXqYUP-4R{vK! zuu-i%K!Kl-)U2gnNzZsQ_IKa(5B5=$RN3H;l=T(T*Qj3Sp(Ht?e&@trr`D+p1%|8Q zHz9sJf1_64EUxwXz3txXT|v*oym(^2!riM^+HLWUxO0*&9-`cDH6NnDdOXgOgGbd? zyVh*T@n}Lk&%#Z$o;;KhF6c9I{DY^R%H4Xk-Cb|CHY=U355GwGK&--LuQOzL$C5ih zlD%$SQUlrU33gWfCp!?eSEcm;Z^@7IHXOd%J;e5_-Wy30_5MMB=Q;PYek<)}s=sbG znrng3U{Y5ojQPi&_4s#y{a%^&?+Klo_D6BQhiAp-#hjz#NA2$dxGv}XL~-DpIC)${ zCaac`h4~D=PhAA*c@GzOWrOQ0#Tz0Q!cv6k98A9xt-~crAi8S1o=)tt8p(R;!XeFx zT~(v=J`mAe*q0=4Aq|$~y_N<`@+SFz=bB00xfJvE_g?J2?)P3ury}sh1Re!(AnHu+ z$dR0%9@Az&$Dk}qjxyM6Cc~-eGhq_*suy6AxS*~*{5;oWy7EU^>IL|cpa6VMg-Pb% zu6bXJ+;9&&HB`)Juml0_ur7QUgZvD-E=I|0NWAOu@w^J{p2siVT#=LM@x%H(6|peS z%Zt-*w3?4G&x`6C&m$)h51m&|2viQ%Yt{N%x72M^HZi@7<$dhW+_(ilj%?eFTlC|| zuHCpLKQ8oPyf3DFx4by^U+(#q{kVbht@v>RQvzmgB)<5(+ z%72tYK1u#3fN7;ml<&p!srS+YPh9}OykM^<)h+RX^QsiB0DIeNIHhb}tcBT8!;;c@ z6BD&95^3OkoC_S0T$jD0Rfjp>5y{0d+y}KVBv(SXmvMvl5BVm=Lr1>yO{6qoDi_UH zqVdhl(@%5!Wc_u=7k~U@9d_gV@pF&PTYsl9(tly%yT^T*L6 zhn(6Ul`MZ`>$Pn)=00h>j$@`RDZ3a3uj5xbypCIlXP+_r{5oExn_tJNba)+~lJI=L zE-4|!*TLxhx}@&cLRn|U2CzNZrx1TL=Ve>^)A2xlSnBE(4igVpHwnAVlF)YWYpgcq zBP>}2fcj@k3=$GdY&3=?eFH!&>m%EI==8%G?1niX+xwI~B=%-uNV24>sEJ7tzkY~M zIH+Q>oW(D-53J2@|NM93mpHHRUJ|uE)357$l6?