I am using libSBML. I read it in as such:
SBML_PARAMETER_ATTR = ['getId','getName','getConstant','getAnnotationString',
'getSBOTermID','getValue','getUnits']
def get_parameters(model):
parameter_ids = [p.getId() for p in model.getListOfParameters()]
parameters = dict.fromkeys(parameter_ids)
for p in model.getListOfParameters():
d = dict.fromkeys(settings.SBML_PARAMETER_ATTR)
for attr in settings.SBML_PARAMETER_ATTR:
d[attr] = getattr(p, attr, lambda: None)()
parameters[p.getId()] = d
return parameters
and read back as:
def write_sbml(d, outfile=None):
inv_map = {v:k for k,v in settings.SBML_MAPPING.items()}
for k, v in d.items():
df = pd.DataFrame(v)
df.rename(index=inv_map, inplace=True)
d[k] = df
for _, p in d.parameters.items():
k = model.createParameter()
k.setId(p.getId)
k.setName(p.getName)
k.setConstant(p.getConstant)
k.setValue(p.getValue)
k.setUnits(p.getUnits)
there's more code to it, but that does not yield any error when writing the SBML. I have a script that validates the file, but using the online validator (
http://sbml.org/Facilities/Validator/) yields the same error. I'm using python 3.6.6, libsbml 5.17.0