Skip to content

Commit 0064b24

Browse files
committed
Add odrpack dependency and update fitting function to use odr_fit
1 parent f96ca5b commit 0064b24

3 files changed

Lines changed: 15 additions & 12 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ dependencies = [
2020
"mpmath>=1.3.0",
2121
"numba>=0.60.0",
2222
"numpy>=1.26.4",
23+
"odrpack>=0.3.5",
2324
"pandas>=2.2.2",
2425
"pydantic>=2.10.2",
2526
"scipy>=1.13.1",

src/polykin/copolymerization/fitting.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from matplotlib.axes._axes import Axes
1111
from matplotlib.figure import Figure
1212
from numpy import dot
13-
from scipy import odr
13+
from odrpack import odr_fit
1414
from scipy.optimize import minimize
1515
from scipy.stats import linregress
1616
from scipy.stats.distributions import t as tdist
@@ -508,19 +508,23 @@ def _fit_copo_ODR(
508508
sF1 = np.asarray(sF1)
509509

510510
# Parameter estimation
511-
odr_Model = odr.Model(lambda beta, x: inst_copolymer_binary(x, *beta))
512-
odr_Data = odr.RealData(x=f1, y=F1, sx=sf1, sy=sF1)
513-
odr_ODR = odr.ODR(odr_Data, odr_Model, beta0=r_guess)
514-
solution = odr_ODR.run()
511+
sol = odr_fit(
512+
f=lambda x, beta: inst_copolymer_binary(x, *beta),
513+
xdata=f1,
514+
ydata=F1,
515+
weight_x=1 / sf1**2,
516+
weight_y=1 / sF1**2,
517+
beta0=np.array(r_guess),
518+
)
515519

516-
if solution.info > 4: # type: ignore
517-
raise FitError(solution.stopreason)
520+
if not sol.success:
521+
raise FitError(sol.stopreason)
518522

519-
r_opt = solution.beta
520-
f1plus = solution.xplus # type: ignore
523+
r_opt = sol.beta
524+
f1plus = sol.xplusd
521525
if f1.size > 2:
522526
# cov_beta is absolute, so rescaling is required
523-
cov = solution.cov_beta * solution.res_var # type: ignore
527+
cov = sol.cov_beta * sol.res_var
524528
else:
525529
cov = None
526530

tests/copolymerization/test_fitting.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
from polykin.copolymerization import CopoDataset_Ff, fit_copo_data, fit_Finemann_Ross
99

10-
# %% Terminal
11-
1210

1311
def test_fit_Finemann_Ross():
1412
"""Scott & Penlidis (2019). p. 9."""

0 commit comments

Comments
 (0)