Findings F-H6, F-L15 in DEEP_ANALYSIS.md (parent #261). Verified against bumps 1.0.4.
minimizer_bumps.py:235-236, 765-781:
- The "+1 because steps are zero-based" assumption holds for
amoeba only. LevenbergMarquardtFit always reports history.step[0] == 1 (no per-iteration streaming), so results.iterations is always 2 and budget exhaustion is never detected for Bumps_lm.
- For
newton the last step index equals the budget (1-based), so a run that legitimately converges on the last allowed step is misreported as success=False ("reached maximum optimizer steps").
OptimizeResult(..., success=True, status=0) is fabricated (lines 237-244): a diverged bumps fit can never report engine failure; results.success depends solely on the budget heuristic.
- If a fitter never streams a step,
int(history_step.step[0]) raises IndexError inside the success path and converts a successful fit into FitError (line 236).
Findings F-H6, F-L15 in DEEP_ANALYSIS.md (parent #261). Verified against bumps 1.0.4.
minimizer_bumps.py:235-236, 765-781:amoebaonly.LevenbergMarquardtFitalways reportshistory.step[0] == 1(no per-iteration streaming), soresults.iterationsis always 2 and budget exhaustion is never detected forBumps_lm.newtonthe last step index equals the budget (1-based), so a run that legitimately converges on the last allowed step is misreported assuccess=False("reached maximum optimizer steps").OptimizeResult(..., success=True, status=0)is fabricated (lines 237-244): a diverged bumps fit can never report engine failure;results.successdepends solely on the budget heuristic.int(history_step.step[0])raisesIndexErrorinside the success path and converts a successful fit intoFitError(line 236).