You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When writing fbc-v2 with SBML L3V2 and KeyValuePairs the file is correctly written, but errors exist on reading.
See example code and output below
"""Test bed for FBC version 3.For latest SBML fbc v3 specification seehttps://sourceforge.net/p/sbml/code/26312/tree/trunk/specifications/sbml-level-3/version-1/fbc/spec/main.pdf?format=raw"""importlibsbmlfromloggingimportgetLoggerlogger=getLogger(__name__)
defcheck(value: int, message: str) ->bool:
"""Check the libsbml return value and prints message if something happened. If 'value' is None, prints an error message constructed using 'message' and then exits with status code 1. If 'value' is an integer, it assumes it is a libSBML return status code. If the code value is LIBSBML_OPERATION_SUCCESS, returns without further action; if it is not, prints an error message constructed using 'message' along with text from libSBML explaining the meaning of the code, and exits with status code 1. """valid=TrueifvalueisNone:
logger.error(f"Error: LibSBML returned a null value trying to <{message}>.")
valid=Falseelifisinstance(value, int):
ifvalue!=libsbml.LIBSBML_OPERATION_SUCCESS:
logger.error(f"Error encountered trying to '{message}'.")
logger.error(
f"LibSBML returned error code {str(value)}: "f"{libsbml.OperationReturnValue_toString(value).strip()}"
)
valid=Falsereturnvalid# create document with new fbc version 3 namespacesbmlns: libsbml.SBMLNamespaces=libsbml.SBMLNamespaces(3, 2)
sbmlns.addPkgNamespace("fbc", 3)
doc: libsbml.SBMLDocument=libsbml.SBMLDocument(sbmlns)
doc_fbc: libsbml.FbcSBMLDocumentPlugin=doc.getPlugin("fbc")
doc_fbc.setRequired(False)
model: libsbml.Model=doc.createModel()
model_fbc: libsbml.FbcModelPlugin=model.getPlugin("fbc")
print(model_fbc)
model_fbc.setStrict(True)
# Support for key value pairs existsc: libsbml.Compartment=model.createCompartment()
c.setId("c1")
c.setSize(1.0)
c.setConstant(True)
s1: libsbml.Species=model.createSpecies()
s1.setId("s1")
s1.setCompartment("c1")
s1.setInitialConcentration(1.0)
s1.setConstant(True)
s1.setHasOnlySubstanceUnits(False)
s1.setBoundaryCondition(False)
# KeyValue Pairs1_fbc: libsbml.FbcSpeciesPlugin=s1.getPlugin("fbc")
kvp_list: libsbml.ListOfKeyValuePairs=s1_fbc.getListOfKeyValuePairs()
kvp_list.setXmlns("http://sbml.org/fbc/keyvaluepair")
kvp: libsbml.KeyValuePair=kvp_list.createKeyValuePair()
check(kvp.setKey("testdata"), "Set Key on KeyValuePair")
check(kvp.setValue("1.0"), "Set Value on KeyValuePair")
sbml_str: str=libsbml.writeSBMLToString(doc)
print("-"*80)
print(sbml_str)
print("-"*80)
# checking that SBML string can be read againdoc2=libsbml.readSBMLFromString(sbml_str)
ifdoc2.getNumErrors() >0:
ifdoc2.getError(0).getErrorId() ==libsbml.XMLFileUnreadable:
err_message="Unreadable SBML file"elifdoc2.getError(0).getErrorId() ==libsbml.XMLFileOperationError:
err_message="Problems reading SBML file: XMLFileOperationError"else:
err_message="SBMLDocumentErrors encountered while reading the SBML file."# log_sbml_errors_for_doc(doc)logger.error(f"`read_sbml` error `{err_message}`")
forkinrange(doc2.getNumErrors()):
error: libsbml.SBMLError=doc2.getError(k)
print(f"Error {k}")
print(error.getMessage())
`read_sbml` error `SBMLDocumentErrors encountered while reading the SBML file.`Error 0A <keyValuePair> object may have the optional SBML Level 3 Core attributes 'metaid' and 'sboTerm'. No other attributes from the SBML Level 3 Core namespaces are permitted on a <keyValuePair>. Attribute 'value' is not part of the definition of an SBML Level 3 Version 2 Package fbc Version 3 <keyValuePair> element.Error 1A <keyValuePair> object may have the optional SBML Level 3 Core attributes 'metaid' and 'sboTerm'. No other attributes from the SBML Level 3 Core namespaces are permitted on a <keyValuePair>. Attribute 'value' is not part of the definition of an SBML Level 3 Version 2 Package fbc Version 3 <keyValuePair> element.
The text was updated successfully, but these errors were encountered:
indeed, the code currently only allows for these to be set on l3v1, fbc v3. It probably should not check for the core version. I'll handle this as part of #241
When writing fbc-v2 with SBML L3V2 and KeyValuePairs the file is correctly written, but errors exist on reading.
See example code and output below
Results in
The text was updated successfully, but these errors were encountered: