sagemath / sage

Main repository of SageMath
https://www.sagemath.org
Other
1.36k stars 462 forks source link

Zero matrix over an algebra #38221

Closed lzcohen closed 2 months ago

lzcohen commented 3 months ago

Steps To Reproduce

G = CyclicPermutationGroup(7); R = GF(2); A = G.algebra(R); S = MatrixSpace(A, 3, 3); S.zero_matrix()

Expected Behavior

This should return the matrix [[0,0,0],[0,0,0],[0,0,0]]

Actual Behavior

ValueError Traceback (most recent call last) Cell In[11], line 1 ----> 1 S.zero_matrix()

File /private/var/tmp/sage-10.3-current/local/var/lib/sage/venv-python3.11.8/lib/python3.11/site-packages/sage/misc/cachefunc.pyx:2329, in sage.misc.cachefunc.CachedMethodCallerNoArgs.call (build/cythonized/sage/misc/cachefunc.c:16253)() 2327 if self.cache is None: 2328 f = self.f -> 2329 self.cache = f(self._instance) 2330 return self.cache 2331

File /private/var/tmp/sage-10.3-current/local/var/lib/sage/venv-python3.11.8/lib/python3.11/site-packages/sage/matrix/matrix_space.py:1999, in MatrixSpace.zero_matrix(self) 1971 """ 1972 Return the zero matrix in self. 1973 (...) 1996 False 1997 """ 1998 zero = self.base_ring().zero() -> 1999 res = self.element_class(self, zero, False, False) 2000 res.set_immutable() 2001 return res

File /private/var/tmp/sage-10.3-current/local/var/lib/sage/venv-python3.11.8/lib/python3.11/site-packages/sage/matrix/matrix_generic_dense.pyx:81, in sage.matrix.matrix_generic_dense.Matrix_generic_dense.init (build/cythonized/sage/matrix/matrix_generic_dense.c:5528)() 79 [x y] 80 """ ---> 81 ma = MatrixArgs_init(parent, entries) 82 self._entries = ma.list(coerce) 83

File /private/var/tmp/sage-10.3-current/local/var/lib/sage/venv-python3.11.8/lib/python3.11/site-packages/sage/matrix/args.pyx:1390, in sage.matrix.args.MatrixArgs_init (build/cythonized/sage/matrix/args.c:21785)() 1388 ret.entries = entries 1389 ret.set_space(space) -> 1390 ret.finalize() 1391 return ret

File /private/var/tmp/sage-10.3-current/local/var/lib/sage/venv-python3.11.8/lib/python3.11/site-packages/sage/matrix/args.pyx:930, in sage.matrix.args.MatrixArgs.finalize (build/cythonized/sage/matrix/args.c:15152)() 928 if self.typ == MA_ENTRIES_MATRIX: 929 m = self.entries --> 930 self.set_nrows(m._nrows) 931 self.set_ncols(m._ncols) 932 self.setdefault_base(m._parent._base)

File /private/var/tmp/sage-10.3-current/local/var/lib/sage/venv-python3.11.8/lib/python3.11/site-packages/sage/matrix/args.pxd:104, in sage.matrix.args.MatrixArgs.set_nrows (build/cythonized/sage/matrix/args.c:6653)() 102 cdef long p = self.nrows 103 if p != -1 and p != n: --> 104 raise ValueError(f"inconsistent number of rows: should be {p} but got {n}") 105 self.nrows = n 106

ValueError: inconsistent number of rows: should be 3 but got 7

Additional Information

No response

Environment

- **OS**: macOS 14.5
- **Sage Version**: 10.3

Checklist

mkoeppe commented 3 months ago

Confirmed. Since #24829, .zero_matrix() passes the zero of the base ring of the matrix space into MatrixArgs, but MatrixArgs tries to call ._matrix_() on it before even checking whether it's an appropriate scalar

mkoeppe commented 3 months ago

38235 fixes the specific reported problem; but S(A.one()) is still broken after that for the same reason.

mkoeppe commented 3 months ago

I've fixed that now too.