From e8d4d54b746e9996d96d85ef605f650f85b86b61 Mon Sep 17 00:00:00 2001 From: Ashwin-Srinivasan Date: Fri, 27 Jul 2018 12:15:17 -0400 Subject: [PATCH] Revert "Made Observable a subclass of Parameter so that Observables are compatible in rate laws" This reverts commit 4f299890ad948267085aac2c7278ede4012f3429. --- wc_lang/core.py | 185 ++++++++++++++++++++++++------------------------ 1 file changed, 92 insertions(+), 93 deletions(-) diff --git a/wc_lang/core.py b/wc_lang/core.py index 8fa8d91..8d9bc20 100644 --- a/wc_lang/core.py +++ b/wc_lang/core.py @@ -1395,99 +1395,6 @@ def add_to_sbml_doc(self, sbml_document): return sbml_compartment -class Parameter(obj_model.Model): - """ Parameter - - Attributes: - id (:obj:`str`): unique identifier per model/submodel - name (:obj:`str`): name - model (:obj:`Model`): model - submodels (:obj:`list` of :obj:`Submodel`): submodels - value (:obj:`float`): value - units (:obj:`str`): units of value - comments (:obj:`str`): comments - references (:obj:`list` of `Reference`): references - """ - id = SlugAttribute(unique=False) - name = StringAttribute() - model = ManyToOneAttribute(Model, related_name='parameters') - submodels = ManyToManyAttribute(Submodel, related_name='parameters') - value = FloatAttribute(min=0) - units = StringAttribute() - comments = LongStringAttribute() - references = ManyToManyAttribute('Reference', related_name='parameters') - - class Meta(obj_model.Model.Meta): - unique_together = (('id', 'model', 'submodels', ), ) - attribute_order = ('id', 'name', - 'model', 'submodels', - 'value', 'units', - 'comments', 'references') - - def add_to_sbml_doc(self, sbml_document): - """ Add this Parameter to a libsbml SBML document. - - Args: - sbml_document (:obj:`obj`): a `libsbml` SBMLDocument - - Returns: - :obj:`libsbml.Parameter`: the libsbml Parameter that's created - - Raises: - :obj:`LibSBMLError`: if calling `libsbml` raises an error - """ - sbml_model = wrap_libsbml(sbml_document.getModel) - # prefix id with 'parameter' so ids for wc_lang Parameters don't collide with ids for other libsbml parameters - sbml_id = "parameter_{}".format(self.id) - # TODO: use a standard unit ontology to map self.units to SBML model units - if self.units == 'dimensionless': - sbml_parameter = create_sbml_parameter(sbml_model, sbml_id, self.value, 'dimensionless_ud', - name=self.name) - elif self.units == 's': - sbml_parameter = create_sbml_parameter(sbml_model, sbml_id, self.value, 'second', - name=self.name) - elif self.units == 'mmol/gDCW/h': - sbml_parameter = create_sbml_parameter(sbml_model, sbml_id, self.value, 'mmol_per_gDW_per_hr', - name=self.name) - else: - sbml_parameter = create_sbml_parameter(sbml_model, sbml_id, self.value, 'dimensionless_ud', - name=self.name) - - return sbml_parameter - -class Observable(Parameter): - """ An observable is a weighted sum of the abundances of one or more species or other observables - - Attributes: - id (:obj:`str`): id - name (:obj:`str`): name - model (:obj:`Model`): model - species (:obj:`list` of :obj:`SpeciesCoefficient`): species and their coefficients - observables (:obj:`list` of :obj:`ObservableCoefficient`): list of component observables and - their coefficients - comments (:obj:`str`): comments - - Related attributes: - observable_coefficients (:obj:`list` of `ObservableCoefficient`): participations in observables - """ - id = SlugAttribute() - name = StringAttribute() - model = ManyToOneAttribute(Model, related_name='observables') - species = ObservableSpeciesParticipantAttribute('SpeciesCoefficient', related_name='observables') - observables = ObservableObservableParticipantAttribute('ObservableCoefficient', related_name='observables') - comments = LongStringAttribute() - - class Meta(obj_model.Model.Meta): - """ - Attributes: - valid_used_models (:obj:`tuple` of `str`): names of `obj_model.Model`s in this module that an - `Observable` is allowed to reference in its `expression` - """ - attribute_order = ('id', 'name', 'species', 'observables', 'comments') - indexed_attrs_tuples = (('id',), ) - valid_used_models = ('Species', 'Observable') - - class SpeciesType(obj_model.Model): """ Species type @@ -1761,6 +1668,37 @@ def serialize(self): return self.species.serialize() +class Observable(obj_model.Model): + """ An observable is a weighted sum of the abundances of one or more species or other observables + + Attributes: + id (:obj:`str`): id + name (:obj:`str`): name + model (:obj:`Model`): model + species (:obj:`list` of :obj:`SpeciesCoefficient`): species and their coefficients + observables (:obj:`list` of :obj:`ObservableCoefficient`): list of component observables and + their coefficients + comments (:obj:`str`): comments + + Related attributes: + observable_coefficients (:obj:`list` of `ObservableCoefficient`): participations in observables + """ + id = SlugAttribute() + name = StringAttribute() + model = ManyToOneAttribute(Model, related_name='observables') + species = ObservableSpeciesParticipantAttribute('SpeciesCoefficient', related_name='observables') + observables = ObservableObservableParticipantAttribute('ObservableCoefficient', related_name='observables') + comments = LongStringAttribute() + + class Meta(obj_model.Model.Meta): + """ + Attributes: + valid_used_models (:obj:`tuple` of `str`): names of `obj_model.Model`s in this module that an + `Observable` is allowed to reference in its `expression` + """ + attribute_order = ('id', 'name', 'species', 'observables', 'comments') + indexed_attrs_tuples = (('id',), ) + valid_used_models = ('Species', 'Observable') ''' @@ -2675,6 +2613,67 @@ def add_to_sbml_doc(self, sbml_document): return sbml_reaction +class Parameter(obj_model.Model): + """ Parameter + + Attributes: + id (:obj:`str`): unique identifier per model/submodel + name (:obj:`str`): name + model (:obj:`Model`): model + submodels (:obj:`list` of :obj:`Submodel`): submodels + value (:obj:`float`): value + units (:obj:`str`): units of value + comments (:obj:`str`): comments + references (:obj:`list` of `Reference`): references + """ + id = SlugAttribute(unique=False) + name = StringAttribute() + model = ManyToOneAttribute(Model, related_name='parameters') + submodels = ManyToManyAttribute(Submodel, related_name='parameters') + value = FloatAttribute(min=0) + units = StringAttribute() + comments = LongStringAttribute() + references = ManyToManyAttribute('Reference', related_name='parameters') + + class Meta(obj_model.Model.Meta): + unique_together = (('id', 'model', 'submodels', ), ) + attribute_order = ('id', 'name', + 'model', 'submodels', + 'value', 'units', + 'comments', 'references') + + def add_to_sbml_doc(self, sbml_document): + """ Add this Parameter to a libsbml SBML document. + + Args: + sbml_document (:obj:`obj`): a `libsbml` SBMLDocument + + Returns: + :obj:`libsbml.Parameter`: the libsbml Parameter that's created + + Raises: + :obj:`LibSBMLError`: if calling `libsbml` raises an error + """ + sbml_model = wrap_libsbml(sbml_document.getModel) + # prefix id with 'parameter' so ids for wc_lang Parameters don't collide with ids for other libsbml parameters + sbml_id = "parameter_{}".format(self.id) + # TODO: use a standard unit ontology to map self.units to SBML model units + if self.units == 'dimensionless': + sbml_parameter = create_sbml_parameter(sbml_model, sbml_id, self.value, 'dimensionless_ud', + name=self.name) + elif self.units == 's': + sbml_parameter = create_sbml_parameter(sbml_model, sbml_id, self.value, 'second', + name=self.name) + elif self.units == 'mmol/gDCW/h': + sbml_parameter = create_sbml_parameter(sbml_model, sbml_id, self.value, 'mmol_per_gDW_per_hr', + name=self.name) + else: + sbml_parameter = create_sbml_parameter(sbml_model, sbml_id, self.value, 'dimensionless_ud', + name=self.name) + + return sbml_parameter + + class StopCondition(obj_model.Model): """ Stop condition (Boolean-valued expression of one or more observables)