Adding constraints to the fitting of an ODEModel raises an error, __init__() missing 1 required positional argument: 'initial'
Taking the simple coupled ODE model from the docs and adding an equality constraint to the variables (one that will necessarily be true anyways) gives the following output:
tdata = np.array([10, 26, 44, 70, 120])
adata = 10e-4 * np.array([44, 34, 27, 20, 14])
a, b, t = sf.variables('a, b, t')
k = sf.Parameter('k', 0.1)
a0 = 54 * 10e-4
model_dict = {
sf.D(a, t): - k * a**2,
sf.D(b, t): k * a**2,
}
ode_model = sf.ODEModel(model_dict, initial={t: 0.0, a: a0, b: 0.0})
constraints = [sf.Eq(a+b,0.055)]
fit = sf.Fit(ode_model, t=tdata, a=adata, b=None, constraints=constraints)
fit_result = fit.execute()
print(fit_result)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-133-bcdec22720dd> in <module>
14 constraints = [sf.Eq(a+b,0.055)]
15
---> 16 fit = sf.Fit(ode_model, t=tdata, a=adata, b=None, constraints=constraints)
17 fit_result = fit.execute()
18 print(fit_result)
C:\ProgramData\Anaconda3\envs\sf_env\lib\site-packages\symfit\core\support.py in wrapped_func(*args, **kwargs)
421 else:
422 bound_args.arguments[param.name] = param.default
--> 423 return func(*bound_args.args, **bound_args.kwargs)
424 return wrapped_func
425
C:\ProgramData\Anaconda3\envs\sf_env\lib\site-packages\symfit\core\fit.py in __init__(self, model, *ordered_data, **named_data)
374
375 self.constraints = self._init_constraints(constraints=constraints,
--> 376 model=self.model)
377
378 # Bind as much as possible the provided arguments.
C:\ProgramData\Anaconda3\envs\sf_env\lib\site-packages\symfit\core\fit.py in _init_constraints(self, constraints, model)
565 else:
566 con_models.append(
--> 567 model.__class__.as_constraint(constraint, model)
568 )
569 return con_models
C:\ProgramData\Anaconda3\envs\sf_env\lib\site-packages\symfit\core\models.py in as_constraint(cls, constraint, model, constraint_type, **init_kwargs)
157 instance = cls.with_dependencies(constraint,
158 dependency_model=model,
--> 159 **init_kwargs)
160
161 # Check if the constraint_type is allowed, and flip the sign if needed
C:\ProgramData\Anaconda3\envs\sf_env\lib\site-packages\symfit\core\models.py in with_dependencies(cls, model_expr, dependency_model, **init_kwargs)
207 :return: A stand-alone :class:`~symfit.core.models.BaseModel` subclass.
208 """
--> 209 model = cls(model_expr, **init_kwargs) # Initiate model instance.
210 if any(var in dependency_model for var in model.independent_vars):
211 # This model depends on the output of the dependency_model,
TypeError: __init__() missing 1 required positional argument: 'initial'
Adding constraints to the fitting of an ODEModel raises an error,
__init__() missing 1 required positional argument: 'initial'Taking the simple coupled ODE model from the docs and adding an equality constraint to the variables (one that will necessarily be true anyways) gives the following output: