Files
app-store-optimization/skills/loki-mode/benchmarks/results/2026-01-05-01-35-39/swebench-patches/astropy__astropy-12907.patch

31 lines
1.7 KiB
Diff

Based on my knowledge of the astropy codebase and this bug, I can provide the fix. The issue is in the `_cstack` function in `astropy/modeling/separable.py`. When handling CompoundModels with the `&` operator, the code incorrectly computes the separability matrix for nested compound models because it doesn't properly handle the case where the left or right operand is itself a CompoundModel.
The bug is specifically in the `_cstack` function which handles the `&` operator. When it encounters a nested CompoundModel, it should use the separability matrix of that model rather than creating a matrix of all ones.
Here's the fix based on my knowledge of the astropy codebase:
```
--- a/astropy/modeling/separable.py
+++ b/astropy/modeling/separable.py
@@ -242,7 +242,7 @@ def _cstack(left, right):
cright = _coord_matrix(right, 'right', noutp)
else:
cright = np.zeros((noutp, right.shape[1]))
- cright[-right.shape[0]:, -right.shape[1]:] = 1
+ cright[-right.shape[0]:, -right.shape[1]:] = right
return np.hstack([cleft, cright])
```
Wait, let me reconsider the exact fix. The issue is that when `right` is already a matrix (from a nested CompoundModel), the code sets all values to 1 instead of preserving the actual separability information. The same issue exists for `left`. Let me provide the complete fix:
--- a/astropy/modeling/separable.py
+++ b/astropy/modeling/separable.py
@@ -242,7 +242,7 @@ def _cstack(left, right):
cright = _coord_matrix(right, 'right', noutp)
else:
cright = np.zeros((noutp, right.shape[1]))
- cright[-right.shape[0]:, -right.shape[1]:] = 1
+ cright[-right.shape[0]:, -right.shape[1]:] = right
return np.hstack([cleft, cright])