From d3e40064058ba47ecbb564ab1bec3d01bb3435b9 Mon Sep 17 00:00:00 2001 From: Frank Bergmann Date: Thu, 5 Dec 2024 15:43:24 +0100 Subject: [PATCH] Sbml model enhancements (#333) * - allow to initialize from sbml str * - disambiguate between warning and errors --- petab/v1/models/sbml_model.py | 16 ++++++++++++++++ petab/v1/sbml.py | 16 +++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/petab/v1/models/sbml_model.py b/petab/v1/models/sbml_model.py index fd57f2dc..5102715d 100644 --- a/petab/v1/models/sbml_model.py +++ b/petab/v1/models/sbml_model.py @@ -81,6 +81,22 @@ def from_file(filepath_or_buffer, model_id: str = None): model_id=model_id, ) + @staticmethod + def from_string(sbml_string, model_id: str = None): + sbml_reader, sbml_document, sbml_model = load_sbml_from_string( + sbml_string + ) + + if not model_id: + model_id = sbml_model.getIdAttribute() + + return SbmlModel( + sbml_model=sbml_model, + sbml_reader=sbml_reader, + sbml_document=sbml_document, + model_id=model_id, + ) + @property def model_id(self): return self._model_id diff --git a/petab/v1/sbml.py b/petab/v1/sbml.py index 0a8fd20f..6395e41b 100644 --- a/petab/v1/sbml.py +++ b/petab/v1/sbml.py @@ -43,12 +43,18 @@ def is_sbml_consistent( libsbml.LIBSBML_CAT_UNITS_CONSISTENCY, False ) - has_problems = sbml_document.checkConsistency() - if has_problems: + has_issues = sbml_document.checkConsistency() + + # we only have an issue with errors or fatals + has_problems = sbml_document.getNumErrors( + libsbml.LIBSBML_SEV_ERROR + ) + sbml_document.getNumErrors(libsbml.LIBSBML_SEV_FATAL) + if has_issues: log_sbml_errors(sbml_document) - logger.warning( - "WARNING: Generated invalid SBML model. Check messages above." - ) + if has_problems: + logger.warning( + "WARNING: Generated invalid SBML model. Check messages above." + ) return not has_problems