diff --git a/lmfit/model.py b/lmfit/model.py index 97c3ac66..59fa7537 100644 --- a/lmfit/model.py +++ b/lmfit/model.py @@ -1861,7 +1861,7 @@ def loads(self, s, funcdefs=None, **kws): funcdefs : dict, optional Dictionary of custom function names and definitions. **kws : optional - Keyword arguments that are passed to `json.dumps`. + Keyword arguments that are passed to `json.loads`. Returns ------- @@ -1885,6 +1885,9 @@ def loads(self, s, funcdefs=None, **kws): self.model = _buildmodel(decode4js(modres['model']), funcdefs=funcdefs) # params + if funcdefs: + # Remove model function so as not pass it into the _asteval.symtable + funcdefs.pop(self.model.func.__name__, None) for target in ('params', 'init_params'): state = {'unique_symbols': modres['unique_symbols'], 'params': []} for parstate in modres['params']: diff --git a/tests/test_model_saveload.py b/tests/test_model_saveload.py index 418219ba..fbede5dd 100644 --- a/tests/test_model_saveload.py +++ b/tests/test_model_saveload.py @@ -254,8 +254,10 @@ def expr_func(x): result2 = ModelResult(model, Parameters()) result2.loads(result1.dumps(), funcdefs={'mfunc': mfunc, 'expr_func': expr_func}) + assert result1.userfcn == result2.userfcn assert result1.params == result2.params assert result1.init_params == result2.init_params + assert set(result1.params._asteval.symtable) == set(result2.params._asteval.symtable) def test_saveload_modelresult_eval_uncertainty():