forked from IPKM/nmreval
fit with expression works with single fit
This commit is contained in:
parent
ca130eaa14
commit
c601e77cec
@ -2,6 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from numbers import Number
|
from numbers import Number
|
||||||
from itertools import count
|
from itertools import count
|
||||||
|
from re import sub
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
@ -69,6 +70,9 @@ class Parameters(dict):
|
|||||||
name = par.name
|
name = par.name
|
||||||
else:
|
else:
|
||||||
par = Parameter(name=name, value=value, var=var, lb=lb, ub=ub)
|
par = Parameter(name=name, value=value, var=var, lb=lb, ub=ub)
|
||||||
|
|
||||||
|
name = _prepare_namespace_string(name)
|
||||||
|
|
||||||
self[name] = par
|
self[name] = par
|
||||||
par.eval_allowed = False
|
par.eval_allowed = False
|
||||||
self._namespace[name] = par.value
|
self._namespace[name] = par.value
|
||||||
@ -114,6 +118,7 @@ class Parameter:
|
|||||||
self._expr = None
|
self._expr = None
|
||||||
|
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
|
value = _prepare_namespace_string(value)
|
||||||
self._expr = value
|
self._expr = value
|
||||||
self.var = False
|
self.var = False
|
||||||
|
|
||||||
@ -171,9 +176,7 @@ class Parameter:
|
|||||||
@property
|
@property
|
||||||
def value(self) -> float:
|
def value(self) -> float:
|
||||||
if self._expr is not None and self.eval_allowed:
|
if self._expr is not None and self.eval_allowed:
|
||||||
print(self._expr, self.namespace)
|
return eval(self._expr, {}, self.namespace)
|
||||||
print(eval(self._expr, self.namespace))
|
|
||||||
return eval(self._expr, self.namespace)
|
|
||||||
elif self._value is not None:
|
elif self._value is not None:
|
||||||
return self._value
|
return self._value
|
||||||
|
|
||||||
@ -216,3 +219,7 @@ class Parameter:
|
|||||||
para_copy = Parameter(name=self.name, value=val, var=self.var, lb=self.lb, ub=self.ub)
|
para_copy = Parameter(name=self.name, value=val, var=self.var, lb=self.lb, ub=self.ub)
|
||||||
|
|
||||||
return para_copy
|
return para_copy
|
||||||
|
|
||||||
|
|
||||||
|
def _prepare_namespace_string(expr: str) -> str:
|
||||||
|
return sub('[\(\)\{.\}\\\]', '_', expr)
|
||||||
|
@ -56,7 +56,7 @@ class Lorentzian:
|
|||||||
off (float): baseline
|
off (float): baseline
|
||||||
|
|
||||||
"""
|
"""
|
||||||
print('Lorentzian', a, mu, sigma, off)
|
# print('Lorentzian', a, mu, sigma, off)
|
||||||
return (a/np.pi) * 2*sigma / (4*(x-mu)**2 + sigma**2) + off
|
return (a/np.pi) * 2*sigma / (4*(x-mu)**2 + sigma**2) + off
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user