Skip to content
Snippets Groups Projects
Commit a3464d72 authored by Edward Fauchon-Jones's avatar Edward Fauchon-Jones
Browse files

Move field creation logic under Spec's

Each `Spec` derived class is now responsible for creating a valid field
that it represents in a supplied `Sim` instance.

Towards this, logic for creating valid fields was removed from the test
helper.
parent dbe55b36
No related branches found
No related tags found
1 merge request!2Fix romspline validation #1
......@@ -15,6 +15,7 @@
import h5py as h5
from . import errors as err
import numpy as np
class Spec(object):
......@@ -82,6 +83,24 @@ class Spec(object):
else:
return err.Missing(self)
@classmethod
def createField(self, sim):
"""Create valid field in simulation of field represented by spec
Parameters
----------
sim: lvcnrpy.Sim.Sim
LVCNR Waveform HDF5 Sim object in which to validate the represented
format specification field.
"""
if self.dtype == int:
val = self.values[0] if self.values is not None else 1
elif self.dtype == float:
val = self.values[0] if self.values is not None else 1.0
elif self.dtype == basestring:
val = self.values[0] if self.values is not None else "1.0"
sim.attrs[self.name] = val
class GroupSpec(Spec):
"""Specification for `h5.Group` fields"""
......@@ -101,6 +120,10 @@ class GroupSpec(Spec):
else:
return err.Missing(self)
@classmethod
def createField(self, sim):
sim.create_group(self.name)
class ROMSplineSpec(Spec):
"""Specification for ROMSpline group fields
......@@ -140,6 +163,13 @@ class ROMSplineSpec(Spec):
else:
return err.Missing(self)
@classmethod
def createField(self, sim):
group = sim.create_group(self.name)
for comp in self.components:
data = np.array([float(i) for i in range(10)])
group.create_dataset(comp, data=data)
# General Fields
class Type(Spec):
......
......@@ -21,6 +21,7 @@ from lvcnrpy.format.specs import Spec, GroupSpec, ROMSplineSpec
import h5py as h5
from collections import OrderedDict
import numpy as np
from lvcnrpy.Sim import Sim
def lvcnrcheck(args):
......@@ -56,34 +57,19 @@ def getFormat1HDF5():
a valid format 1 file.
"""
f = NamedTemporaryFile()
h5f = h5.File(f.name, 'w')
sim = Sim(f.name, 'w')
def createLeaves(nodes):
for nodeKey, node in nodes.items():
if isinstance(node, OrderedDict):
createLeaves(node)
elif isinstance(node(), Spec):
if isinstance(node(), GroupSpec):
h5f.create_group(node.name)
continue
elif isinstance(node(), ROMSplineSpec):
group = h5f.create_group(node.name)
for comp in node.components:
data = np.array([float(i) for i in range(10)])
group.create_dataset(comp, data=data)
continue
elif node.dtype == int:
val = node.values[0] if node.values is not None else 1
elif node.dtype == float:
val = node.values[0] if node.values is not None else 1.0
elif node.dtype == basestring:
val = node.values[0] if node.values is not None else "1.0"
h5f.attrs[node.name] = val
node.createField(sim)
createLeaves(format1)
createLeaves(format2)
createLeaves(format3)
h5f.close()
sim.close()
return f
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment