@@ -1051,15 +1051,23 @@ def _process_parameters(
10511051 "Parameter does not exist." % parameter
10521052 )
10531053
1054+ # parameter ID => initial assignment sympy expression
1055+ par_id_to_ia = {
1056+ par .getId (): ia
1057+ for par in self .sbml .getListOfParameters ()
1058+ if (ia := self ._get_element_initial_assignment (par .getId ()))
1059+ is not None
1060+ }
1061+
10541062 fixed_parameters = [
10551063 parameter
10561064 for parameter in self .sbml .getListOfParameters ()
10571065 if parameter .getId () in constant_parameters
10581066 ]
10591067 for parameter in fixed_parameters :
1068+ ia_math = par_id_to_ia .get (parameter .getId ())
10601069 if (
1061- self ._get_element_initial_assignment (parameter .getId ())
1062- is not None
1070+ (ia_math is not None and not ia_math .is_Number )
10631071 or self .is_assignment_rule_target (parameter )
10641072 or self .is_rate_rule_target (parameter )
10651073 ):
@@ -1074,7 +1082,10 @@ def _process_parameters(
10741082 parameter
10751083 for parameter in self .sbml .getListOfParameters ()
10761084 if parameter .getId () not in constant_parameters
1077- and self ._get_element_initial_assignment (parameter .getId ()) is None
1085+ and (
1086+ (ia_math := par_id_to_ia .get (parameter .getId ())) is None
1087+ or ia_math .is_Number
1088+ )
10781089 and not self .is_assignment_rule_target (parameter )
10791090 and parameter .getId () not in hardcode_symbols
10801091 ]
@@ -1091,16 +1102,16 @@ def _process_parameters(
10911102 for par in settings ["var" ]:
10921103 self .symbols [partype ][_get_identifier_symbol (par )] = {
10931104 "name" : par .getName () if par .isSetName () else par .getId (),
1094- "value" : sp .Float (par .getValue ()),
1105+ "value" : par_id_to_ia .get (
1106+ par .getId (), sp .Float (par .getValue ())
1107+ ),
10951108 }
10961109
10971110 # Parameters that need to be turned into expressions
10981111 # so far, this concerns parameters with initial assignments containing rateOf(.)
10991112 # (those have been skipped above)
11001113 for par in self .sbml .getListOfParameters ():
1101- if (
1102- ia := self ._get_element_initial_assignment (par .getId ())
1103- ) is not None and ia .find (
1114+ if (ia := par_id_to_ia .get (par .getId ())) is not None and ia .find (
11041115 sp .core .function .UndefinedFunction ("rateOf" )
11051116 ):
11061117 self .symbols [SymbolId .EXPRESSION ][
@@ -1877,7 +1888,10 @@ def _process_initial_assignments(self):
18771888 for ia in self .sbml .getListOfInitialAssignments ():
18781889 identifier = _get_identifier_symbol (ia )
18791890 if identifier in itt .chain (
1880- self .symbols [SymbolId .SPECIES ], self .compartments
1891+ self .symbols [SymbolId .SPECIES ],
1892+ self .compartments ,
1893+ self .symbols [SymbolId .PARAMETER ],
1894+ self .symbols [SymbolId .FIXED_PARAMETER ],
18811895 ):
18821896 continue
18831897
0 commit comments