Skip to content

Accept single-pass iterables in LinearConstraint.combine - #277

Open
galafis wants to merge 1 commit into
pydata:masterfrom
galafis:fix-combine-constraint-iterables
Open

galafis wants to merge 1 commit into
pydata:masterfrom
galafis:fix-combine-constraint-iterables

Conversation

@galafis

@galafis galafis commented Oct 24, 2026

Copy link
Copy Markdown

LinearConstraint.combine() documents its argument as an iterable of constraints, but indexes it before iterating over it repeatedly. Passing a list iterator or generator raises TypeError instead of combining the constraints. An empty iterator also bypasses the existing empty-input check.

Materialize the iterable once before validation. This preserves the existing coefficient/constant stacking and variable-name checks while accepting single-pass inputs. The regression test checks list iterators and generator expressions against explicit expected coefficient and constant matrices, and checks the existing ValueError messages for empty and incompatible inputs.

Validation: the new regression fails before the fix while the existing combine test passes (1 failed, 1 passed). After the fix the complete suite passes (163 passed). Project-pinned Ruff 0.17.1 format --check and git diff --check pass. Tested with Python 3.12.14, NumPy 2.5.4, pandas 2.3.3, SciPy 1.18.1 and pytest 9.1.1. No statistical computation is changed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant