Skip to content

Commit cd685ba

Browse files
committed
First attempt at fixing initialize_curvefit_params, issues warnings
1 parent d4bbfcf commit cd685ba

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

xarray/core/dataset.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -332,17 +332,19 @@ def _initialize_curvefit_params(params, p0, bounds, func_args):
332332
"""Set initial guess and bounds for curvefit.
333333
Priority: 1) passed args 2) func signature 3) scipy defaults
334334
"""
335+
from xarray.core.computation import where
335336

336337
def _initialize_feasible(lb, ub):
337338
# Mimics functionality of scipy.optimize.minpack._initialize_feasible
338339
lb_finite = np.isfinite(lb)
339340
ub_finite = np.isfinite(ub)
340341
p0 = np.nansum(
341342
[
342-
0.5 * (lb + ub) * int(lb_finite & ub_finite),
343-
(lb + 1) * int(lb_finite & ~ub_finite),
344-
(ub - 1) * int(~lb_finite & ub_finite),
345-
]
343+
0.5 * (lb + ub) * (lb_finite & ub_finite),
344+
(lb + 1) * (lb_finite & ~ub_finite),
345+
(ub - 1) * (~lb_finite & ub_finite),
346+
],
347+
axis=0,
346348
)
347349
return p0
348350

@@ -352,9 +354,13 @@ def _initialize_feasible(lb, ub):
352354
if p in func_args and func_args[p].default is not func_args[p].empty:
353355
param_defaults[p] = func_args[p].default
354356
if p in bounds:
355-
bounds_defaults[p] = tuple(bounds[p])
356-
if param_defaults[p] < bounds[p][0] or param_defaults[p] > bounds[p][1]:
357-
param_defaults[p] = _initialize_feasible(bounds[p][0], bounds[p][1])
357+
lb, ub = bounds[p]
358+
bounds_defaults[p] = (lb, ub)
359+
param_defaults[p] = where(
360+
(param_defaults[p] < lb) | (param_defaults[p] > ub),
361+
_initialize_feasible(lb, ub),
362+
param_defaults[p],
363+
)
358364
if p in p0:
359365
param_defaults[p] = p0[p]
360366
return param_defaults, bounds_defaults

0 commit comments

Comments
 (0)