Formatters done, not necessarily fast enough though
git-svn-id: https://bucket.mit.edu/svn/nilm/nilmdb@10889 ddd99763-3ecb-0310-9145-efcb8ce7c51f
This commit is contained in:
parent
e2daeb5e54
commit
11cc124019
|
@ -30,7 +30,10 @@ class Layout:
|
|||
return tables.Description(desc)
|
||||
|
||||
def parse(self, char *text):
|
||||
raise ParserError("no parser for this layout")
|
||||
raise ParserError("n/a", "no parser for this layout")
|
||||
|
||||
def format(self, char *text):
|
||||
raise FormatterError("no formatter for this layout")
|
||||
|
||||
class PrepData(Layout):
|
||||
rate_hz = 120
|
||||
|
@ -58,6 +61,13 @@ class PrepData(Layout):
|
|||
raise ValueError("wrong number of values: wanted 9, got " + str(n))
|
||||
return (ts, [ts, v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]])
|
||||
|
||||
def format(self, d):
|
||||
n = len(d)
|
||||
if n != 9:
|
||||
raise ValueError("wrong number of values: wanted 9, got " + str(n))
|
||||
return ("%.6f %f %f %f %f %f %f %f %f\n" %
|
||||
(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8]))
|
||||
|
||||
class RawData(Layout):
|
||||
rate_hz = 8000
|
||||
fields = [ ( 'timestamp', 'float64' ),
|
||||
|
@ -83,6 +93,13 @@ class RawData(Layout):
|
|||
raise ValueError("value out of range: " + str(v[i]))
|
||||
return (ts, [ts, v[0], v[1], v[2], v[3], v[4], v[5]])
|
||||
|
||||
def format(self, d):
|
||||
n = len(d)
|
||||
if n != 7:
|
||||
raise ValueError("wrong number of values: wanted 7, got " + str(n))
|
||||
return ("%.6f %d %d %d %d %d %d\n" %
|
||||
(d[0], d[1], d[2], d[3], d[4], d[5], d[6]))
|
||||
|
||||
class RawNotchedData(RawData):
|
||||
rate_hz = 8000
|
||||
fields = RawData.fields + [
|
||||
|
@ -105,6 +122,13 @@ class RawNotchedData(RawData):
|
|||
raise ValueError("value out of range: " + str(v[i]))
|
||||
return (ts, [ts, v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8]])
|
||||
|
||||
def format(self, d):
|
||||
n = len(d)
|
||||
if n != 10:
|
||||
raise ValueError("wrong number of values: wanted 10, got " + str(n))
|
||||
return ("%.6f %d %d %d %d %d %d %d %d %d\n" %
|
||||
(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9]))
|
||||
|
||||
# Instantiate all layouts, indexed by their name
|
||||
named = {}
|
||||
for name, obj in inspect.getmembers(sys.modules[__name__]):
|
||||
|
|
|
@ -123,8 +123,10 @@ class TestLayouts(object):
|
|||
[ 1234567890.100000, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 ] ]
|
||||
text = formatter.format(data)
|
||||
eq_(text,
|
||||
"1234567890.000000 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8\n" +
|
||||
"1234567890.100000 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8\n")
|
||||
"1234567890.000000 1.100000 2.200000 3.300000 4.400000 " +
|
||||
"5.500000 6.600000 7.700000 8.800000\n" +
|
||||
"1234567890.100000 1.100000 2.200000 3.300000 4.400000 " +
|
||||
"5.500000 6.600000 7.700000 8.800000\n")
|
||||
|
||||
# try RawData too
|
||||
formatter = Formatter("RawData")
|
||||
|
@ -151,38 +153,40 @@ class TestLayouts(object):
|
|||
eq_(text, "")
|
||||
|
||||
def test_roundtrip(self):
|
||||
# Verify that textual data passed into the Parser and then
|
||||
# back through the Formatter comes out the same way.
|
||||
# Verify that textual data passed into the Parser, and then
|
||||
# back through the Formatter, then back into the Parser,
|
||||
# gives identical parsed representations
|
||||
random.seed(12345)
|
||||
|
||||
# Roundtrip PrepData
|
||||
for i in range(1000):
|
||||
rows = random.randint(1,100)
|
||||
data = ""
|
||||
ts = 1234567890
|
||||
for r in range(rows):
|
||||
ts += random.uniform(0,1)
|
||||
row = sprintf("%f", ts)
|
||||
for f in range(8):
|
||||
row += sprintf(" %f", random.uniform(-1000,1000))
|
||||
data += row + "\n"
|
||||
parser = Parser("PrepData")
|
||||
formatter = Formatter("PrepData")
|
||||
parser.parse(data)
|
||||
eq_(formatter.format(parser.data), data)
|
||||
def do_roundtrip(layout, datagen):
|
||||
for i in range(100):
|
||||
rows = random.randint(1,100)
|
||||
data = ""
|
||||
ts = 1234567890
|
||||
for r in range(rows):
|
||||
ts += random.uniform(0,1)
|
||||
row = sprintf("%f", ts) + " "
|
||||
row += " ".join(datagen())
|
||||
row += "\n"
|
||||
data += row
|
||||
parser1 = Parser(layout)
|
||||
formatter = Formatter(layout)
|
||||
parser2 = Parser(layout)
|
||||
parser1.parse(data)
|
||||
parser2.parse(formatter.format(parser1.data))
|
||||
eq_(parser1.data, parser2.data)
|
||||
|
||||
# Roundtrip RawData
|
||||
for i in range(1000):
|
||||
rows = random.randint(1,100)
|
||||
data = ""
|
||||
ts = 1234567890
|
||||
for r in range(rows):
|
||||
ts += random.uniform(0,1)
|
||||
row = sprintf("%f", ts)
|
||||
for f in range(8):
|
||||
row += sprintf(" %d", random.randint(0,65535))
|
||||
data += row + "\n"
|
||||
parser = Parser("RawData")
|
||||
formatter = Formatter("RawData")
|
||||
parser.parse(data)
|
||||
eq_(formatter.format(parser.data), data)
|
||||
def datagen():
|
||||
return [ sprintf("%f", random.uniform(-1000,1000))
|
||||
for x in range(8) ]
|
||||
do_roundtrip("PrepData", datagen)
|
||||
|
||||
def datagen():
|
||||
return [ sprintf("%d", random.randint(0,65535))
|
||||
for x in range(6) ]
|
||||
do_roundtrip("RawData", datagen)
|
||||
|
||||
def datagen():
|
||||
return [ sprintf("%d", random.randint(0,65535))
|
||||
for x in range(9) ]
|
||||
do_roundtrip("RawNotchedData", datagen)
|
||||
|
|
Loading…
Reference in New Issue
Block a user