Skip to content

Commit

Permalink
#19: allow changing transient values.
Browse files Browse the repository at this point in the history
  • Loading branch information
fbergmann committed Apr 5, 2022
1 parent 0a01bde commit a1e4d9a
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 18 deletions.
38 changes: 28 additions & 10 deletions basico/model_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -2456,6 +2456,8 @@ def set_compartment(name=None, exact=False, **kwargs):
- | `initial_value` or `initial_size`: to set the initial size of the compartment
- | `value` or `size`: to set the transient size of the compartment
- | `initial_expression`: the initial expression for the compartment
- | `status` or `type`: the type of the compartment one of `fixed`, `assignment` or `ode`
Expand Down Expand Up @@ -2488,7 +2490,6 @@ def set_compartment(name=None, exact=False, **kwargs):
assert (isinstance(compartment, COPASI.CCompartment))
current_name = compartment.getObjectName()


if name and type(name) is str and exact and name != current_name:
continue

Expand All @@ -2501,13 +2502,15 @@ def set_compartment(name=None, exact=False, **kwargs):
if name and isinstance(name, Iterable) and current_name not in name:
continue

if 'initial_value' in kwargs:
compartment.setInitialValue(kwargs['initial_value'])
change_set.append(compartment.getInitialValueReference())
for initial in ['initial_value', 'initial_size']:
if initial in kwargs:
compartment.setInitialValue(float(kwargs[initial]))
change_set.append(compartment.getInitialValueReference())

if 'initial_size' in kwargs:
compartment.setInitialValue(kwargs['initial_size'])
change_set.append(compartment.getInitialValueReference())
for transient in ['value', 'size']:
if transient in kwargs:
compartment.setValue(float(kwargs[transient]))
change_set.append(compartment.getValueReference())

if 'initial_expression' in kwargs:
_set_initial_expression(compartment, kwargs['initial_expression'])
Expand Down Expand Up @@ -2590,6 +2593,7 @@ def set_parameters(name=None, exact=False, **kwargs):
- | `unit`: the unit expression to be set
- | `initial_value`: to set the initial value for the parameter
- | `value`: set the transient value for the parameter
- | `initial_expression`: the initial expression
- | `status` or `type`: the type of the parameter one of `fixed`, `assignment` or `ode`
- | `expression`: the expression for the parameter (only valid when type is `ode` or `assignment`)
Expand Down Expand Up @@ -2634,9 +2638,13 @@ def set_parameters(name=None, exact=False, **kwargs):
param.setUnitExpression(kwargs['unit'])

if 'initial_value' in kwargs:
param.setInitialValue(kwargs['initial_value'])
param.setInitialValue(float(kwargs['initial_value']))
change_set.append(param.getInitialValueReference())

if 'value' in kwargs:
param.setValue(float(kwargs['value']))
change_set.append(param.getValueReference())

if 'initial_expression' in kwargs:
_set_initial_expression(param, kwargs['initial_expression'])
model.setCompileFlag(True)
Expand Down Expand Up @@ -3265,6 +3273,8 @@ def set_species(name=None, exact=False, **kwargs):
- | `initial_concentration`: to set the initial concentration for the species
- | `initial_particle_number`: to set the initial particle number for the species
- | `initial_expression`: the initial expression for the species
- | `concentration`: the new transient concentration for the species
- | `particle_number`: the new transient particle number for the species
- | `status` or `type`: the type of the species one of `fixed`, `assignment` or `ode`
- | `expression`: the expression for the species (only valid when type is `ode` or `assignment`)
- | `notes`: sets notes for the species (either plain text, or valid xhtml)
Expand Down Expand Up @@ -3310,13 +3320,21 @@ def set_species(name=None, exact=False, **kwargs):
metab.setUnitExpression(kwargs['unit'])

if 'initial_concentration' in kwargs:
metab.setInitialConcentration(kwargs['initial_concentration'])
metab.setInitialConcentration(float(kwargs['initial_concentration']))
change_set.append(metab.getInitialConcentrationReference())

if 'initial_particle_number' in kwargs:
metab.setInitialValue(kwargs['initial_particle_number']),
metab.setInitialValue(float(kwargs['initial_particle_number']))
change_set.append(metab.getInitialValueReference())

if 'concentration' in kwargs:
metab.setConcentration(float(kwargs['concentration']))
change_set.append(metab.getConcentrationReference())

if 'particle_number' in kwargs:
metab.setValue(float(kwargs['particle_number']))
change_set.append(metab.getValueReference())

if 'initial_expression' in kwargs:
_set_initial_expression(metab, kwargs['initial_expression'])
model.setCompileFlag(True)
Expand Down
23 changes: 15 additions & 8 deletions tests/test_basico_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,11 +208,10 @@ def test_set_parameter(self):
self.assertEqual(params.shape[0], 1)
value = params.iloc[0].initial_value
self.assertEqual(value, 2.0)
basico.set_parameters('Values[epsilon]', initial_value=3.0)
params = basico.get_parameters('Values[epsilon]')
self.assertEqual(params.shape[0], 1)
value = params.iloc[0].initial_value
self.assertEqual(value, 3.0)
basico.set_parameters('Values[epsilon]', initial_value=3.0, value=5.0)
params = basico.as_dict(basico.get_parameters('Values[epsilon]'))
self.assertEqual(params['initial_value'], 3.0)
self.assertEqual(params['value'], 5.0)

def test_mapping(self):
m = basico.get_reaction_mapping('R1')
Expand Down Expand Up @@ -260,8 +259,12 @@ def test_units(self):

def test_species(self):
basico.add_species('A', initial_concentration=10)
a = basico.get_species('A')
a = basico.as_dict(basico.get_species('A'))
self.assertIsNotNone(a)
self.assertAlmostEqual(a['initial_concentration'], 10)
basico.set_species('A', concentration=5)
a = basico.as_dict(basico.get_species('A'))
self.assertAlmostEqual(a['concentration'], 5.0)
basico.set_species('A', exact=True, initial_expression=' 1 / {Time}', expression='{Time}', status='assignment')
a = basico.as_dict(basico.get_species('A'))
self.assertEqual(a['type'], 'assignment')
Expand All @@ -277,7 +280,11 @@ def test_compartment(self):
basico.add_compartment('v', initial_size=2)
v = basico.get_compartments('v', exact=True)
self.assertIsNotNone(v)
basico.set_compartment('v', exact=True, initial_expression=' 1 / {Time}', expression='{Time}', status='assignment')
basico.set_compartment('v', size=3)
v = basico.as_dict(basico.get_compartments('v', exact=True))
self.assertAlmostEqual(v['size'], 3)
basico.set_compartment('v', exact=True, initial_expression=' 1 / {Time}',
expression='{Time}', status='assignment')
v = basico.as_dict(basico.get_compartments('v'))
self.assertEqual(v['type'], 'assignment')
self.assertEqual(v['expression'], 'Time')
Expand All @@ -290,7 +297,7 @@ def test_global_parameters(self):
v = basico.get_parameters('p', exact=True)
self.assertIsNotNone(v)
basico.set_parameters('p', exact=True, initial_expression=' 1 / {Time}', expression='{Time}',
status='assignment')
status='assignment')
v = basico.as_dict(basico.get_parameters('p'))
self.assertEqual(v['type'], 'assignment')
self.assertEqual(v['expression'], 'Time')
Expand Down

0 comments on commit a1e4d9a

Please sign in to comment.